Câu trả lời ngắn :
Khối là đơn vị để so sánh giữa các khung;
Dự đoán dựa trên số lượng khối trình bày trên cả hình ảnh trước và sau;
Câu trả lời dài hơn :
Là đầu vào, một bộ mã hóa video không nhận được gì khác ngoài một chuỗi các khung .
Trong hầu hết các trường hợp, các khung liền kề rất giống nhau và bộ mã hóa cố gắng tìm hiểu xem các khung này có thực sự giống nhau hay không.
Làm thế nào để bạn nói nếu hai hình ảnh là tương tự nhau?
- Cả hai hình ảnh được chia thành các macroblocks (bạn không thể so sánh toàn bộ hình ảnh, chúng chắc chắn sẽ khác nhau!)
- Thuật toán cố gắng tìm xem một khối từ hình ảnh trước có tồn tại trên hình ảnh sau không (trong một khoảng cách nhất định với vị trí ban đầu của nó)
- Nếu, đến một ngưỡng nhất định, hầu hết các khối có trên hình ảnh sau, hình ảnh sau được tính là một sự khác biệt so với hình ảnh trước đó (
P-frame
);
- Tất nhiên, các khối khác nhau được mã hóa nguyên trạng;
- Nếu không, hình ảnh sau đây được coi là thuộc về một cảnh khác và không có cách nào khác ngoài việc giữ nó hoàn toàn (
I-frame
).
Để hiểu cách dự đoán hoạt động, hãy xem hình ảnh này. Nó được tạo bởi một deshaker
trình cắm thêm VirtualDub
và được sử dụng cho mục đích khác (phát hiện rung máy), nhưng có vẻ rất tiêu biểu:
Các mũi tên chỉ ra hình ảnh hiện tại khác với hình ảnh trước đó như thế nào;
Toàn bộ khung được chia thành các macroblocks (tuy nhiên lớn hơn 16x16);
Sự khác biệt cho mỗi khối, so với hình ảnh trước đó, là một vectơ chuyển động ;
Như bạn thấy, hầu hết các macroblocks (mũi tên trắng) tuân theo mẫu chung và do đó chúng có thể được mã hóa bằng cách chỉ áp dụng ma trận chuyển vị cho khung trước đó .
Tuy nhiên, có một số khối (mũi tên đỏ) không tuân theo mẫu chung và do đó chúng phải được mã hóa nguyên trạng .
Tất nhiên, nếu mọi thứ đều màu đỏ, không có lựa chọn nào khác ngoài việc mã hóa toàn bộ khung hình như hiện tại.