Bạn có thể làm điều này rất dễ dàng với ffmpeg (tải xuống bản dựng tĩnh) như vậy:
ffmpeg -i input.mp4 -i input.avi -c copy -map 0:v:0 -map 1:a output.mp4
Điều này sẽ ánh xạ các luồng sau vào tệp đầu ra:
- kênh video đầu tiên của đầu vào đầu tiên (
0:v:0
)
- các kênh âm thanh của đầu vào thứ hai (
1:a
) - nếu bạn chỉ muốn đầu tiên, sử dụng 1:a:0
, v.v.
Các luồng video và âm thanh được sao chép, vì vậy quá trình này nhanh chóng.
Âm thanh không tương thích
Trong trường hợp tệp AVI sử dụng MP3 cho luồng âm thanh, chúng không thể được ánh xạ thành tệp MP4. Trong trường hợp này, sử dụng:
ffmpeg -i input.mp4 -i input.avi -c:v copy -c:a aac -b:a 192k -map 0:v:0 -map 1:a output.mp4
Điều này sẽ mã hóa lại các luồng âm thanh bằng AAC với tốc độ 192 kBit / s, chất lượng đủ cao để bạn không nhận thấy bất kỳ tạo tác nào từ mã hóa lại.
Hoặc, bạn có thể sử dụng MKV làm bộ chứa đầu ra, hỗ trợ hầu như mọi codec:
ffmpeg -i input.mp4 -i input.avi -c copy -map 0:v:0 -map 1:a output.mkv
Cách chạy theo đợt
Bạn có thể sử dụng lệnh này trong một vòng lặp, obvisouly, để chạy nó trên tất cả các tệp, ví dụ như trong Linux với Bash, giả sử rằng các tệp MP4 và AVI có cùng tên cơ sở và bạn chỉ chạy một lần (nếu không nó sẽ thử để chuyển đổi tập tin đầu ra của nó là tốt):
for f in *.mp4; do
aviFile="${f%%.mp4}.avi" # replace the extension
outputFile="${f%%.mp4}-output.mp4" # create output filename
ffmpeg -i "$f" -i "$aviFile" -c copy -map 0:v:0 -map 1:a "$outputFile"
done
Bạn sẽ tìm thấy rất nhiều ví dụ trực tuyến về cách chạy lệnh trong vòng lặp tệp Batch của Windows.