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.
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.
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.
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:
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.
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 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.
„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. ”
-c:a
, czy to ma jakiś synonim? Myślę, że to może oznaczać,-acodec:a
ale w końcu po prostu go upuściłem iffmpeg
byłem w stanie wydedukować kodek na podstawie żądanej nazwy pliku wyjściowego. (Trzeba-strict experimental
jednak; i dorzuciłem-map_metadata 0:0
, żeby zachować tagi ID3).ffmpeg
nie wydają się obsługiwać, ale konwersja do M4A, a następnie zmiana nazwy wydaje się działać.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-f adts
.Łatwa konwersja do AAC dla wersji Windows Zeranoe
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. ”
źródło
libfaac
wsparcie zostało również usunięte z 3.2.