Bessere Antwort mit Erklärung, die kluge Vorschläge von slhck und Mulvya enthält, ohne wesentliche Parameter.
ffmpeg -i video.mp4 -i cover.jpg -acodec libmp3lame -b:a 256k -c:v copy -map 0:a:0 -map 1:v:0 output.mp3
ffmpeg Audio- / Video-Manupulationstool: Bereits vom OP ausgewählt, ist es besonders für diesen Job geeignet.
-i video.mp4 Erste Eingabedatei: Ein Video mit Audio, das wir extrahieren möchten.
-i cover.jpg zweite Eingabedatei, ein Bild, das angezeigt werden soll, wenn die resultierende Audiodatei abgespielt wird.
-acodec libmp3lame Wir möchten eine MP3-Datei mit dem LAME-Encoder erstellen.
-b:a 256kDadurch wird die Bitrate für die Audiospur auf eine Konstante von 256 KBit / s eingestellt. Eine intelligentere Option wäre die Codierung mit einer variablen Bitrate unter Angabe des Qualitätsparameters : -q:a 0fragt nach der maximalen Qualität, -q:a 4stellt jedoch häufig einen guten Kompromiss zwischen der wahrgenommenen Audioqualität und der Bitrate (und damit der Dateigröße) dar.
-c:v copyDies zeigt an, dass der Videostream (das JPG-Bild) nicht neu codiert werden soll, sondern unverändert kopiert werden muss. Dies ist nützlich, um unnötige Verarbeitung und potenzielle Qualitätsverluste beim erneuten Codieren in ein verlustbehaftetes Format zu vermeiden. In unserem Fall würde das Bild ohne diesen Parameter von .jpg dekodiert und in .png codiert, was anscheinend das native Format ist, das standardmäßig ausgewählt wird. Dies würde keinen Qualitätsverlust darstellen, da .png ein Verlust ist, führt jedoch häufig zu einer Erhöhung der Dateigröße, da .jpg (verlustbehaftet) im Allgemeinen eine bessere Komprimierungsrate bietet.
-map 0:a:0Dadurch wird der zu verwendende Stream aus der ersten ( 0:) Eingabedatei ausgewählt: Es muss der erste ( :0) Audio ( a) - Stream sein, der darin enthalten ist.
-map 1:v:0Dadurch wird der erste ( :0) video ( v) - Stream aus der zweiten ( 1:) Eingabedatei ausgewählt.
output.mp3 Der Name dieses Parameters wurde geschickt ausgewählt, um bereits darauf hinzuweisen, dass dies der Name sein muss, der der ausgegebenen Audiodatei (MP3) mit dem eingebauten Bild, das wir erstellen möchten, gegeben werden muss.
Ursprüngliche Antwort
Dadurch wird eine Audiodatei (.mp3) mit einem statischen Bild erstellt, indem ein Video (.mp4) und ein Bild (.jpg) von meiner Hochzeit zusammengestellt werden:
ffmpeg -i video.mp4 -i cover.jpg -acodec libmp3lame -metadata title=video -b:a 256k -map_metadata 0 -map 0:1 -map 1 output.mp3
Informationen zur Auswahl von Eingabestreams mit finden Sie in der ffmpeg- Dokumentation. Dies -mapist hier die entsprechende Option.
Ich habe den Befehl zuerst einfach ausgeführt -map 0 -map 1und folgende Informationen erhalten:
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> png (native))
Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))
Stream #1:0 -> #0:2 (mjpeg (native) -> png (native))
Daher wusste ich, dass ich einen Stream 1(AAC-Audio) aus der Datei haben wollte, die eine Indexnummer von hat 0, dh die Videodatei; daher musste es explizit mit ausgewählt werden -map 0:1 -map 1.