Cách xem xét bitrate, -maxrate và -bufsize của video cho web


13

Tôi đang sử dụng ffmpeg để mã hóa video của mình để tải chúng lên web. Tôi đã thấy bài đăng này về việc sử dụng ffmpeg, nhưng không hiểu rõ về cách xem xét các giá trị.

Giả sử tôi có một video có kích thước 70 MB với thời lượng 4 phút. Làm thế nào tôi sẽ xem xét giá trị cho những lá cờ: -b:v, -maxrate-bufsizecho lệnh này?

ffmpeg -i input -codec:v libx264 -profile:v main -preset slow -b:v ? -maxrate ? -bufsize ? -vf "scale=720:trunc(ow/a/2)*2" -threads 0 -codec:a libfdk_aac -movflags +faststart output

Hoặc có bất kỳ giá trị bình thường, như đối với các crfgiá trị là 19-24? Tôi thực sự sẽ đánh giá cao sự giúp đỡ và hướng dẫn của bạn.


Mã hóa video là một nghệ thuật và có hàng trăm thông số cần nắm vững. Lưu ý rằng mã hóa hai lần sẽ cung cấp (nhiều) chất lượng và nén tốt hơn trong hầu hết các kịch bản so với chơi với bitrate. Thông thường kích thước cuối cùng và tốc độ bit video phụ thuộc chủ yếu vào kích thước đầu ra video. ffmpeg đủ thông minh để chọn maxrate và bitrate nếu bạn bảo nó giữ nguyên chất lượng video. Cũng lưu ý rằng việc tạo video có chiều rộng 480px là đủ tốt trong hầu hết các tình huống và điều đó sẽ tiết kiệm được nhiều băng thông hơn khi phát bằng bitrate.
Earizon

1
@earizon Tôi đồng ý, mã hóa video là một nghệ thuật và 480 thường là đủ tốt. Tuy nhiên, tôi cũng thích có sẵn độ phân giải cao hơn vì tôi không sử dụng CRT ở 640x480 nữa. Đó chắc chắn là một cách tốt hơn để giảm kích thước hơn là nghịch với bitrates, nhưng một lần nữa, tôi thích các tùy chọn.
Wyatt8740

Câu trả lời:


20

Nó thực sự phụ thuộc vào tốc độ tải lên của bạn.

bufsizesẽ xác định ffmpeg tôn giáo như thế nào về việc giữ bitrate của bạn không đổi. Nếu bạn đặt bufsize64k, theo FFmpeg Wiki: Giới hạn tốc độ bit đầu ra , nó sẽ tính toán tốc độ bit hiện tại của nó sau mỗi 64 kilobyte và điều chỉnh cho phù hợp. Kích thước nhỏ hơn bufsizecó thể gây hại cho chất lượng ở chỗ chúng không cho phép đủ không gian giữa các lần kiểm tra cho x264 để thực hiện các thay đổi đột ngột - bạn sẽ bị tắc nghẽn.

Nếu của bạn maxratelà 640kb / bufsizegiây và của bạn là 64k, thì cứ mười giây của x264 sẽ kiểm tra. Đây là tối ưu phụ - FFmpeg Wiki: Mã hóa cho các trang web phát trực tuyến khuyên bạn nên chạy nó cứ sau 1 đến 2 giây. Nếu điều này không có ý nghĩa, hãy nghĩ về nó như maxrate/ bufsize= tần suất kiểm tra. Giữ tần số này trong khoảng từ 1 đến 2 giây như một quy tắc chung.

Nếu bạn đặt cả hai maxratebufsize, bạn nên:

  • được đặt maxratethành bất cứ tốc độ tải lên thấp nhất của bạn sẽ như thế nào (trong ví dụ wiki ffmpeg , đây là 80% tổng tốc độ tải lên, nhưng số dặm của bạn có thể thay đổi).
  • được đặt bufsizeở một nơi nào đó giống như maxrate(một giây) và hai lần của bạn maxrate(2 giây). Nếu điều này vẫn không đủ thấp, hạ thấp của bạn maxratevà sau đó thiết lập lại cho bufsizephù hợp.

Sau đó, bạn sẽ phải chơi xung quanh một chút, nhưng vì bạn phải bắt đầu ở đâu đó, tôi chỉ bắt đầu với mức giá maxratekhoảng 600k, thường đủ để tôi quay lại trước khi tôi sử dụng crfmọi thứ.

Nếu bạn muốn, bạn có thể thử các giá trị thấp hơn bufsize, như cứ sau ba hoặc bốn giây, chỉ để xem giá trị thay đổi như thế nào. Sau đó, bạn có thể xác định mức độ bạn nên lo lắng về nó cho video của mình.

Thực sự không có giá trị bình thường - điều crftối ưu hóa đầu ra dựa trên cái mà nó cho là kích thước bộ đệm tốt nhất để duy trì bất cứ tỷ lệ nào được đặt. Nó cố gắng giữ kích thước tệp thấp trong khi vẫn duy trì chất lượng, với chi phí tăng đột biến.


1
Không nên "đặt bufsize thành một nơi nào đó giống như mức tối đa của bạn (một giây) và một nửa mức tối đa của bạn (2 giây)" được "đặt bufsize thành một nơi nào đó giống như mức tối đa của bạn (một giây) và gấp đôi mức tối đa của bạn (2 giây giây) "?
Ely

@Ely tôi nghĩ bạn đúng. Của tôi sẽ làm điều đó mỗi nửa giây. Tôi sẽ sửa nó!
Wyatt8740

@ Wyatt8740 Xin lỗi, tôi rất bận. Chỉ một câu hỏi mặc dù. Nếu tôi sử dụng crf, thì tôi không cần chỉ định bitrate, buffsizemaxrate? Và nếu vậy, cái nào hiệu quả hơn (sử dụng crfhay bitrate, buffsizemaxrate)?
Robin

@Robin Bạn có thể sử dụng bufsize và maxrate với crf. Hãy nhớ rằng, crf sẽ điều chỉnh bitrate khi đang bay để phù hợp với chất lượng nhất định và nếu các phần của video rất phức tạp, bitrate sẽ bắn lên cao và bạn có thể không muốn điều đó, vì vậy tốt hơn là "khóa" với bufsize và tối đa hóa (nhưng không quá nghiêm ngặt, hoặc video của bạn sẽ trông như tào lao! :))
Ely

@Robin đúng, bạn không cần sử dụng crf với những người khác. Tuy nhiên, bạn có thể nếu bạn muốn hạn chế nó. crf cố gắng duy trì chất lượng không đổi - bạn có thể buộc nó làm như vậy trong giới hạn với bufsizemaxrate. Bạn không cần bitrate, mặc dù. Như Ely đã nói, nó sẽ làm cho nó tốt hơn để phát trực tuyến.
Wyatt8740
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.