Nén video theo MPEG-

Một phần của tài liệu Tìm hiểu kỹ thuật nén MPEG Video Coding I MPEG 1 (Trang 33 - 47)

II. Kỹ thuật nén MPEG-

3. Nén video theo MPEG-

Video MPEG-1 khai thác các phương pháp nén theo cảm nhận để giảm đáng kể tốc độ dữ liệu theo yêu cầu của luồng video. Nó làm giảm hoặc loại bỏ hồn tồn thơng tin ở một số tần số và khu vực nhất định của hình ảnh mà mắt người có khả năng nhận thức đầy đủ. Nó cũng khai thác sự dư thừa tạm thời (theo thời gian) và không gian (trên một bức tranh) phổ biến trong video để đạt được khả năng nén dữ liệu tốt hơn so với có thể.

Khơng gian màu

Trước khi mã hóa video thành MPEG-1, khơng gian màu được chuyển thành Y'CbCr (Y '= Luma, Cb = Chroma Blue, Cr = Chroma Red). Luma (độ sáng, độ phân giải) được lưu trữ riêng biệt với sắc độ (màu sắc, màu sắc, pha) và thậm chí được phân tách thành các thành phần màu đỏ và màu xanh. Màu sắc cũng được chia thành 4: 2: 0 , nghĩa là nó giảm đi một nửa theo chiều dọc và một nửa theo chiều ngang, chỉ còn một phần tư độ phân giải của video. [1] Thuật toán phần mềm này cũng có các phần tương tự trong phần cứng, chẳng hạn như đầu ra từ bộ lọc mẫu của Bayer , phổ biến trong máy ảnh màu kỹ thuật số. Do mắt người nhạy cảm hơn nhiều với những thay đổi nhỏ về độ sáng (thành phần Y) so với màu sắc (thành phần Cr và Cb), nên lấy mẫu sắc độ là một cách rất hiệu quả để giảm lượng dữ liệu video cần nén. Trên các video có độ chi tiết cao (độ phức tạp khơng gian cao ), điều này có thể biểu hiện dưới dạng các tạo phẩm răng cưa màu . So với các tạo tác nén kỹ thuật số khác , vấn đề này dường như rất hiếm khi gây khó chịu. Do lấy mẫu con, video Y'CbCr phải luôn được lưu trữ bằng các kích thước chẵn ( chia hết cho 2), nếu khơng, hiện tượng khơng khớp màu ("bóng ma") sẽ xuất hiện và nó sẽ xuất hiện như màu phía trước hoặc phía sau phần cịn lại của video, giống như một cái bóng. Y'CbCr thường được gọi khơng chính xác là YUV , chỉ được sử dụng trong miền của tín hiệu video tương tự . Tương tự, các thuật ngữ độ chói và sắc độ thường được sử dụng thay cho thuật ngữ (chính xác hơn) luma và sắc độ.

Ví dụ về mẫu phụ 4: 2: 0. Hai vòng tròn trung tâm chồng chéo đại diện cho các pixel màu xanh lam và màu đỏ (màu), trong khi 4 vịng trịn bên ngồi đại

diện cho độ sáng (độ sáng).

Độ phân giải / bitrate

MPEG-1 hỗ trợ độ phân giải lên tới 4095 × 4095 (12 bit) và tốc độ bit lên tới 100 Mbit / s. [10] Các video MPEG-1 thường thấy nhất khi sử dụng độ phân giải Định dạng đầu vào nguồn (SIF): 352x240, 352x288 hoặc 320x240. Các độ phân giải thấp này, kết hợp với tốc độ bit nhỏ hơn 1,5 Mbit / s, tạo nên dòng được gọi là dịng bit tham số bị ràng buộc (CPB), sau đó đổi tên thành cấu hình "Mức thấp" (LL) trong MPEG-2. Đây là thông số video tối thiểu mà bất kỳ bộ giải mã nào cũng có thể xử lý, để được coi là tuân thủ MPEG-1 . Điều này đã được chọn để cung cấp một sự cân bằng tốt giữa chất lượng và hiệu suất, cho phép sử dụng phần cứng hợp lý rẻ tiền thời gian.

Loại khung / hình ảnh / khối

MPEG-1 có một số loại khung hình / hình ảnh phục vụ các mục đích khác nhau. Điều quan trọng nhất, nhưng đơn giản nhất là I-frame .

I-frames

I-frame là tên viết tắt của Intra-frame , được gọi là vì chúng có thể được giải mã độc lập với bất kỳ khung nào khác. Chúng cũng có thể được gọi là hình ảnh I hoặc khung hình chính do chức năng hơi giống với các khung chính được sử dụng trong hoạt hình. Khung hình I có thể được coi là giống hệt với hình ảnh JPEG cơ bản.

nhất. Khi cắt video, không thể bắt đầu phát lại một đoạn video trước khung I đầu tiên trong phân đoạn (ít nhất là khơng có mã hóa lại chun sâu tính tốn). Vì lý do này, các video MPEG chỉ có khung hình I được sử dụng trong các ứng dụng chỉnh sửa.

Nén chỉ khung hình I rất nhanh, nhưng tạo ra kích thước tệp rất lớn: hệ số 3 × (hoặc nhiều hơn) lớn hơn video MPEG-1 được mã hóa thơng thường, tùy thuộc vào mức độ phức tạp của một video cụ thể theo thời gian. I-frame chỉ I-frame rất giống với video MJPEG . Quá nhiều để chuyển đổi tốc độ rất cao và không mất mát về mặt lý thuyết (trong thực tế, có lỗi làm trịn) có thể được thực hiện từ định dạng này sang định dạng khác, với một số hạn chế (không gian màu và ma trận lượng tử hóa) được tạo ra trong q trình tạo ra dịng bit.

Độ dài giữa các khung hình I được gọi là kích thước nhóm hình

ảnh (GOP). MPEG-1 thường sử dụng kích thước GOP từ 15-18. tức là 1 khung

hình I cho mỗi 14-17 khung hình khơng phải I (một số kết hợp của khung P- và B-). Với các bộ mã hóa thơng minh hơn, kích thước GOP được chọn tự động, lên đến một số giới hạn tối đa được chọn trước.

Các giới hạn được đặt trên số lượng khung hình tối đa giữa các khung hình I do giải mã phức tạp, kích thước bộ đệm bộ giải mã, thời gian phục hồi sau lỗi dữ liệu, khả năng tìm kiếm và tích lũy các lỗi IDCT trong các triển khai độ chính xác thấp phổ biến nhất trong các bộ giải mã phần cứng.

Khung hình P

P-frame là tên viết tắt của Dự đốn khung . Chúng cũng có thể được gọi là khung dự đoán chuyển tiếp hoặc khung liên khung ( khung B cũng là khung liên khung).

Khung P tồn tại để cải thiện khả năng nén bằng cách khai thác tính dư

thừa theo thời gian (theo thời gian) trong video. Khung P chỉ lưu trữ sự khác

biệt về hình ảnh từ khung (khung I hoặc khung P) ngay trước khung (khung

tham chiếu này còn được gọi là khung neo ).

Sự khác biệt giữa khung P và khung neo của nó được tính bằng cách sử dụng vectơ chuyển động trên mỗi macroblock của khung (xem bên dưới). Dữ liệu vectơ chuyển động như vậy sẽ được nhúng vào khung P để bộ giải mã sử dụng.

Khung P có thể chứa bất kỳ số lượng khối nội bộ nào, ngoài bất kỳ khối dự đoán chuyển tiếp nào.

Khung B

Khung B là viết tắt của khung hai chiều . Họ cũng có thể được gọi là khung ngược dự đốn hoặc B-hình ảnh . Khung B khá giống với khung P, ngoại trừ chúng có thể đưa ra dự đốn bằng cả khung trước và khung tương lai (tức là hai khung neo).

Do đó, trước tiên người chơi cần giải mã khung neo I- hoặc P- tiếp theo sau khung B, trước khi khung B có thể được giải mã và hiển thị. Điều này có nghĩa là giải mã khung B yêu cầu bộ đệm dữ liệu lớn hơn và gây ra độ trễ tăng lên trên cả giải mã và trong q trình mã hóa. Điều này cũng địi hỏi tính năng tem thời gian giải mã (DTS) trong luồng container / hệ thống (xem ở trên). Do đó, các khung hình B từ lâu đã trở thành chủ đề gây tranh cãi, chúng thường bị tránh trong các video và đôi khi không được hỗ trợ đầy đủ bởi các bộ giải mã phần cứng.

Khơng có khung khác được dự đốn từ khung B. Do đó, khung B bitrate rất thấp có thể được chèn vào, khi cần thiết, để giúp kiểm soát bitrate. Nếu điều này được thực hiện với khung P, các khung P trong tương lai sẽ được dự đoán từ nó và sẽ làm giảm chất lượng của tồn bộ chuỗi. Tuy nhiên, tương tự, khung P trong tương lai vẫn phải mã hóa tất cả các thay đổi giữa khung này và khung neo I- hoặc P- trước đó. Khung B cũng có thể có ích trong các video trong đó nền phía sau một đối tượng đang được tiết lộ qua một số khung hoặc trong các chuyển tiếp mờ dần, chẳng hạn như thay đổi cảnh. [2] [10]

Khung B có thể chứa bất kỳ số lượng khối mã hóa nội bộ và khối dự đốn chuyển tiếp nào, ngồi các khối được dự đốn ngược hoặc dự đốn hai chiều.

Khung hình D

MPEG-1 có loại khung hình duy nhất khơng có trong các tiêu chuẩn video sau này. Khung hình D hoặc hình ảnh DC là hình ảnh độc lập (khung bên trong) đã được mã hóa chỉ sử dụng hệ số biến đổi DC (hệ số AC được loại bỏ khi mã hóa khung hình D nhìn thấy DCT bên dưới) và do đó có chất lượng rất thấp. Khung D khơng bao giờ được tham chiếu bởi khung I-, P- hoặc

B-. Khung D chỉ được sử dụng để xem trước nhanh video, ví dụ như khi tìm kiếm qua video ở tốc độ cao.

Với thiết bị giải mã hiệu suất cao hơn vừa phải, có thể thực hiện xem trước nhanh bằng cách giải mã I-frames thay vì D-frames. Điều này cung cấp các bản xem trước chất lượng cao hơn, vì các khung I chứa các hệ số AC cũng như các hệ số DC. Nếu bộ mã hóa có thể giả định rằng khả năng giải mã khung hình I nhanh có sẵn trong bộ giải mã, nó có thể tiết kiệm bit bằng cách không gửi khung D (do đó cải thiện việc nén nội dung video). Vì lý do này, các khung hình D hiếm khi được sử dụng trong mã hóa video MPEG-1 và tính năng

này.

Macroblocks

MPEG-1 hoạt động trên video trong một loạt các khối 8x8 để lượng tử

hóa. Tuy nhiên, do sắc độ (màu) được chia theo hệ số 4, nên mỗi cặp khối màu (đỏ và xanh) tương ứng với 4 khối luma khác nhau. Bộ 6 khối này, với độ phân giải 16x16, được gọi là macroblock .

Một macroblock là đơn vị (màu) video độc lập nhỏ nhất. Các vectơ chuyển động (xem bên dưới) chỉ hoạt động ở cấp độ macroblock.

Nếu chiều cao hoặc chiều rộng của video khơng phải là bội số chính

xác của 16, hàng đầy đủ và cột đầy đủ của macroblocks vẫn phải được mã hóa và giải mã để điền vào hình ảnh (mặc dù các pixel được giải mã thêm không được hiển thị).

Vectơ chuyển động

Để giảm lượng dư thừa tạm thời trong video, chỉ các khối thay đổi được cập nhật, (tối đa kích thước GOP tối đa). Điều này được gọi là bổ sung có điều kiện . Tuy nhiên, điều này khơng hiệu quả lắm. Chuyển động của các đối tượng và / hoặc máy ảnh có thể dẫn đến các phần lớn của khung cần được cập nhật, mặc dù chỉ vị trí của các đối tượng được mã hóa trước đó đã thay

đổi. Thơng qua ước tính chuyển động , bộ mã hóa có thể bù cho chuyển động này và loại bỏ một lượng lớn thông tin dư thừa.

Bộ mã hóa so sánh khung hình hiện tại với các phần liền kề của video từ khung neo (khung I- hoặc P- trước đó) theo mẫu kim cương, tối đa giới hạn bán kính được xác định trước (dành riêng cho bộ mã hóa) từ khu vực của macroblock hiện tại. Nếu tìm thấy kết quả khớp, chỉ có hướng và khoảng cách (tức là vectơ của chuyển động ) từ khu vực video trước đó đến macroblock hiện tại cần được mã hóa vào khung hình liên kết (khung P- hoặc B-). Mặt trái của quá trình này, được thực hiện bởi bộ giải mã để tái tạo lại hình ảnh, được gọi là bù chuyển động .

Tuy nhiên, một macroblock dự đốn hiếm khi phù hợp với hình ảnh hiện tại một cách hoàn hảo. Sự khác biệt giữa khu vực khớp ước tính và khung hình / macroblock thực được gọi là lỗi dự đoán . Lỗi càng lớn, dữ liệu phải được mã hóa thêm vào khung càng nhiều. Để nén video hiệu quả, điều rất quan trọng là bộ mã hóa có khả năng thực hiện ước tính chuyển động một cách hiệu quả và chính xác.

vectơ chuyển động (MV) là một nửa của một pixel hoặc nửa pel . Độ chính xác của các MV càng mịn thì khả năng khớp càng chính xác và nén càng hiệu quả. Tuy nhiên, có sự đánh đổi với độ chính xác cao hơn. MV Finer dẫn đến kích thước dữ liệu lớn hơn, vì số lượng lớn hơn phải được lưu trữ trong khung cho mỗi MV, tăng độ phức tạp mã hóa khi tăng mức độ nội suy trên

macroblock được yêu cầu cho cả bộ mã hóa và bộ giải mã và giảm lợi

nhuận (mức tăng tối thiểu) với MV có độ chính xác cao hơn. Half-pel được

chọn là sự đánh đổi lý tưởng.

Do các macroblocks lân cận có thể có các vectơ chuyển động rất giống nhau, thơng tin dư thừa này có thể được nén khá hiệu quả bằng cách được lưu trữ mã hóa DPCM. Chỉ có số lượng chênh lệch (nhỏ hơn) giữa các MV cho mỗi macroblock cần được lưu trữ trong dịng bit cuối cùng.

Khung P có một vectơ chuyển động trên mỗi macroblock, liên quan đến khung neo trước đó. Khung B, tuy nhiên, có thể sử dụng hai vectơ chuyển động; một từ khung neo trước và một từ khung neo tương lai. [49]

Các macroblocks một phần và các viền / thanh màu đen được mã hóa vào video khơng nằm chính xác trên ranh giới macroblock, gây ra sự tàn phá với dự đoán chuyển động. Thông tin về phần đệm / đường viền khối ngăn chặn macroblock khớp với bất kỳ khu vực nào khác của video và do đó, thơng tin lỗi dự đốn lớn hơn đáng kể phải được mã hóa cho mỗi một trong số hàng chục macroblocks dọc theo viền màn hình. Mã hóa và lượng tử hóa DCT (xem bên dưới) cũng gần như khơng hiệu quả khi có độ tương phản hình ảnh lớn / sắc nét trong một khối.

Một vấn đề thậm chí nghiêm trọng hơn tồn tại với các macroblocks

chứa nhiễu cạnh đáng kể, ngẫu nhiên , trong đó hình ảnh chuyển sang màu đen (điển hình). Tất cả các vấn đề trên cũng áp dụng cho tiếng ồn cạnh. Ngồi ra, tính ngẫu nhiên được thêm vào chỉ đơn giản là không thể nén đáng kể. Tất cả các hiệu ứng này sẽ làm giảm chất lượng (hoặc tăng tốc độ bit) của video một cách đáng kể.

DCT

Mỗi khối 8x8 được mã hóa bằng cách đầu tiên áp dụng một về phía

trước biến đổi cosin rời rạc (FDCT) và sau đó là một q trình lượng tử

hóa. Q trình FDCT (tự nó) về mặt lý thuyết là khơng mất mát và có thể đảo ngược bằng cách áp dụng DCT nghịch đảo ( IDCT ) để tái tạo các giá trị ban đầu (trong trường hợp khơng có bất kỳ lỗi lượng tử hóa và làm trịn

nào). Trong thực tế, có một số lỗi làm trịn (đơi khi lớn) được giới thiệu cả bằng cách lượng tử hóa trong bộ mã hóa (như được mơ tả trong phần tiếp theo) và lỗi xấp xỉ IDCT trong bộ giải mã. Độ chính xác tối thiểu cho phép của xấp

nó được chỉ định bởi IEEE 1180 -1990.)

Quá trình FDCT chuyển đổi khối 8x8 của các giá trị pixel không nén (giá trị độ sáng hoặc độ lệch màu) thành một mảng được lập chỉ mục của các giá trị hệ số tần số 8x8 . Một trong số đó là hệ số DC (cao về phương sai) , đại diện cho giá trị trung bình của tồn bộ khối 8x8. 63 hệ số khác là các hệ số AC nhỏ hơn về mặt thống kê , là các giá trị dương hoặc âm, mỗi giá trị biểu thị độ lệch hình sin so với giá trị khối phẳng được biểu thị bằng hệ số DC .

Một ví dụ về khối FDCT 8x8 được mã hóa:

Do giá trị hệ số DC tương quan thống kê từ khối này sang khối khác, nên nó được nén bằng mã hóa DPCM . Chỉ có lượng chênh lệch (nhỏ hơn) giữa mỗi giá trị DC và giá trị của hệ số DC trong khối ở bên trái của nó cần được biểu diễn trong dịng bit cuối cùng.

Ngồi ra, chuyển đổi tần số được thực hiện bằng cách áp dụng DCT cung cấp chức năng giải mã thống kê để tập trung hiệu quả tín hiệu vào các giá trị biên độ cao ít hơn trước khi áp dụng lượng tử hóa (xem bên dưới).

Lượng tử hóa

Lượng tử hóa (của dữ liệu số) về cơ bản là q trình giảm độ chính xác của

tín hiệu, bằng cách chia nó thành một số kích thước bước lớn hơn (nghĩa là tìm bội số gần nhất và loại bỏ phần dư / mơ đun).

Bộ lượng tử hóa mức khung là một số từ 0 đến 31 (mặc dù các bộ mã hóa thường sẽ bỏ qua / vơ hiệu hóa một số giá trị cực trị) để xác định lượng thông

Một phần của tài liệu Tìm hiểu kỹ thuật nén MPEG Video Coding I MPEG 1 (Trang 33 - 47)

Tải bản đầy đủ (PDF)

(52 trang)