Làm cách nào tôi có thể đặt mức cấu hình h.264 với ffmpeg?


16

Tôi có một bộ phim (m4v / h.264 / AAC) phát tốt trên máy Mac của tôi nhưng gần đây tôi phát hiện ra rằng nó không phát trên Apple TV3 của tôi. Sau khi xem các thuộc tính của tệp phim này, tôi thấy rằng nó có cấu hình High@4.1 nhưng Apple TV3 chỉ hỗ trợ tối đa High@4.0. Tôi nghĩ rằng thuộc tính duy nhất làm cho video này không tương thích là tốc độ bit video tối đa, tất cả các thuộc tính khác trông giống như chúng được hỗ trợ trong High@4.0.

Làm cách nào tôi có thể sử dụng ffmpeg để hạ cấp video này xuống High@4.0?

Hoặc tôi phải thay đổi thuộc tính thực tế (tốc độ bit tối đa) làm cho video này 4.1 thay vì 4.0? Tôi lo lắng rằng nếu tôi chỉ thay đổi tốc độ bit, mặc dù tệp đó sẽ tương thích với High@4.0, nó vẫn sẽ được 'gắn thẻ' là High@4.1 và do đó vẫn không phát trên Apple TV3 của tôi.

Câu trả lời:


22

Khi mã hóa bằng libx264, bạn có thể đặt cấu hình và cấp độ H.264 bằng:

  • -profile:v- một trong high, mainhoặc baseline(và những người khác, nhưng điều này không liên quan ở đây)
  • -level:v- như được định nghĩa trong Phụ lục A của tiêu chuẩn H.264, vd 4.0.

Ví dụ:

ffmpeg -i input.mp4 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy output.mp4

Ở đây chúng tôi vừa sao chép luồng âm thanh vì nó sẽ không bị ảnh hưởng.

Đầu ra sẽ có cấu hình và cấp chính xác được đặt trong siêu dữ liệu của nó. Bạn có thể kiểm tra điều này trong khi mã hóa, trong đó x264nói một cái gì đó như:

[libx264 @ 0x7fb26103a000] profile High, level 4.0

MediaInfo cũng có thể giúp bạn phân tích chi tiết về container và codec.

Tất nhiên, việc mã hóa lại video sẽ làm giảm chất lượng của video đến một mức độ nào đó, với điều kiện là bạn đang áp dụng lại một chuyển đổi mất mát. Hãy thử thiết lập -crftùy chọn để ảnh hưởng đến tham số chất lượng không đổi. Giá trị mặc định ở đây là 23, trong khi giá trị từ 18 đến 28 được coi là lành mạnh. Thấp hơn có nghĩa là chất lượng tốt hơn. Nếu đầu vào của bạn có tốc độ bit lên tới 65.000 kBit / s, rất có thể nó vẫn sẽ trông khá tốt sau khi chuyển đổi.


1
Điều đó đã làm việc tốt. Thật không may, nó đã mất một số siêu dữ liệu nhưng video thực tế không có bất kỳ thay đổi đáng chú ý nào về chất lượng. Không quan tâm, liệu các lệnh sau có đạt được điều tương tự không? ffmpeg -i input.mp4 -vcodec x264 -vprofile high -vlevel 4.0 -acodec copy output.mp4
Sam

Vâng, các -vtùy chọn là bí danh của :vnhững người. Bạn đã mất siêu dữ liệu nào?
slhck

Tôi nghĩ rằng nó có thể chỉ là tác phẩm nghệ thuật đã bị mất. Tôi không biết nếu đó được coi là siêu dữ liệu về mặt kỹ thuật ... Tác phẩm nghệ thuật có thực sự chứa trong tệp không? Tôi đã không kiểm tra mọi thứ khác trước khi tôi thêm toàn bộ vào nó một lần nữa.
Sam

Bây giờ tôi có một tập tin khác với một vấn đề tương tự. Đó là cấp độ hồ sơ sai nhưng phần còn lại của thông số kỹ thuật dường như tương thích với cấp độ yêu cầu của tôi (4.0). Nếu tôi sử dụng các lệnh bạn đã đưa ra ở trên, nó sẽ để dữ liệu không bị ảnh hưởng trừ khi nó không tương thích với mức hồ sơ đã nhập? Về cơ bản, tôi không muốn ffmpeg chạm vào bất kỳ dữ liệu nào ngoài thẻ cho biết cấu hình và mức độ của nó. Điều đó là có thể hay là nó sẽ đặt tất cả các giá trị (nitrate, tốc độ khung hình, v.v.) thành các giá trị đặt trước?
Sam

2
Tôi chỉ vấp phải một cách để đạt được điều này. Subler thực sự có một tùy chọn, khi bạn chọn luồng video, để thay đổi cấu hình và cấp độ để làm cho nó tương thích với các thiết bị nhất định. Nó cho bạn biết để đảm bảo rằng video tương thích với thông tin bạn đang cài đặt vì vậy tôi không nghĩ nó có mã hóa lại hay không, nó chỉ cần thay đổi siêu dữ liệu.
Sam

1

Để tham khảo bình luận của bạn , hãy thử lệnh này:

ffmpeg -i input.mp4 -map 1 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy \
# copies all global metadata from input.mp4 to output.mp4
-map_metadata 0 \
# copies video stream metadata from input.mp4 to output.mp4
-map_metadata:s:v 0:s:v \
# copies audio stream metadata from input.mp4 to output.mp4
-map_metadata:s:a 0:s:a \
output.mp4

Chúc mừng

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.