Hiệu quả tham gia các bản âm thanh từ avi đến mp4


1

Tôi có khoảng 100 video (tập của một loạt) hai lần.

  1. [avi] Độ phân giải video 720p với các bản âm thanh ưa thích của tôi
  2. [mp4] 1080p nhưng ngôn ngữ sai

Rõ ràng, tôi muốn có video tốt với ngôn ngữ ưa thích của tôi . Nhưng nếu có thể tôi muốn duy trì cả hai tùy chọn âm thanh.

Tôi đã thử nối thủ công chúng với một trình nối mp4 (GUI cho mp4box) nhưng điều đó mất nhiều thời gian. Tôi rất thích xem một số đề xuất để tự động hóa và tối ưu hóa quá trình đó.


Câu trả lời:


1

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.


Thay vì mã hóa lại đoạn âm thanh, tôi sẽ thử Matroska (MKV) làm nơi chứa ...
grawity

Và nếu bạn cần đồng bộ hóa âm thanh và video, bạn có thể sử dụng bộ lọc độ trễ. Đây là ví dụ cho âm thanh nổi bị trễ 10 giây : -filter:a:0 "adelay=10000^|10000". ( ^là ký tự thoát cho dòng lệnh Windows)
Vlastimil Ovčáčík

@ VlastimilOvčáčík Có, tuy nhiên, nếu bạn sử dụng bộ lọc này, bạn cần mã hóa lại; bạn không thể sao chép luồng trong trường hợp đó. Các -itsoffsettham số cũng có thể được sử dụng để chuyển các tín hiệu đầu vào mà không đòi hỏi một bộ lọc.
slhck

Tôi có thể sai, nhưng -itsoffsetsẽ không thêm sự im lặng vào khoảng trống mà nó tạo ra, trong khi adelaysẽ. Người chơi MPC-HC của tôi đã nhầm lẫn về nó và với sự im lặng thêm vào, không có vấn đề gì.
Vlastimil Ovčáčík
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.