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.
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.
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.
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:
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.
@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 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. "
-c:a
. Hat dies ein Synonym? Ich denke, es könnte bedeuten,-acodec:a
aber am Ende habe ich es einfach fallen gelassen undffmpeg
konnte einen Codec ableiten, der auf dem gewünschten Namen der Ausgabedatei basiert. (Müssen-strict experimental
aber; und warf-map_metadata 0:0
für eine gute Maßnahme, um ID3-Tags zu bewahren.)ffmpeg
anscheinend nicht unterstützt werden, aber die Konvertierung in M4A und das anschließende Umbenennen scheint zu funktionieren.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-f adts
.Einfache Konvertierung in AAC für Zeranoe Windows Builds
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. "
quelle
libfaac
Unterstützung wurde ab 3.2 ebenfalls entfernt.