Команда FFmpeg для преобразования MP3 в AAC

47839
Soham Dasgupta

Я могу выдать эту команду:

ffmpeg -i input.mp3 -acodec alac -ab 128k -ar 48000 -ac 2 -y output.m4a 

создать файл m4a.

Но когда я выдаю эту команду

ffmpeg -i input.mp3 -acodec alac -ab 128k -ar 48000 -ac 2 -y output.aac 

ffmpeg выдает ошибку, говоря

Не удалось записать заголовок для выходного файла # 0 (неверные параметры кодека?).

Кроме того, размер файла m4a действительно почти в 5,8 раза больше исходного файла, что совершенно не то, что я хотел и почему я хотел преобразовать в AAC.

17

2 ответа на вопрос

34
slhck

Как я могу конвертировать в AAC?

Это самая простая команда FFmpeg для преобразования входных данных в аудио AAC с использованием AAC FFmpeg самого высокого качества. libfdk_aacкодировщик Fraunhofer AAC, и он доступен, когда вы скомпилировали FFmpeg с его поддержкой.

ffmpeg -i input.mp3 -c:a libfdk_aac output.m4a 

Чтобы изменить качество, у вас есть два варианта:

  • Для переменной битрейта (VBR) используйте -vbrопцию. Например, -vbr 4это хороший выбор (примерно 128 кбит / с для стереозвука). Выше значит лучше. Значения варьируются от 1 до 5.

    ffmpeg -i input.mp3 -c:a libfdk_aac -vbr 4 output.m4a 
  • Для фиксированного битрейта (CBR), используйте эту -b:aопцию, например -b:a 128k. 128 кбит / с должно быть достаточно для большинства ситуаций. Вы также можете выбрать что-то более низкое.

    ffmpeg -i input.mp3 -c:a libfdk_aac -b:a 128k output.m4a 

Вы также можете использовать HE-AAC (v1 / v2) вместо стандартного профиля AAC-LC (низкая сложность), который лучше всего подходит для низких битрейтов:

ffmpeg -i input.mp3 -c:a libfdk_aac -profile:a aac_he_v2 -b:a 32k output.m4a 

Что если у меня нет libfdk_aac?

Некоторые версии FFmpeg не имеют libfdk_aac(по причинам лицензирования). Если это так, вы можете использовать встроенный кодировщик AAC:

ffmpeg -i input.mp3 -c:a aac -b:a 192k output.m4a 

Этот кодер не поддерживает VBR должным образом, поэтому, если вам это нужно или HE-AAC, читайте дальше.

Вы можете скомпилировать ffmpeg самостоятельно и добавить libfdk_aacподдержку. На FFmpeg Wiki есть руководства . Компиляция проста в Linux, умеренно проста в OS X и довольно сложна в Windows. Когда вы будете следовать руководствам по компиляции и устанавливать соответствующие библиотеки раньше, FFmpeg теперь дает вам возможность использовать libfdk_aac.


Были некоторые проблемы с вашим оригинальным подходом:

  • alacэто не AAC. ALAC - это кодек Apple Lossless Audio, а AAC - расширенное кодирование звука .

  • Вот почему ваш вывод больше, чем вход, потому что, в отличие от MP3, ALAC все еще сжимается, но он должен быть без потерь - поэтому он должен хранить больше данных.

  • .aacне является выходным контейнером для аудио ALAC. Если вы используете AAC, это должно работать. Я бы использовал MP4 или M4A, хотя.

В Ubuntu 12.04 я не смог использовать опцию `-c: a`, есть ли у этого синоним? Я предполагаю, что это может означать `-acodec: a`, но в итоге я просто отбросил его, и` ffmpeg` смог вывести кодек на основе желаемого имени выходного файла. (Требуется `-strict экспериментальный`, хотя; и добавьте` -map_metadata 0: 0` для хорошей меры, чтобы сохранить теги ID3.) tripleee 10 лет назад 0
Также стоит отметить: я хотел файлы M4B (аудиокниги), которые `ffmpeg`, по-видимому, не поддерживает, но кажется, что преобразование в M4A и затем просто переименование работает. tripleee 10 лет назад 0
@tripleee Это означает, что вы используете устаревшую программу под названием `ffmpeg`, но на самом деле она не из FFmpeg, а из разветвления Libav. К сожалению, Ubuntu поставила его вместо «настоящего» ffmpeg. Смотрите: [Кто может подсказать мне разницу и связь между ffmpeg, libav и avconv] (http://stackoverflow.com/questions/9477115/who-can-tell-me-the-difference-and-relation-between- FFmpeg-libav-и-avconv) slhck 10 лет назад 0
@slhck: Спасибо за быстрое обновление и ссылку! tripleee 10 лет назад 0
@tripleee На самом деле нет, файлы .m4a идентичны .mp4 (это просто условное наименование файлов mp4 только с аудио), но имеют формат, отличный от .aac (который известен как поток ADTS). Вы также можете принудительно вывести FFmpeg в формате ADTS, добавив `-f adts`. Bigue Nique 8 лет назад 1
2
SaltySub2

Easy convert to AAC for Zeranoe Windows Builds

ffmpeg -i input.mp3 -c:a aac -b:a 128k output.m4a 

Use "aac" instead of libfaac or libfdk_aac: https://trac.ffmpeg.org/wiki/Encode/AAC

"FFmpeg can support three AAC-LC encoders (aac, libfaac, libfdk_aac) and one HE-AAC(v1/2) encoder (libfdk_aac). The licenses of libfaac and libfdk_aac are not compatible with the GPL, so the GPL does not permit distribution of binaries containing code licensed under these licenses when GPL-licensed code is also included."

Поддержка `libfaac` также была удалена с 3.2. slhck 7 лет назад 1

Похожие вопросы