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 256k
Dadurch 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 0
fragt nach der maximalen Qualität, -q:a 4
stellt jedoch häufig einen guten Kompromiss zwischen der wahrgenommenen Audioqualität und der Bitrate (und damit der Dateigröße) dar.
-c:v copy
Dies 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:0
Dadurch 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:0
Dadurch 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 -map
ist hier die entsprechende Option.
Ich habe den Befehl zuerst einfach ausgeführt -map 0 -map 1
und 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
.