FFmpeg-Befehl zum Konvertieren von MP3 in AAC


19

Ich kann diesen Befehl ausgeben:

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

um eine m4a datei zu erstellen.

Aber wenn ich diesen Befehl erteile

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

ffmpeg wirft eine Fehlermeldung

Header für Ausgabedatei Nr. 0 konnte nicht geschrieben werden (falsche Codec-Parameter?).

Außerdem ist die Größe der M4A-Datei tatsächlich fast 5,8-mal größer als die der Originaldatei, was absolut nicht das ist, was ich wollte und warum ich nach AAC konvertieren wollte.

Antworten:


37

Wie kann ich zu AAC konvertieren?

Dies ist der grundlegendste FFmpeg-Befehl zum Konvertieren von Eingaben in AAC-Audio mit der höchsten AAC-FFmpeg-Qualität. libfdk_aacist der AAC-Encoder von Fraunhofer. Er ist verfügbar, wenn Sie FFmpeg mit entsprechender Unterstützung kompiliert haben.

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

Um die Qualität zu ändern, haben Sie zwei Möglichkeiten:

  • Verwenden Sie für die variable Bitrate (VBR) die -vbrOption. Zum Beispiel -vbr 4ist eine gute Wahl (ungefähr 128 kBit / s für Stereo-Audio). Höher heißt besser. Die Werte reichen von 1 bis 5.

    ffmpeg -i input.mp3 -c:a libfdk_aac -vbr 4 output.m4a
    
  • Verwenden Sie für eine feste Bitrate (CBR) -b:abeispielsweise die Option -b:a 128k. 128 kBit / s sollten für die meisten Situationen ausreichen. Oft kann man auch etwas Niedrigeres wählen.

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

Sie können auch HE-AAC (v1 / v2) anstelle des Standardprofils AAC-LC (geringe Komplexität) verwenden, das sich am besten für niedrige Bitraten eignet:

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

Was ist, wenn ich nicht habe libfdk_aac?

Einige Versionen von FFmpeg verfügen nicht über libfdk_aac(aus Lizenzgründen). In diesem Fall können Sie den integrierten AAC-Encoder verwenden:

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

Dieser Encoder unterstützt VBR nicht richtig. Wenn Sie diesen oder HE-AAC benötigen, lesen Sie weiter.

Sie können ffmpeg selbst kompilieren und libfdk_aacUnterstützung hinzufügen . Es gibt Anleitungen im FFmpeg-Wiki . Unter Linux ist das Kompilieren einfach, unter OS X mäßig und unter Windows eher schwierig. Wenn Sie den Kompilierungsanleitungen folgen und zuvor die entsprechenden Bibliotheken installiert haben, können Sie jetzt FFmpeg verwenden libfdk_aac.


Es gab einige Probleme mit Ihrem ursprünglichen Ansatz:

  • alacist nicht AAC. ALAC ist der Apple Lossless Audio Codec , während AAC Advanced Audio Coding ist .

  • Aus diesem Grund ist Ihre Ausgabe größer als die Eingabe, da ALAC im Gegensatz zu MP3 immer noch komprimiert ist, aber verlustfrei sein muss - aus diesem Grund müssen mehr Daten gespeichert werden.

  • .aacist kein Ausgabecontainer für ALAC-Audio. Wenn Sie AAC verwenden, sollte das funktionieren. Ich würde allerdings MP4 oder M4A verwenden.


Unter Ubuntu 12.04 konnte ich keine Option verwenden -c:a. Hat dies ein Synonym? Ich denke, es könnte bedeuten, -acodec:aaber am Ende habe ich es einfach fallen gelassen und ffmpegkonnte einen Codec ableiten, der auf dem gewünschten Namen der Ausgabedatei basiert. (Müssen -strict experimentalaber; und warf -map_metadata 0:0für eine gute Maßnahme, um ID3-Tags zu bewahren.)
Tripleee

Ebenfalls erwähnenswert: Ich wollte M4B-Dateien (Hörbücher), die ffmpeganscheinend nicht unterstützt werden, aber die Konvertierung in M4A und das anschließende Umbenennen scheint zu funktionieren.
Tripleee

@tripleee Das heißt, Sie verwenden ein veraltetes Programm namens ffmpeg, aber es ist wirklich nicht von FFmpeg, sondern von Libav. Ubuntu hat es leider anstelle des "echten" ffmpeg gebündelt. Siehe: Wer mir den Unterschied und die Beziehung zwischen ffmpeg sagen kann, libav und avconv
slhck

@slhck: Danke für das schnelle Update und den Link!
Tripleee

1
@tripleee Tatsächlich sind .m4a-Dateien mit .mp4 identisch (es handelt sich lediglich um eine Konvention zur Benennung von mp4-Dateien mit ausschließlich Audio), sie haben jedoch ein anderes Format als .aac (bekannt als ADTS-Stream). Sie können FFmpeg auch durch Hinzufügen zur Ausgabe im ADTS-Format zwingen -f adts.
Bigue Nique

3

Einfache Konvertierung in AAC für Zeranoe Windows Builds

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

Verwenden Sie "aac" anstelle von libfaac oder libfdk_aac: https://trac.ffmpeg.org/wiki/Encode/AAC

"FFmpeg unterstützt drei AAC-LC-Encoder (aac, libfaac, libfdk_aac) und einen HE-AAC (v1 / 2) -Encoder (libfdk_aac). Die Lizenzen von libfaac und libfdk_aac sind nicht mit der GPL kompatibel, daher lässt die GPL dies nicht zu Verteilung von Binärdateien mit Code, der unter diesen Lizenzen lizenziert ist, wenn auch GPL-lizenzierter Code enthalten ist. "


2
libfaacUnterstützung wurde ab 3.2 ebenfalls entfernt.
Slhck
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.