有许多具有.m4a后缀的音频文件,这些文件是以AAC或Apple Lossless (ALAC)之一编码的。我想只选择在苹果无损编码的音频文件。有什么方法可以确定这一点吗?我试过FFmpeg,但它显示它们都是用AAC编码的。
编辑:我当前使用的是Windows。
发布于 2012-09-22 05:00:12
在67页上有一个描述M4A的文件(迄今为止我能找到的最好的):http://iweb.dl.sourceforge.net/project/audiotools/audio%20formats%20reference/2.14/audioformats_2.14_letter.pdf
典型的M4A以'ftyp‘原子开头,表示其文件类型...10.2.1ftyp原子031ftyp长度32 63 ' ftyp‘(0x66747970) 64 95主要品牌96 127主要品牌版本128 159兼容品牌₁...“主要品牌”和“兼容品牌”字段是ASCII字符串。‘主要品牌版本’是一个整数。
起初我认为‘http://www.ftyps.com/index.html’应该是确定格式的地方,但从这个列表判断,它更像是文件类型本身(已经被称为ftyp):ftyp
http://www.ftyps.com/what.html描述了该格式的更多内容。
如果字体没有区别,那么我认为‘主要品牌’字段可能指的是本页上的四个If:http://wiki.multimedia.cx/index.php?title=QuickTime_container表示苹果无损的是'alac‘,AAC表示的可能是'mp4a’。
苹果公司的无损格式开源页面显示,ftype是'alac‘(与上面略有矛盾) http://alac.macosforge.org/trac/browser/trunk/ALACMagicCookieDescription.txt
到目前为止,我能告诉你的是,ftyp后面的4个字节总是(在一个小样本大小中) 'M4A‘。
在第一个~200 (十六进制)字节的某处,有一个ascii 'mp4a‘代表AAC压缩,或者一个'alac’代表Apple Lossless。“alac”似乎总是成对出现,间隔约30个字节(“mp4a”只有一次)。
对不起,这不是更具体的,如果我找到确切的位置或前缀,我会再次更新。(我猜是报头的前半部分在某个地方指定了大小。)
发布于 2016-08-14 02:31:13
如果你有FFmpeg package,你应该有ffprobe。
试一试:
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 file.m4a-v error:以隐藏启动text-select_streams a:0:选择第一个音频track-show_entries stream=codec_name:以仅显示编解码器type-of default=noprint_wrappers=1:nokey=1:以删除额外的格式化这将只打印出aac或alac。非常适合编写脚本。
发布于 2012-06-08 00:14:09
您可以使用Core Audio来完成此操作。
类似于:
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
}https://stackoverflow.com/questions/10934936
复制相似问题