Wie ersetze ich einen Audiostream in einer Videodatei durch mehrere Audiostreams?

19

Ich möchte den zweiten Audiostream (0: 2) in einer Videodatei mit zwei Audiostreams ersetzen und ihm nach Möglichkeit eine Bezeichnung geben. Wie würde ich das machen? Bei allen gefundenen ffmpeg-Befehlen kann ich den zweiten Audiostream nicht beibehalten.

Anonym
quelle

Antworten:

22

Verwenden Sie die -mapOption , um Ihre Streams auszuwählen. Bei der Standard- Stream-Auswahl wird nur einer der Stream-Typen ausgewählt, weshalb dieser -mapverwendet werden muss.

Ersetzen Sie den zweiten Audiostream

Bildbeschreibung hier eingeben

ffmpeg -i video.mkv -i audio.mp3 -map 0:v -map 0:a:0 -map 1:a \
-metadata:s:a:0 language=eng -metadata:s:a:1 language=sme -codec copy \
-shortest output.mkv
  • 0:v- Das 0bezieht sich auf den ersten Eingang, der ist video.mkv. Das vbedeutet "Videostream-Typ auswählen".

  • 0:a:0- Das 0bezieht sich auf den ersten Eingang, der ist video.mkv. Das abedeutet "Audio Stream Typ auswählen". Der letzte 0bezieht sich auf den ersten Audiostream von diesem Eingang. Wenn nur 0:averwendet wird, werden alle Videostreams zugeordnet.

  • 1:a- Das 1bezieht sich auf den zweiten Eingang, der ist audio.mp3. Das abedeutet "Audio Stream Typ auswählen".

  • -codec copywird Kopie streamen statt kodieren (Re-Mux). Wenn Sie einen bestimmten Audio-Codec benötigen, sollten Sie angeben -c:v copy(um das Video zu behalten) und dann beispielsweise -c:a libmp3lameden Audio-Stream in MP3 umcodieren.

  • -shortest beendet die Ausgabe, wenn die kürzeste Eingabe endet.

Kombinieren Sie zwei Audio-Streams zu einem

Bildbeschreibung hier eingeben

ffmpeg -i vid.mkv -i aud.mp3 -filter_complex "[0:a][1:a]amerge=inputs=2[a]" \
-map 0:v -map "[a]" -c:v copy -c:a aac -strict experimental -b:a 192k -ac 2 \
-shortest out.mp4
  • Das Filtern erfordert eine Neucodierung, und der amergeFilter wird hier verwendet, sodass das Audio in diesem Beispiel nicht per Stream kopiert werden kann.
Logan
quelle
hat überhaupt nicht für mich gearbeitet.
Rudolf Olah
@omouse "hat nicht funktioniert" ist schwer zu helfen. Sie sollten einen Pastebin-Link verwenden, um Ihren Befehl und die gesamte Konsolenausgabe anzuzeigen.
Logan
Mein Problem ist das -codec copy, aber ich habe das behoben (andere Version von ffmpeg), das andere Problem, das ich mit dem hatte -map, hat sich über die falsche Anzahl von Streams beschwert.
Rudolf Olah
1
Ich habe gerade benutzt -map 0:v -map 1:a. Ich gehe davon aus, dass dies bedeutet, das Video aus der ersten Datei (video.mkv) und dann das Audio aus der zweiten Datei (audio.mp4) zu nehmen, um output.mkv zu erstellen -map 0:a:0. Ich habe es ausgeschlossen und erhalte die gewünschten Ergebnisse.
Sun
2
@ aaronk6 In der ursprünglichen Frage wurde nach einer Möglichkeit gesucht , dem Ausgang mehrere Audiostreams zuzuordnen . In diesem Beispiel werden der erste Audiostream vom ersten Eingang und der / die Audiostream (s) vom zweiten Eingang übernommen und dem Ausgang zugeordnet. Es scheint, dass einige davon ausgehen, dass das Beispiel eine Ausgabe mit einem einzelnen Audiostream erstellt und dann verwirrt sind.
Logan