Определите, закодирован ли аудиофайл в Apple Lossless (ALAC)
Есть ряд аудио файлов, которые имеют .m4a
суффикс, и они закодированы в одном из AAC или Apple Lossless (ALAC). Я хочу выбирать только аудиофайлы, закодированные в Apple Lossless из них. Есть ли способ определить это? Я пробовал FFmpeg, но он говорит, что все они закодированы в AAC.
Изменить: я в настоящее время на Windows.
5 ответов
Вот файл с описанием 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 с открытым исходным кодом в формате Lossless указывает, что ftype является "alac" (слегка противоречит вышеприведенному) http://alac.macosforge.org/trac/browser/trunk/ALACMagicCookieDescription.txt
Пока что я могу сказать, что 4 байта, следующие за ftyp, всегда (в небольшом размере выборки) 'M4A '.
Где-то в первых ~200 (шестнадцатеричных) байтах или около того есть ascii 'mp4a' для сжатия AAC или 'alac' для Apple Lossless. Кажется, что "alac" всегда идет парами на расстоянии ~30 байт ("mp4a" только один раз).
Извините, это не более конкретно, если я найду точное местоположение или префикс, я обновлю снова. (Я предполагаю, что более ранняя часть заголовка имеет размер, указанный где-то.)
Если у вас есть пакет 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
: скрыть текст запуска-select_streams a:0
: выбрать первую звуковую дорожку-show_entries stream=codec_name
: отображать только тип кодека-of default=noprint_wrappers=1:nokey=1
: убрать лишнее форматирование
Это распечатает только aac
или же alac
, Идеально подходит для написания сценариев.
Вы можете сделать это с 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
}
На Mac вы выбираете нужный файл и затем щелкаете правой кнопкой мыши. Найдите "Get Info" и щелкните по нему, и появится окно с дополнительной информацией о выбранном вами файле. Надо сказать "Кодеки": "AAC" или "Apple Lossless". Надеюсь, я помог тем пользователям Mac, у которых возник такой же вопрос (и, возможно, каким-то образом пользователям Windows, хотя я не знаком с ОС).
Попробуйте использовать 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
Проверьте аудио раздел для кодека / детали кодирования.