Polecenie FFmpeg do konwersji MP3 na AAC

21

Mogę wydać to polecenie:

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

aby utworzyć plik m4a.

Ale kiedy wydam to polecenie

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

ffmpeg zgłasza komunikat o błędzie

Nie można zapisać nagłówka dla pliku wyjściowego nr 0 (nieprawidłowe parametry kodeka?).

Ponadto rozmiar pliku m4a jest naprawdę prawie 5,8 razy większy niż oryginalny plik, co absolutnie nie jest tym, czego chciałem i dlaczego chciałem przekonwertować na AAC.

Soham Dasgupta
źródło

Odpowiedzi:

38

Jak mogę przekonwertować na AAC?

Jest to najbardziej podstawowa komenda FFmpeg do konwersji wejścia na audio AAC przy użyciu najwyższej jakości AAC FFmpeg. libfdk_aacjest koderem AAC Fraunhofera i jest dostępny po skompilowaniu FFmpeg z obsługą.

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

Aby zmienić jakość, masz dwie opcje:

  • Dla zmiennej bitrate (VBR) użyj -vbropcji. Na przykład -vbr 4jest dobrym wyborem (około 128 kBit / s dla dźwięku stereo). Wyższy oznacza lepszy. Zakres wartości wynosi od 1 do 5.

    ffmpeg -i input.mp3 -c:a libfdk_aac -vbr 4 output.m4a
    
  • W przypadku stałej szybkości transmisji (CBR) użyj -b:ana przykład opcji -b:a 128k. 128 kBit / s powinno wystarczyć do większości sytuacji. Często możesz również wybrać coś niższego.

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

Możesz także użyć HE-AAC (v1 / v2) zamiast domyślnego profilu AAC-LC (o niskiej złożoności), który najlepiej nadaje się do niskich przepływności:

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

Co jeśli nie mam libfdk_aac?

Niektóre wersje FFmpeg nie mają libfdk_aac(ze względów licencyjnych). W takim przypadku możesz użyć wbudowanego kodera AAC:

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

Ten koder nie obsługuje poprawnie VBR, więc jeśli potrzebujesz tego lub HE-AAC, czytaj dalej.

Możesz samodzielnie skompilować ffmpeg i dodać libfdk_aacobsługę. Na Wiki FFmpeg znajdują się przewodniki . Kompilacja jest łatwa w systemie Linux, umiarkowanie łatwa w systemie OS X i raczej trudna w systemie Windows. Kiedy postępujesz zgodnie z instrukcjami kompilacji i instalujesz odpowiednie biblioteki wcześniej, FFmpeg daje teraz opcję użycia libfdk_aac.


Wystąpiły problemy z twoim oryginalnym podejściem:

  • alacnie jest AAC. ALAC to Apple Lossless Audio Codec , natomiast AAC to Advanced Audio Coding .

  • Dlatego Twoje wyjście jest większe niż wejście, ponieważ w przeciwieństwie do MP3, ALAC jest nadal kompresowany, ale musi być bezstratny - dlatego musi przechowywać więcej danych.

  • .aacnie jest pojemnikiem wyjściowym dla dźwięku ALAC. Jeśli używasz AAC, to powinno działać. Chciałbym jednak użyć MP4 lub M4A.

slhck
źródło
W systemie Ubuntu 12.04 nie mogłem użyć opcji -c:a, czy to ma jakiś synonim? Myślę, że to może oznaczać, -acodec:aale w końcu po prostu go upuściłem i ffmpegbyłem w stanie wydedukować kodek na podstawie żądanej nazwy pliku wyjściowego. (Trzeba -strict experimentaljednak; i dorzuciłem -map_metadata 0:0, żeby zachować tagi ID3).
tripleee
Warto również zauważyć: chciałem pliki M4B (audiobooki), które ffmpegnie wydają się obsługiwać, ale konwersja do M4A, a następnie zmiana nazwy wydaje się działać.
tripleee
@tripleee Oznacza to, że używasz przestarzałego programu o nazwie ffmpeg, ale tak naprawdę nie pochodzi on z FFmpeg, ale z widelca Libav. Ubuntu niestety spakował go zamiast „prawdziwego” ffmpeg. Zobacz: Kto może mi powiedzieć różnicę i związek między ffmpeg, libav i avconv
slhck
@slhck: Dzięki za szybką aktualizację i link!
tripleee
1
@tripleee Właściwie nie, pliki .m4a są identyczne z .mp4 (to tylko konwencja nazewnictwa dla plików mp4 tylko z dźwiękiem), ale mają inny format niż .aac (znany jako strumień ADTS). Możesz również zmusić FFmpeg do wyświetlania w formacie ADTS, dodając -f adts.
Bigue Nique,
4

Łatwa konwersja do AAC dla wersji Windows Zeranoe

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

Użyj „aac” zamiast libfaac lub libfdk_aac: https://trac.ffmpeg.org/wiki/Encode/AAC

„FFmpeg może obsługiwać trzy kodery AAC-LC (aac, libfaac, libfdk_aac) i jeden koder HE-AAC (v1 / 2) (libfdk_aac). Licencje libfaac i libfdk_aac nie są zgodne z GPL, więc GPL nie zezwala dystrybucja plików binarnych zawierających kod licencjonowany na podstawie tych licencji, gdy jest również uwzględniony kod licencjonowany na GPL. ”

SaltySub2
źródło
2
libfaacwsparcie zostało również usunięte z 3.2.
slhck