I want to replace the second audio stream (0:2) in a video file that has two audio streams and give it a label if possible. How would I go about this? All the ffmpeg commands I found won't let me keep the second audio stream.
1 Answers
Use the -map option to choose your streams. Default stream selection will only choose one of each stream type, so that is why -map has to be used.
Replace second audio stream

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– The0refers to the first input which isvideo.mkv. Thevmeans "select video stream type".0:a:0– The0refers to the first input which isvideo.mkv. Theameans "select audio stream type". The last0refers to the first audio stream from this input. If only0:ais used, then all video streams would be mapped.1:a– The1refers to the second input which isaudio.mp3. Theameans "select audio stream type".-codec copywill stream copy (re-mux) instead of encode. If you need a specific audio codec, you should specify-c:v copy(to keep the video) and then, for example,-c:a libmp3lameto re-encode the audio stream to MP3.-shortestwill end the output when the shortest input ends.
Combine two audio streams into one

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
- Filtering requires re-encoding, and the
amergefilter is used here, so the audio can not be stream copied in this example.
- 63,280