Команда FFmpeg для перетворення MP3 в AAC


21

Я можу дати цю команду:

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.

Відповіді:


38

Як я можу конвертувати в 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 , тоді як AAC - це розширене кодування аудіо .

  • Ось чому ваш вихід більший за вхідний, оскільки на відміну від MP3, ALAC все ще стискається, але він повинен бути без втрат - саме тому йому потрібно зберігати більше даних.

  • .aacне є вихідним контейнером для звуку ALAC. Якщо ви використовуєте AAC, це має спрацювати. Я хотів би використовувати MP4 або M4A, хоча.


У Ubuntu 12.04 мені не вдалося скористатися опцією -c:a, чи є у цього синонім? Я думаю, це може означати, -acodec:aале врешті-решт я просто скинув його і ffmpegзміг вивести кодек на основі потрібного імені вихідного файлу. (Потрібно, -strict experimentalхоча, і кинув -map_metadata 0:0для гарної міри, щоб зберегти теги ID3.)
tripleee

Також варто відзначити: я хотів, щоб файли M4B (аудіокниги), які, ffmpegздається, не підтримують, але перетворюються на M4A, а потім просто перейменування, здається, працюють.
tripleee

@tripleee Це означає, що ви використовуєте застарілу програму під назвою ffmpeg, але це дійсно не з FFmpeg, а з вилки Libav. На жаль, Ubuntu поставив його замість "справжнього" ffmpeg. Дивіться: Хто може сказати мені різницю та відношення між ffmpeg, libav та
avconv

@slhck: Дякую за швидке оновлення та посилання!
тріплей

1
@tripleee Фактично ні, .m4a файли ідентичні .mp4 (це лише умовна назва для файлів mp4 лише зі звуком), але мають інший формат, ніж .aac (який відомий як потік ADTS). Ви також можете змусити FFmpeg виводити у форматі ADTS шляхом додавання -f adts.
Bigue Nique

4

Легко перетворити в AAC для Zeranoe Windows Builds

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

Використовуйте "aac" замість libfaac або libfdk_aac: https://trac.ffmpeg.org/wiki/Encode/AAC

"FFmpeg може підтримувати три кодери AAC-LC (aac, libfaac, libfdk_aac) і один кодер HE-AAC (v1 / 2) (libfdk_aac). Ліцензії libfaac та libfdk_aac не сумісні з GPL, тому GPL не дозволяє. розповсюдження бінарних файлів, що містять код, ліцензований за цими ліцензіями, коли також включений код з ліцензією GPL. "


2
libfaacпідтримку було також знято з 3.2.
slhck
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.