Antworten:
Verwenden Sie die -map
Option , um Ihre Streams auszuwählen. Bei der Standard- Stream-Auswahl wird nur einer der Stream-Typen ausgewählt, weshalb dieser -map
verwendet werden muss.
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 0
bezieht sich auf den ersten Eingang, der ist video.mkv
. Das v
bedeutet "Videostream-Typ auswählen".
0:a:0
- Das 0
bezieht sich auf den ersten Eingang, der ist video.mkv
. Das a
bedeutet "Audio Stream Typ auswählen". Der letzte 0
bezieht sich auf den ersten Audiostream von diesem Eingang. Wenn nur 0:a
verwendet wird, werden alle Videostreams zugeordnet.
1:a
- Das 1
bezieht sich auf den zweiten Eingang, der ist audio.mp3
. Das a
bedeutet "Audio Stream Typ auswählen".
-codec copy
wird 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 libmp3lame
den Audio-Stream in MP3 umcodieren.
-shortest
beendet die Ausgabe, wenn die kürzeste Eingabe endet.
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
amerge
Filter wird hier verwendet, sodass das Audio in diesem Beispiel nicht per Stream kopiert werden kann.-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.
-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.