Làm thế nào để bitrate khác nhau cho cùng độ phân giải và tốc độ khung hình?


15

Đọc về chất lượng video tôi thấy rằng nó phụ thuộc vào độ phân giải, khung hình trên giây và bitrate, quyết định kích thước của video.

Câu hỏi của tôi là làm thế nào bitrate được tính toán và làm thế nào nó có thể khác nhau.

Giả sử một video có độ phân giải 360x240. Phải mất 86400 pixel mỗi khung hình. Tốc độ khung hình là 30 Hz. Vì vậy, video mất 86400 × 30 = 2592000 pixel mỗi giây.

Vì vậy, giả sử 1 pixel là 3 Byte (24 Bits) dữ liệu: chúng tôi có 2592000 × 24 bit mỗi video (62208000 Bits), đó là 62208 kBits (Điều này nghe có vẻ không đúng, có thể là một số vấn đề trong tính toán của tôi).

Nhưng làm thế nào nó có thể khác nhau và làm thế nào để làm cho sự khác biệt về chất lượng?


Nếu video là một chuỗi các hình ảnh bitmap. Toán học của bạn đã tắt cho các tệp hình ảnh png / jpg.
Daniel Beck

Hai câu trả lời hiện tại không nhấn mạnh thuộc tính nổi bật về nén video: hầu hết (nếu không phải tất cả) tất cả các codec video đều sử dụng nén mất dữ liệu . Đó là, một số thông tin hình ảnh bị loại bỏ khi video thô được nén và mã hóa. Số lượng hoặc mức độ của thông tin / chi tiết hình ảnh bị loại bỏ và bị mất được xác định bởi một yếu tố chất lượng . Đối với nén âm thanh, có cả kỹ thuật nén lossy và lossless.
mùn cưa

@sawdust: Họ không? Tôi nghĩ rằng đoạn thứ ba của tôi làm điều đó khá rõ ràng. Dù sao, đưa ra quá nhiều thông tin đôi khi không tốt lắm; Tôi tin vào việc đưa ra đủ để cho phép người hỏi tìm hiểu thêm, nếu muốn. Mặt khác, tôi có thể nói rằng bài đăng của bạn không nhấn mạnh lý do tại sao một người nào đó chọn một máy nén hơn một máy nén khác, hoặc tại sao có quá nhiều phương pháp khác nhau, v.v.
Marty Fried

@sawdust Bạn đã đúng, điều này phần nào bị chôn vùi trong phần JPEG. Tôi đã thêm một chút chi tiết.
slhck

Câu trả lời:


21

Những gì bạn đã tính là bitrate cho một video thô, không nén. Bạn thường không tìm thấy những thứ này ngoại trừ trong nghiên cứu hoặc các ứng dụng chuyên dụng khác. Ngay cả các đài truyền hình cũng sử dụng video nén, mặc dù tốc độ bit cao hơn nhiều so với video YouTube thông thường của bạn.

Vì vậy, chất lượng video có liên quan nhiều đến cách nén video. Bạn càng nén nó, càng mất ít bit trên mỗi khung. Ngoài ra, bạn càng nén, chất lượng càng tệ. Bây giờ, một số video dễ nén hơn nhiều so với các video khác - về bản chất, đây là lý do tại sao chúng có tốc độ bit thấp hơn mặc dù chúng có cùng độ phân giải và tốc độ khung hình.

Để hiểu lý do tại sao, bạn cần lưu ý về hai nguyên tắc chính sử dụng nén video. Chúng được gọi là "không gian" và "dự phòng thời gian".

Dự phòng không gian

Sự dư thừa không gian tồn tại trong các hình ảnh hiển thị nội dung tự nhiên. Đây là lý do JPEG hoạt động rất tốt - nó nén dữ liệu hình ảnh vì các khối pixel có thể được mã hóa cùng nhau. Đây là 8 × 8 pixel, ví dụ. Chúng được gọi là "macroblocks".

Các codec video hiện đại cũng làm như vậy: Về cơ bản, chúng sử dụng các thuật toán tương tự JPEG để nén khung hình, từng khối. Vì vậy, bạn không lưu trữ bit trên mỗi pixel nữa, nhưng bit trên macroblock, vì bạn "tóm tắt" pixel thành các nhóm lớn hơn. Bằng cách tóm tắt chúng, thuật toán cũng sẽ loại bỏ thông tin không thể nhìn thấy bằng mắt người - đây là nơi bạn có thể giảm hầu hết tốc độ bit. Nó hoạt động bằng cách định lượng dữ liệu. Điều này sẽ giữ lại các tần số dễ nhận biết hơn và "vứt bỏ" những tần số chúng ta không thể nhìn thấy. Yếu tố lượng tử hóa được biểu thị là "QP" trong hầu hết các codec và đó là núm điều khiển chính cho chất lượng.

Bây giờ bạn thậm chí có thể tiếp tục và dự đoán các macroblocks từ các macroblocks đã được mã hóa trước đó trong cùng một hình ảnh. Điều này được gọi là dự đoán nội bộ . Ví dụ, một phần của bức tường màu xám đã được mã hóa ở góc trên bên trái của khung, vì vậy chúng ta có thể sử dụng macroblock đó trong cùng một khung một lần nữa, ví dụ cho macroblock ngay bên cạnh nó. Chúng tôi sẽ chỉ lưu trữ sự khác biệt so với trước đó và lưu dữ liệu. Theo cách này, chúng ta không phải mã hóa hai macroblocks rất giống nhau.

Tại sao bitrate thay đổi cho cùng kích thước hình ảnh? Vâng, một số hình ảnh dễ mã hóa hơn những hình ảnh khác. Hoạt động không gian càng cao, bạn càng phải thực sự mã hóa. Kết cấu mịn chiếm ít bit hơn so với chi tiết. Điều tương tự cũng xảy ra đối với dự đoán nội bộ: Một khung của một bức tường màu xám sẽ cho phép bạn sử dụng một macroblock để dự đoán tất cả những cái khác, trong khi một khung nước chảy có thể không hoạt động tốt.

Dự phòng tạm thời

Điều này tồn tại bởi vì một khung theo khung khác có lẽ rất giống với khung trước của nó. Hầu hết, chỉ cần một chút thay đổi nhỏ, và sẽ không có ý nghĩa gì khi mã hóa nó hoàn toàn. Những gì các bộ mã hóa video làm chỉ là mã hóa sự khác biệt giữa hai khung hình tiếp theo, giống như chúng có thể làm cho các macroblocks.

Lấy một ví dụ từ bài viết của Wikipedia về bù chuyển động , giả sử đây là khung ban đầu của bạn:

Sau đó, sự khác biệt cho khung hình tiếp theo chỉ là:

Bộ mã hóa bây giờ chỉ lưu trữ các khác biệt thực tế , không phải các giá trị pixel-by-pixel. Đây là lý do tại sao các bit được sử dụng cho mỗi khung hình không giống nhau mỗi lần. Các khung "khác biệt" này phụ thuộc vào khung được mã hóa hoàn toàn và đây là lý do tại sao có ít nhất hai loại khung cho codec hiện đại:

  • I-frames (còn gọi là khung hình chính) - đây là những khung được mã hóa hoàn toàn
  • Khung hình P - đây là những khung hình chỉ lưu trữ sự khác biệt

Thỉnh thoảng bạn cần chèn I-frames vào video. Tốc độ bit thực tế cũng phụ thuộc vào số lượng khung hình I được sử dụng. Hơn nữa, sự khác biệt về chuyển động giữa hai khung hình tiếp theo càng nhiều, bộ mã hóa càng phải lưu trữ. Một video "không có gì" di chuyển sẽ dễ mã hóa hơn một video thể thao và sử dụng ít bit hơn trên mỗi khung hình.


+1 - đó là những gì tôi muốn nói, nhưng thuật toán nén của tôi đã bỏ qua một chút. :)
Marty Fried

+1 Đây là tất cả những gì tôi cần. Đặc biệt là bù chuyển động. Cảm ơn
vincent mathew

6

Tôi tin rằng toán học của bạn thực sự chính xác, nhưng có thêm một chút về nó; nén là liên kết còn thiếu ở đây.

Bạn đã tính tốc độ bit không nén và đưa ra lý do nén tồn tại. Tốc độ bit trở nên lớn không tưởng với video không nén. Vì vậy, họ nén video tại nguồn và giải nén nó tại máy thu, và sau đó tốc độ bit trở nên có thể quản lý được. Bạn chỉ cần một bộ giải nén đủ nhanh, có thể là phần cứng hoặc phần mềm.

Vì vậy, vấn đề trở thành mức độ nén có thể được chấp nhận - thông thường, nó không phải là mất mát, vì vậy bạn đang mất thông tin, nhưng họ cố gắng làm cho nó đủ thông minh để mất dữ liệu ít quan trọng hơn mà không đáng chú ý. Nó thường khá dễ dàng cho đến khi có nhiều chuyển động, sau đó nó trở nên phức tạp hơn.

Chỉnh sửa: Quên thêm, nhưng các phần thực hiện phương thức nén là codec; Tôi nhận thấy rằng bạn đã sử dụng điều này như một thẻ trong bài viết của bạn.


3
Cộng với thực tế là nén video thường không dựa trên pixel, nhưng hoạt động trên các khối pixel, được gọi là macroblocks .
slhck
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.