Làm cách nào để thay thế luồng âm thanh trong tệp video bằng nhiều luồng âm thanh?


19

Tôi muốn thay thế luồng âm thanh thứ hai (0: 2) trong tệp video có hai luồng âm thanh và đặt nhãn nếu có thể. Làm thế nào tôi sẽ đi về điều này? Tất cả các lệnh ffmpeg tôi tìm thấy sẽ không cho phép tôi giữ luồng âm thanh thứ hai.

Câu trả lời:


22

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.

Thay thế luồng âm thanh thứ hai

nhập mô tả hình ảnh ở đây

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.

Kết hợp hai luồng âm thanh thành một

nhập mô tả hình ảnh ở đây

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
  • Lọc đòi hỏi phải mã hóa lại và 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.

không làm việc cho tôi cả.
Rudolf Olah

@omouse "không làm việc" rất khó để cung cấp trợ giúp cho. Bạn nên sử dụng một liên kết pastebin để hiển thị lệnh của bạn và đầu ra giao diện điều khiển hoàn chỉnh.
llogan

Vấn đề của tôi là -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.
Rudolf Olah

1
Tôi vừa mới sử dụng -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.
CN

2
@ aaronk6 Câu hỏi ban đầu yêu cầu một cách để ánh xạ nhiều luồng âm thanh đến đầu ra. Ví dụ lấy luồng âm thanh đầu tiên từ đầu vào đầu tiên và (các) luồng âm thanh từ đầu vào thứ hai và ánh xạ chúng đến đầu ra. Có vẻ như một số người cho rằng ví dụ này tạo ra một đầu ra với một luồng âm thanh duy nhất và sau đó bị nhầm lẫn.
llogan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.