确定音频文件是否在Apple Lossless(ALAC)中编码

时间:2012-06-07 15:28:43

标签: audio encoding aac m4a

有许多音频文件带有.m4a后缀,这些文件以AACApple Lossless(ALAC)之一编码。我想只选择Apple Lossless中编码的音频文件。有什么方法可以确定吗?我尝试了FFmpeg,但它说所有这些都是用AAC编码的。

编辑:我目前在Windows上。

5 个答案:

答案 0 :(得分:1)

你可以使用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
}

答案 1 :(得分:1)

这是一个文件,其中包含M4A的说明(目前为止我能找到的最佳内容),第67页: http://iweb.dl.sourceforge.net/project/audiotools/audio%20formats%20reference/2.14/audioformats_2.14_letter.pdf

A typical M4A begins with an 'ftyp' atom indicating its file type...
10.2.1 the ftyp atom
[0 31] ftyp Length [32 63] 'ftyp' (0x66747970)
[64 95] Major Brand [96 127] Major Brand Version
[128 159] Compatible Brand₁ ...
The 'Major Brand' and 'Compatible Brand' elds are ASCII strings. 
'Major Brand Version' is an integer.

起初我认为'ftyp'将是确定格式的位置,但是通过此列表判断更像是文件类型本身(已知为m4a): http://www.ftyps.com/index.html

http://www.ftyps.com/what.html描述了更多的格式。

如果ftyp没有区分,那么我认为'Major Brand'字段可能会引用此页面上的fourcc: http://wiki.multimedia.cx/index.php?title=QuickTime_container Apple Lossless的'alac'和AAC可能是'mp4a'

Apple的无损格式开源页面表明ftype是'alac'(与上面略有矛盾) http://alac.macosforge.org/trac/browser/trunk/ALACMagicCookieDescription.txt

到目前为止,我所知道的是ftyp之后的4个字节总是(在一个小的样本中)'M4A'。

在第一个~200(十六进制)字节左右的某处,有一个用于AAC压缩的ascii'mp4a'或用于Apple Lossless的'alac'。 'alac'似乎总是成对出现〜相隔30个字节('mp4a'只有一次)。

对不起,这不是更具体,如果我找到确切的位置或前缀我将再次更新。 (我的猜测是标题的前面部分有一个指定的大小。)

答案 2 :(得分:0)

在Mac上,选择所需的文件,然后右键单击。找到“获取信息”并单击它,将弹出一个窗口,其中包含有关所选文件的额外信息。应该说“Codecs:”“AAC”或“Apple Lossless”旁边 我希望我帮助那些有相同问题的Mac用户(即使我不熟悉操作系统,也可能以某种方式使用Windows用户。)

答案 3 :(得分:0)

尝试使用http://sourceforge.net/projects/mediainfo/

“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

检查音频部分以获取编解码器/编码详细信息。

答案 4 :(得分:0)

如果您有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:隐藏启动文字
  • -select_streams a:0:选择第一个音轨
  • -show_entries stream=codec_name:仅显示编解码器类型
  • -of default=noprint_wrappers=1:nokey=1:删除额外格式

这将打印出aacalac。完美的脚本。