Audio 确定音频文件是否采用Apple无损(ALAC)编码

Audio 确定音频文件是否采用Apple无损(ALAC)编码,audio,encoding,aac,m4a,Audio,Encoding,Aac,M4a,有许多音频文件的后缀为.m4a,这些文件以或(ALAC)之一进行编码。我只想选择苹果无损编码的音频文件。有没有办法确定这一点?我试过了,但是上面说所有的都是用AAC编码的 编辑:我目前在Windows上。您可以使用核心音频进行编辑 比如: CFStringRef pathToFile; CFURLRef inputFileURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, pathToFile, kCFURLPOSIXPathStyl

有许多音频文件的后缀为
.m4a
,这些文件以或(ALAC)之一进行编码。我只想选择苹果无损编码的音频文件。有没有办法确定这一点?我试过了,但是上面说所有的都是用AAC编码的


编辑:我目前在Windows上。

您可以使用核心音频进行编辑

比如:

CFStringRef pathToFile;
CFURLRef inputFileURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, pathToFile, kCFURLPOSIXPathStyle, false);
ExtAudioFileRef inputFile;
ExtAudioFileOpenURL(inputFileURL,  &inputFile);

AudioStreamBasicDescription fileDescription;
UInt32 propertySize = sizeof(fileDescription);

ExtAudioFileGetProperty(inputFile, 
  kExtAudioFileProperty_FileDataFormat,
  &propertySize,
  &fileDescription);    

if(fileDescription.mFormatID == kAudioFormatAppleLossless){
  // file is apple lossless
}

下面是一个文件,该文件在第67页有M4A的描述(目前为止我能找到的最好的描述):

起初,我认为“ftyp”是决定格式的地方,但从这个列表来看,它更像文件类型本身(已经被称为m4a):

描述了更多的格式

如果ftyp没有区分,那么我认为“主要品牌”字段可能指的是本页上的fourcc: 苹果无损的一个是“alac”,而AAC可能是“mp4a”

苹果的无损格式开源页面表明ftype是“alac”(与上面的内容稍有矛盾)

到目前为止,我能说的是,ftyp后面的4个字节总是(在一个小样本大小中)“M4A”

大约在前200(十六进制)字节的某个地方,有一个ascii“mp4a”用于AAC压缩,或者有一个“alac”用于Apple无损压缩。“alac”似乎总是成对出现,相隔约30字节(“mp4a”仅出现一次)


对不起,这不是更具体的,如果我找到确切的位置或前缀,我会再次更新。(我猜头的前面部分在某个地方指定了大小。)

在Mac电脑上,选择所需的文件,然后右键单击。找到“获取信息”并单击它,一个窗口将弹出,其中包含有关所选文件的额外信息。它应该在“编解码器”旁边写:“AAC”或“苹果无损” 我希望我能帮助那些有同样问题的Mac用户(可能还有Windows用户,尽管我不熟悉操作系统。)

尝试使用

“MediaInfo是视频和音频文件最相关的技术和标记数据的方便统一显示。”-sourceforge项目说明

这就是信息的显示方式

General
Complete name                    : C:\Downloads\recit24bit.m4a
Format                           : MPEG-4
Format profile                   : Apple audio with iTunes info
Codec ID                         : M4A 
File size                        : 2.62 MiB
Duration                         : 9s 9ms
Overall bit rate                 : 2 441 Kbps
Track name                       : 24 bit recital ALAC Test File
Performer                        : N\A
Comment                          : Test File

Audio
ID                               : 1
Format                           : ALAC
Codec ID                         : alac
Codec ID/Info                    : Apple Lossless Format
Duration                         : 9s 9ms
Bit rate mode                    : Variable
Bit rate                         : 2 438 Kbps
Channel(s)                       : 2 channels
Sampling rate                    : 22.7 KHz
Bit depth                        : 24 bits
Stream size                      : 2.62 MiB (100%)
Language                         : English
查看音频部分了解编解码器/编码详细信息。

如果您有FFmpeg,您应该有
ffprobe

尝试一下:

ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 file.m4a
  • -v error
    :隐藏启动文本
  • -选择\u streams a:0
    :以选择第一个音频曲目
  • -show_entries stream=codec_name
    :仅显示编解码器类型
  • -of default=noprint\u wrappers=1:nokey=1
    :删除额外格式

这将仅打印出
aac
alac
。非常适合编写脚本。

这是一种特定的语言,还是在寻找基于CLI的linux工具?您是否尝试过不同的FFMPEG构建?我很惊讶它不能识别正确的编解码器。@Lee我目前正在使用Python,但是如果有任何可编程的方法,我都可以。我可以打开CLI实用程序,使用ctypes调用C函数,或者用另一种语言编写。@aglassman如上所述,我不在乎必须使用哪种语言。您当前使用的是哪种版本的ffmpeg。ALAC是在v0.5中引入的(与2008年类似??)。我想你的版本很好,但只是涵盖了所有的基础…完美。谢谢
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 file.m4a