Câu trả lời:
Sử dụng -maptùy chọn để chọn luồng của bạn. Lựa chọn luồng mặc định sẽ chỉ chọn một trong mỗi loại luồng, vì vậy đó là lý do tại sao -mapphải được sử dụng.

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- Các 0tham chiếu đến đầu vào đầu tiên đó là video.mkv. Có vnghĩa là "chọn loại luồng video".
0:a:0- Các 0tham chiếu đến đầu vào đầu tiên đó là video.mkv. Có anghĩa là "chọn loại luồng âm thanh". Cuối cùng 0đề cập đến luồng âm thanh đầu tiên từ đầu vào này. Nếu chỉ 0:ađược sử dụng, thì tất cả các luồng video sẽ được ánh xạ.
1:a- Tham chiếu 1đến đầu vào thứ hai là audio.mp3. Có anghĩa là "chọn loại luồng âm thanh".
-codec copysẽ truyền phát bản sao (re-mux) thay vì mã hóa. Nếu bạn cần một codec âm thanh cụ thể, bạn nên chỉ định -c:v copy(để giữ video) và sau đó, ví dụ, -c:a libmp3lameđể mã hóa lại luồng âm thanh thành MP3.
-shortest sẽ kết thúc đầu ra khi đầu vào ngắn nhất kết thúc.

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
amergebộ lọc được sử dụng ở đây, vì vậy âm thanh không thể được sao chép trong ví dụ này.-codec copy, nhưng tôi đã sửa nó (phiên bản khác của ffmpeg), vấn đề khác tôi gặp phải với -mapnó, nó phàn nàn về số lượng luồng sai.
-map 0:v -map 1:a. Tôi giả sử điều này có nghĩa là lấy video từ tệp đầu tiên (video.mkv) và sau đó lấy âm thanh từ tệp thứ hai (audio.mp4) để tạo output.mkv ... Không chắc chắn đó -map 0:a:0là để làm gì. Tôi loại trừ nó và tôi nhận được kết quả tôi muốn.