
Ich habe eine Videodatei (Dauer 1 Stunde). Ich muss einen beliebigen Teil der Videodatei (30 Minuten) in eine Audiodatei umwandeln.
ffmpeg -ss 00:30:00 -t 01:00:00 -i /opt/a.mp4 -vcodec copy -acodec copy /opt/b.mp4
dann habe ich verwendet
ffmpeg -ss 00:30:00 -t 01:00:00 -i /opt/a.mp4 -acodec copy /opt/b.mp4
Aber ich kann mir trotzdem das Video zusammen mit dem Audio ansehen. Ich brauche nur Audiodateien
Antwort1
Wenn Sie nur Audio benötigen (ich hoffe, ich habe das richtig verstanden), brauchen Sie den ersten Schritt überhaupt nicht. Wenn Sie Folgendes verwenden:
ffmpeg -ss 00:30:00 -t 01:00:00 -i /opt/a.mp4 -vn -acodec copy /opt/b.mp3
es wird es tunbereitgestelltDer ursprüngliche Audio-Codec war MP3. Wenn nicht, können Sie trotzdem eine Neucodierung erzwingen:
ffmpeg -ss 00:30:00 -t 01:00:00 -i /opt/a.mp4 -vn -acodec libmp3lame ...other_parameters.. /opt/b.mp3
Es other_parameters
wird Bitraten usw. geben.
Antwort2
Es gibt zwei Hauptmethoden, um nur das Video oder Audio aus einer Datei zu erhalten, die beides enthält. Standardmäßig ist dieStreamauswahlDas Verhalten in ffmpeg wählt einen Stream pro Streamtyp aus. Beachten Sie, dass Eingaben mehrere Streamtypen enthalten können: Video, Audio, Untertitel und Daten. Einige Eingaben können sogar mehrere dieser Streamtypen enthalten, z. B. zwei Videostreams.
-vn
oder-an
-vn
Diese Optionen weisen ffmpeg an, das Video ( ) oder das Audio ( ) wegzulassen -an
.
So lassen Sie das Video weg und kopieren das Audio:
ffmpeg -i input -vn -codec:a copy output.mka
So lassen Sie den Ton weg und kopieren das Video:
ffmpeg -i input -an -codec:v copy output.mkv
Diese Beispiele werdenStreamkopieder gewünschte Stream. Das bedeutet, dass ffmpeg ihn einfach neu muxt, anstatt ihn neu zu kodieren. Das geht sehr schnell und da es sich im Wesentlichen um „Kopieren und Einfügen“ handelt, hat es keinen Einfluss auf die Qualität.
Durch die Verwendung von
-vn
und-an
werden andere eventuell vorhandene Streams, wie etwa Untertitel- oder Datenstreams, nicht ausgelassen. Bei Nur-Audio-Formaten werden diese jedoch ohnehin ignoriert.
-map
Der-map
Option mag komplizierter erscheinen, ist aber flexibler und nützlicher. Beispielsweise -vn
weist ffmpeg an, nur die Videostreams wegzulassen, aber durch Verwendung einesStream-Spezifizierer -map
kann ffmpeg anweisen, alles außer dem gewünschten Stream wegzulassen.
So kopieren Sie nur das Video:
ffmpeg -i input -map 0:v -codec copy output.mkv
So kopieren Sie nur das Audio:
ffmpeg -i input -map 0:a -codec copy output.mka
Dies ist ein Stream-Spezifizierer, der ffmpeg anweist, nur die Videostreams
0:v
aus dem ersten Input einzuschließen . Dies kann weiter erweitert werden. Die Verwendung von bedeutet und wäre nützlich, wenn Ihr Input mehrere Videostreams enthält und Sie nur den ersten möchten. Sehen Sie sich die Konsolenausgabe von ffmpeg an, um die Reihenfolge der Streams in Ihrem Input herauszufinden.0
v
0:v:0
first input:video:first video stream
Sie können auch negative Zuordnungen verwenden. Die Verwendung von
-map 0 -map -0:a:1
würde alle Streams außer dem zweiten Audiostream zuordnen. weist ffmpeg an, alle Streams vom Input (dem ersten Input)-map 0
einzuschließen , und weist ffmpeg dann an, den ersten Audiostream vom ersten Input zu ignorieren.0
-map -0:a:1
Antwort3
Der erste Teil ist richtig. Im zweiten Teil wird nur Audio für die b.mp4-Datei extrahiert.
ffmpeg -i b.mp4 -vn -acodec copy audio_b.mp3