2013-04-02 32 views
8

Tôi đang cố gắng để mã hóa phim của tôi vào WebM:Tại sao FFMPEG luôn tạo các tệp WebM lớn?

ffmpeg -i input.MOV -codec:v libvpx -quality good -cpu-used 0 -b:v 10k 
-qmin 10 -qmax 42 -maxrate 10k -bufsize 20k -threads 8 -vf scale=-1:1080 
-codec:a libvorbis -b:a 192k 
output.webm 

Tôi muốn mã hóa ở một vài tốc độ bit khác nhau (video và âm thanh kết hợp):

  • 2192 kbps
  • 1692 kbps
  • 1000 kbps

Vấn đề là bất kể tốc độ bit nào Tôi nhập, tôi luôn nhận được một tập tin với tốc độ bit cao hơn 1900 kbps. (1914 kbps với ví dụ mã ở trên.)

Tôi đang làm gì sai?

Trả lời

12

libvpx hơi phức tạp liên quan đến kiểm soát tốc độ và cài đặt chất lượng. Vui lòng tham khảo vpx Encoding GuideVP8 Encode Parameter Guide để biết thêm thông tin. Tôi mất một giờ đào bới mã nguồn để hiểu nó.

Nếu bạn muốn thiết lập bitrate liên tục, bạn sẽ phải thiết lập b:v, maxrateminrate với các giá trị tương tự, ví dụ như vậy (lưu ý rằng tôi bỏ qua các tùy chọn âm thanh ở đây cho ngắn gọn):

ffmpeg -i input.mov -c:v libvpx -b:v 1900K -maxrate 1900K -minrate 1900K output.webm 

Nếu thay vào đó bạn muốn sử dụng chất lượng biến và chỉ cần chỉ định giới hạn trên cho tốc độ bit, thì bạn cần đặt cả b:vcrf. Nếu bạn rời khỏi crf, tốc độ bit được chỉ định sẽ chỉ được tính là trung bình. Chỉ với crf, bộ mã hóa thay đổi ý nghĩa của b:v thành mức tối đa cho phép.

ffmpeg -i input.mov -c:v libvpx -b:v 1900K -crf 10 output.webm 

Một giá trị 10 cho CRF là một điểm khởi đầu tốt, nhưng libvpx có thể thay đổi chất lượng mỗi khung trong phạm vi của qmin ≤ q ≤ qmax, mà bạn cũng có thể chỉ định nếu bạn muốn. Đặt một giới hạn dưới của 10 cho qmin có vẻ hơi cao đối với tôi, nhưng về bản chất bạn sẽ phải thực hiện một số thử và sai, vì nếu tốc độ bit tối đa quá thấp, bạn sẽ liên tục làm bão hòa nó.

+0

Cảm ơn bạn rất nhiều vì đã dành thời gian cho bạn! :) Như bạn đã nói trong ví dụ đầu tiên của bạn, để lại chất lượng đã làm các trick. Nó hoạt động như một sự quyến rũ bây giờ. –

Các vấn đề liên quan