ffmpeg chỉnh sửa siêu dữ liệu avi và đặt tên âm thanh


3

Tôi có một loạt phim ở định dạng avi trên đĩa của mình. Tuy nhiên, chúng không chứa bất kỳ siêu dữ liệu nào như tiêu đề, v.v.

Tôi tìm thấy một lệnh sẽ làm điều đó cho tôi:

ffmpeg -i input.avi -metadata title="Moonshine" -metadata author="Moonshine" -metadata copyright="2009" -metadata comment="foo" -acodec copy -vcodec copy output.avi

Điều này hoạt động tốt NHƯNG nó sẽ chỉ sao chép MỘT bản nhạc. Các tập tin của tôi chứa nhiều hơn một đoạn âm thanh. Tôi muốn ffmpeg sao chép mọi thứ và chỉ cần đặt tiêu đề cho tệp.

Ngoài ra, có cách nào để cung cấp cho các bản nhạc một tên ngôn ngữ không? Ví dụ: một tệp chứa 2 rãnh âm thanh. Người đầu tiên là người Anh và người thứ hai là người Nga. Làm cách nào để đặt tên cho chúng chính xác để khi tôi sử dụng trình phát video, nó sẽ hiển thị cho tôi trong menu ngôn ngữ rằng cái đầu tiên là tiếng Anh và cái thứ hai là tiếng Nga?

Câu trả lời:


5

lựa chọn luồng

Luồng mặc định lựa chọn hành vi là chọn một loại luồng cho mỗi đầu vào. Ví dụ, như trong đầu vào của bạn, nếu nó chứa hai luồng âm thanh, thì chỉ có luồng có số lượng kênh nhiều nhất sẽ được chọn.

Bạn có thể nói ffmpeg bao gồm tất cả các luồng với -map Tùy chọn.

-map tùy chọn bắt đầu đếm tại 0, các 0 trong ví dụ này đề cập đến đầu vào đầu tiên ( input.avi: đầu vào duy nhất của bạn trong trường hợp này). Nếu bạn có đầu vào bổ sung thì -map 1 sẽ đề cập đến đầu vào thứ hai.

đặt siêu dữ liệu ngôn ngữ

Để đặt ngôn ngữ của luồng âm thanh thứ nhất và thứ hai, hãy sử dụng -metadata tùy chọn với chỉ định luồng :

ffmpeg -i input.avi -map 0 -codec copy -metadata:s:a:0 language=eng -metadata:s:a:1 language=rus output.avi

Xem tài liệu để biết thêm.


Tôi nghĩ avi không hỗ trợ nhiều nếu có bất kỳ siêu dữ liệu mỗi luồng nào (ngoài các công cụ kỹ thuật cần thiết). -metadata:s:a:0 language=eng không làm gì cả (đầu ra giống hệt byte có / không, chuyển từ avi đầu vào sang avi đầu ra, trong đó mplayer liệt kê ngôn ngữ là "không xác định" trong đầu vào.) Tôi đã nghi ngờ điều này, vì vậy lệnh này rất hữu ích để xác minh rằng avi không ' t làm theo dõi tên / siêu dữ liệu ngôn ngữ.
Peter Cordes

cập nhật, thực sự là hướng dẫn sử dụng GUI Avi-Mux alexander-noe.com/video/amg/en_main_window.html nói về việc đặt tên luồng trong AVI. Có lẽ chỉ không được hỗ trợ bởi ffmpeg?
Peter Cordes

0

Sử dụng như thế này cho các tập tin AVI

 -map 0 -acodec copy -metadata:s:a:0  title="English" -metadata:s:a:1 title="Hindi"

Các từ khóa tiêu đề thực hiện các mẹo


Bạn có thể mở rộng - làm thế nào để trả lời câu hỏi này?
suspectus

1
Ngoài ra, đó là quy ước để thêm toàn bộ dòng lệnh bao gồm cả lệnh. Khi bạn làm điều đó là một thực hành tốt để giải thích từng tham số là @suspectus ám chỉ
albal

0

Mất khá nhiều thời gian để tôi tìm ra điều này. Tôi đang đăng nó ở đây, bởi vì thậm chí sau 3 năm, chủ đề này là một trong những lượt truy cập đầu tiên trong tìm kiếm của google: AVI (cụ thể hơn: RIFF) không hỗ trợ tên ngôn ngữ nhưng ngược lại với mkv, siêu dữ liệu không được lưu trong luồng mà trong tiêu đề sử dụng thẻ IAS1-9 cho tối đa 9 luồng âm thanh khác nhau.

ffmpeg -i input.avi -map 0 -codec copy -metadata IAS1=eng -metadata IAS2=ger output.avi

VLC ist khá khoan dung. Nếu bạn nhập mã ISO "ger", VLC sẽ dịch nó thành "tiếng Đức", nếu bạn nhập "MyLang", VLC sẽ hiển thị "MyLang". Các phần mềm khác như Kodi cần mã ISO chính xác. Nó sẽ chỉ đọc "MyL" và sau đó hiển thị ngôn ngữ là không xác định.

Tuy nhiên, xin lưu ý rằng ffmpeg không chỉ thêm ngôn ngữ mà còn thay đổi siêu dữ liệu khác. Ví dụ, dữ liệu xen kẽ và tải trước âm thanh là khác nhau trong output.avi, không biết điều này có tốt hay có thể dẫn đến âm thanh không đồng bộ. Kiểm tra với MediaInfo hoặc tương tự.

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.