2012-06-07 2 views
2

Существует несколько аудиофайлов, имеющих суффикс .m4a, и они закодированы в одном из AAC или Apple Lossless (ALAC). Я хочу выбрать только аудиофайлы, закодированные в Apple Lossless из них. Есть ли способ определить это? Я попробовал FFmpeg, но он говорит, что все они закодированы в AAC.Определите, закодирован ли аудиофайл в Apple Lossless (ALAC)

Редактировать: Я сейчас в Windows.

+0

Какой язык вы используете? – aglassman

+0

Вы делаете это на каком-то конкретном языке или ищете интерфейс Linux на базе CLI? – Lee

+0

Вы пробовали другую сборку FFMPEG? Я удивлен, что он не распознает правильный кодек. – Brad

ответ

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»

страница с открытым исходным кодом в формате Lossless от Apple указывает на то, что Ftype является «ALAC» (немного противоречива выше) http://alac.macosforge.org/trac/browser/trunk/ALACMagicCookieDescription.txt

пока что я могу сказать, что 4 байта следующие FtyP всегда (в небольшом объеме выборки) 'M4A'.

Где-то в первых ~ 200 (шестнадцатеричных) байтах или около того имеется ascii «mp4a» для сжатия AAC или «alac» для Apple Lossless. «Алак» всегда кажется парами ~ 30 байт («mp4a» только один раз).

Извините, что это не более конкретно, если я нахожу точное местоположение или префикс, я снова обновлю. (Моя догадка заключается в том, что более ранняя часть заголовка имеет размер, указанный где-то.)

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 
} 
+0

О, спасибо за ваш ответ, но я нахожусь в Windows. – minhee

0

На Mac вы выбираете нужный файл, а затем щелкните правой кнопкой мыши. Найдите «Получить информацию» и щелкните по нему, и появится окно с дополнительной информацией о выбранном вами файле. Он должен сказать рядом с «Кодеки:« «AAC» или «Apple Lossless» Надеюсь, я помог тем пользователям Mac, у которых был такой же вопрос (и, возможно, пользователи Windows каким-то образом, хотя я не знаком с ОС.)

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 

Проверьте раздел аудио для деталей кодека/кодирования.

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: скрыть текст Startup
  • -select_streams a:0: выбрать первую звуковую дорожку
  • -show_entries stream=codec_name: отображать только тип кодека
  • -of default=noprint_wrappers=1:nokey=1: удалить дополнительное форматирование

Это напечатает только aac или alac. Идеально подходит для сценариев.