首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定音频文件是否以Apple Lossless (ALAC)编码

确定音频文件是否以Apple Lossless (ALAC)编码
EN

Stack Overflow用户
提问于 2012-06-07 23:28:43
回答 5查看 6.2K关注 0票数 5

有许多具有.m4a后缀的音频文件,这些文件是以AACApple Lossless (ALAC)之一编码的。我想只选择在苹果无损编码的音频文件。有什么方法可以确定这一点吗?我试过FFmpeg,但它显示它们都是用AAC编码的。

编辑:我当前使用的是Windows。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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”只有一次)。

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

票数 2
EN

Stack Overflow用户

发布于 2016-08-14 02:31:13

如果你有FFmpeg package,你应该有ffprobe

试一试:

代码语言:javascript
复制
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:以删除额外的格式化

这将只打印出aacalac。非常适合编写脚本。

票数 4
EN

Stack Overflow用户

发布于 2012-06-08 00:14:09

您可以使用Core Audio来完成此操作。

类似于:

代码语言:javascript
复制
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
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10934936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档