Определите, закодирован ли аудиофайл в 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

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

Другие вопросы по тегам