Câu trả lời:
Sử dụng -map
tù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 -map
phả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 0
tham chiếu đến đầu vào đầu tiên đó là video.mkv
. Có v
nghĩa là "chọn loại luồng video".
0:a:0
- Các 0
tham chiếu đến đầu vào đầu tiên đó là video.mkv
. Có a
nghĩ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ó a
nghĩa là "chọn loại luồng âm thanh".
-codec copy
sẽ 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
amerge
bộ 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 -map
nó, 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:0
là để làm gì. Tôi loại trừ nó và tôi nhận được kết quả tôi muốn.