2011-08-19 41 views
11

Tôi đang cố mã hóa video bằng ffmpeg thành H.264 (qua thư viện libx264) với tốc độ bit không đổi. Tôi biết, tôi biết, VBR thường được ưa thích, nhưng đối với công việc cụ thể này, tôi được yêu cầu sử dụng CBR (miễn là nó quá nhiều kilobyte/giây; nó không phải là một kilobyte chính xác cho mỗi khung hình, afaik) . video mẫu của tôi, tôi đang sử dụng để thử nghiệm là từ đây: http://a1408.g.akamai.net/5/1408/1388/2005110403/1a1a1ad948be278cff2d96046ad90768d848b41947aa1986/sample_iTunes.mov.zip (nó xuất phát từ http://support.apple.com/kb/HT1425)Mã hóa video CBR H.264 với FFmpeg

tôi có thể có được một tốc độ bit không đổi khi mã hóa video với định dạng MPEG-4 video (sử dụng các lệnh ffmpeg -i sample_iTunes.mov -b 819968 -minrate 819968 -maxrate 819968 out.mov), và các bit tỷ lệ là như mong đợi. Đọc thông số kỹ thuật của video thông qua QuickTime Inspector, nó có tốc độ dữ liệu là 844,94 kbit/s. Mát mẻ.

Tuy nhiên, khi tôi thay đổi codec thành libx264, dường như hoàn toàn bỏ qua các yêu cầu bitrate của tôi! Lệnh tôi đang thử là "ffmpeg -i sample_iTunes.mov -vcodec libx264 -vpre medium -b 819968 -vb 819968 -minrate 819968 -maxrate 819968 -bufsize 400000 test.mov". Nhưng khi tôi kiểm tra thông số kỹ thuật của video thông qua QuickTime Inspector, nó có tốc độ dữ liệu 254,74 kbit/s. WTF? Nó thậm chí còn chẳng gần đúng!

Tôi đã thử thay đổi nhiều tham số và thêm hàng tấn thứ khác nhau và tôi đã dành 2 ngày để giải quyết vấn đề này, nhưng dường như tôi không thể làm việc đó được. Nếu tôi mã hóa video bằng bộ mã hóa MainConcept H.264, tôi có thể nhận được tốc độ bit không đổi, nhưng tôi cần điều này để làm việc với ffmpeg.

Nếu ai đó có thể giúp tôi tìm ra cách làm mã hóa CBR H.264 với FFmpeg, tôi sẽ yêu bạn mãi mãi!

Trả lời

0

Ok, vì vậy tôi nghĩ rằng tôi có thể đã tìm thấy một phần của sự cố. Làm cho tỷ lệ lớn hơn tốc độ dữ liệu dường như đã giải quyết được vấn đề. Tất nhiên, tôi không biết nếu mã hóa của nó là thực CBR, nhưng tốc độ dữ liệu mà Bộ kiểm tra thời gian nhanh sẽ đọc ngay bây giờ.

5

Tôi cũng đang cố gắng lấy CBR ra khỏi x264. Tôi tìm thấy blog này post bởi Dark Shakari khá thú vị.

Dưới đây là những gì tôi có cho độ trễ thấp CBR video sang một định dạng MPEG tranport dòng:

ffmpeg -i sintel_trailer-720p.mp4 -an -tune zerolatency \ 
     -x264opts bitrate=4000:vbv-maxrate=4000:vbv-bufsize=166 \ 
     -vcodec libx264 -f mpegts -muxrate 4000K -y trailer.ts 

Theo blog của nhà phát triển x264 của bạn thiết lập:

  • VBV-maxrate = bitrate = B = nhắm mục tiêu bitrate
  • VBV-bufsize = B/fps (trong trường hợp của video này đó là 24 fps)

Cuối cùng, thiết lập công tắc ffmpeg cho x264 của khả năng zerolat.

Hy vọng điều đó hữu ích. Và, nếu có ai cải thiện điều này, hãy cho tôi biết!

+3

Tôi vẫn thấy sự thay đổi đáng kể với các tùy chọn đó. Tuy nhiên, +1 vì nó dẫn tôi đến một tùy chọn thực sự giúp ích trong tình huống của tôi, '-muxrate'. Điều này bổ sung thêm null vào luồng truyền tải để thử và đạt được các mục tiêu CBR của bạn. Nó không hoàn hảo, nhưng nó đủ gần tôi. Theo như tôi có thể nói, 'ffmpeg' thực sự không hỗ trợ CBR.Min = avg = max cũng không hoạt động. Null-nhồi là gần như bạn có thể nhận được. –

+0

Tôi có thể đến gần CBR bằng cách sử dụng các tùy chọn này để +1. Khi đặt thành 4000K, tôi nhận được 4000, 3999,9 và 3999,8, vì vậy không phải là CBR nhưng gần như chết tiệt! – zgr024

3

Chỉ định -nal-hrd cbr sau -bufsize 400000.

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