Hotline: +84 904277233

Nhập mã EVN2024 để được giảm25% OFF ngay cho các sản phẩm

HomeBlogCODEC – PHẦN 4: KỸ THUẬT NÉN

CODEC – PHẦN 4: KỸ THUẬT NÉN

Các codec sử dụng nhiều kỹ thuật tính toán cao cấp để nén dữ liệu video, nhưng có hai kỹ thuật nén cơ bản cần phải hiểu, nén không gian (spatial compression) và nén thời gian (temporal compression).

Spatial compression là một kỹ thuật giúp tiết kiệm không gian bên trong một khung hình. Phương pháp này thường được gọi là nén nội khung (intraframe compression), và nó hoạt động bằng cách nhóm các điểm ảnh lại với nhau và lưu trữ chúng dưới dạng một giá trị màu duy nhất, gọi là một khối (block). Các khối này chiếm ít không gian lưu trữ kỹ thuật số hơn nhiều so với các điểm ảnh riêng lẻ, đặc biệt là khi phần lớn của hình ảnh có sẵn sự tương đồng về mặt màu sắc. Mặc dù vậy, chất lượng của hình ảnh sẽ giảm, đặc biệt là với các hình ảnh phức tạp với nhiều chi tiết. Để khắc phục vấn đề này, nhiều codec sử dụng các khối linh hoạt ở nhiều kích thước và hình dáng khác nhau, làm cho cảm nhận về việc giảm chất lượng trở nên mơ hồ hơn.

Nén thời gian (temporal compression), hay nén liên khung (interframe compression), là một kỹ thuật nhằm tiết kiệm không gian giữa nhiều khung hình trong video. Nó dùng kỹ thuật nén khối tương tự như nén không gian (spatial compression), nhưng không phải cho mọi khung hình. Thay vào đó, kỹ thuật nén thời gian (temporal compression) chỉ lưu sự khác biệt giữa các khung hình liên tiếp nhau. Nếu một nửa hình ảnh của hai khung hình là giống nhau, thì kỹ thuật này sẽ chỉ lưu các điểm ảnh mới trong khung hình thứ hai. Các codec sử dụng phương pháp nén này được gọi là các codec long-GOP (group of pictures), và chúng rất hiệu quả trong việc lưu trữ thông tin, vù chúng không cần phải lưu trữ toàn bộ thông tin trong từng khung hình. Mặc dù vậy, mỗi khung hình không chưa một hình ảnh hoàn chỉnh, máy tính của bạn sẽ tốn rất nhiều tài nguyên khi xử lý các cảnh quay không tuần tự, như khi bạn dựng. Nói chung, các codec dùng kỹ thuật nén thời gian (temporal compression) rất tuyệt để lưu trữ thông tin trong một không gian nhỏ, nhưng không phải là lý tưởng để làm việc với các cảnh quay.

Nén video là một thế giới tuyệt vời của toán học, khoa học máy tính và bí ẩn phức tạp. Tin tốt lành cho bạn là bạn không cần phải là một học giả, kỹ sư hay phù thủy để hiểu những điều căn bản. Trong mục này, chúng tôi sẽ khám phá về việc nén video để bạn có thể đưa ra các lựa chọn sáng suốt hơn khi lựa chọn codec.

Nén nội khung (Spatial compression/intraframe compression)

Như đã đề cập trước đây, nén nội khung chỉ liên quan đến dữ liệu trong một khung hình riêng lẻ. Để tiết kiệm không gian lưu trữ dữ liệu, phương pháp nén này không lưu thông tin màu của mọi điểm ảnh. Thay vào đó, các điểm ảnh được nhóm thành các nhóm, được gọi là các Macro-Block, và sau đó một giá trị màu trung bình được gán cho chúng.

Hình dạng chính xác của các macro-block giữa các codec là khác nhau. Một số codec chỉ sử dụng các macro-block có kích thước cố định, trong khi một số khác cho phép kích thước được thay đổi linh hoạt ở một mức nhất định. Ở dạng đơn giản nhất, các macro-block là một khối các điểm ảnh hình vuông hoặc hình như nhật, như trong ví dụ phía trên.

Mặc dù vậy, các codec cao cấp hơn có thể lấy mẫu các khối ở hầu hết mọi hình dáng và kích thước. Trong hình trên, chúng ta có thể thấy cách HEVC sử dụng các khối một cách cực kỳ linh hoạt. Điều này cho hình ảnh sạch hơn nhiều so với các hình thức nén nội khung cứng nhắc khác.

Macro-blocking làm giảm chất lượng hình ảnh nhiều nhất trong những vùng màu gradient.

Trong ví dụ ở trên, hãy để ý bầu trời mờ dần trên một dải màu gradient tinh tế. Phiên bản này của hình ảnh ít bị nén, vậy nên vùng gradient rất mượt mà.

Nhưng nén nội khung chất lượng kém có thể làm cho vùng gradient bị biến dạng và không đều, biến nó thành các dải màu tách biệt. Đây là một tác dụng phụ trực tiếp của việc lược bỏ dữ liệu màu, một lượng lớn các điểm ảnh có màu sắc khác nhau bị gán thành cùng một màu.

Mặc dù vậy, bất chấp vấn đề này, nén nội khung là một phương pháp được dùng trong nhiều codec và ứng dụng. Các codec phổ biến như ProRes, DNxHD, và một số ALL-I (all-Intraframe) codec ghi được tìm thấy trên các máy quay chuyên nghiệp đều sử dụng phương pháp nén nội khung.

Nén liên khung (Temporal/Interframe compression)

Một phương pháp nén khác mà chúng tôi quan tâm là nén liên khung (Temporal/Interframe compression). Phương pháp này sử dụng loại kỹ thuật tương tự như nén nội khung, nhưng trền nhiều khung hình thay vì chỉ một. Điều này có nghĩa là một khung hình không chứa 100% thông tin được dùng để hiển thị. Điều này có vẻ khó hiểu, nhưng thực tế nó khá đơn giản.

Trong shot phía trên, đối tượng ngồi trước một phông nền tĩnh. Rõ ràng, khi cuộc phỏng vấn diễn ra, sẽ có chuyển động trên màn hình. Khuôn mặt của chủ thể sẽ thay đổi khi họ nói, tay của họ sẽ di chuyển, và họ sẽ ngọ nguậy một chút trên ghế. Nhưng nói chung thì phần hậu cảnh giữa các khung hình sẽ không thay đổi. Thậm chí phần lớn hình ảnh chủ thể cũng sẽ không thay đổi trong thời gian ngắn. Vậy nên, trong thực tế, rất nhiều thông tin trong mỗi khung hình có thể là dư thừa nếu chúng đều được lưu trữ như nhau.

Vì vậy, các codec sử dụng phương pháp nén liên khung loại bỏ số dữ liệu dư thừa này bằng cách chỉ lưu những thay đổi trong từng khung hình. Trong trường hợp này, đó là khuôn mặt của chủ thể, và bất cứ cử chỉ tay hay chuyển động cư thể nào mà họ thực hiện. Vậy thì chính xác thì nó hoạt động thế nào?

Quá trình phức tạp này bắt đầu sau khi các codec nén liên khung tách các hình ảnh thành các macroblock. Ở điểm này, một codec nén nội khung sẽ chỉ mã hóa hình ảnh, nhưng các codec nén liên khung thì lại khác. Thay vì mã hóa trực tiếp các giá trị của mỗi khối, thuật toán nén sẽ tìm kiếm các khối tương tự trong các khung hình liền kề. Nếu nó tìm thấy, thì nó sẽ tham chiếu khối đó trong khung hình mới.

Và nó thậm chí còn hoạt động tốt hơn nếu các khối giữa các khung hình hơi khác nhau một chút. Nếu khối tham chiếu nằm ở một vị trí mới (vì máy quay chuyển động), nó có thể được đặt ở khung hình mới ở vị trí mới, bằng cách sử dụng véc-tơ chuyển động. Véc-tơ này cho thấy nơi khối tham chiếu sẽ xuất hiện trong khung hình mới mà không cần phải tạo các khối mới.

Bây giờ, thì codec không cần phải dùng mọi khung hình trong clip cho phương pháp nén này. Rốt cục, các thay đổi trong các cảnh không có chi tiết chung, nên sẽ không thể tìm ra các khối tương tự trong những tình huống như vậy. Đây là lý do tại sao việc  nén liên khung nhóm các khung hình tương đồng lại với nhau để mã hóa và giải mã một cách hiệu quả hơn.

Do đó, các codec nén liên khung được gọi là các codec Group of Pictures (long-GOP). Các nhóm này được tạo thành từ ba loại khung hình khác nhau – khung hình I, khung hình P và khung hình B.

Khung hình I (I-Frames) là các hình ảnh được mã hóa nội bộ (Intraframe-Coded). Có nghĩa là các khung hình này chỉ được nén nội khung. Chúng đóng vai trò là khung tham chiếu cho phần còn lại của lấy mẫu liên khung.

Khung hình P (P-Frames) là các hình ảnh được mã hóa dự đoán (Predictive-Coded). Đây là các khung hình phụ thuộc vào một khung hình tham chiếu nằm ở phía trước. Bất kỳ khối nào nằm giữa khung hình P và khung hình I sẽ chỉ được lưu trữ trong khung hình I và chỉ được tải vào khung hình P để hiển thị.

Khung hình B (B-Frames) là các hình ảnh được mã hóa dự đoán hai chiều (Bidirectionally-Predictive-Coded). Các khung hình này tương tự như khung hình P, nhưng có thể sử dụng dữ liệu từ các hình ảnh trước hoặc sau trong chuỗi. Thuật toán có thể tìm kiếm các khối ở cả khung hình I và khung hình P để điền vào khoảng trống.

Tùy thuộc vào cài đặt nén, số lượng khung hình trong một nhóm sẽ khác nhau. Nói chung, khung hình càng được giữ cho giống nhau thì càng có nhiều khung hình có thể được đặt trong một nhóm mà không gây ra các lỗi có thể nhìn thấy bằng mắt thường. Có thể có rất nhiều khung hình P và B giữa mỗi khung hình I, hoặc chỉ hai hoặc ba. Đôi khi người dùng cũng có thể thiết đặt bao nhiêu khung hình mà các nhóm có thể chứa, mang đến nhiều kiểm soát về mặt kỹ thuật hơn trên hình ảnh.

Nhiều codec dùng nén liên khung, chẳng hạn như H.264, MPEG-4, AVCHD, và XDCAM. Nén liên khung rất hấp dẫn đối với các codec ghi, vì chúng cho phép bạn lưu nhiều cảnh quay hơn trên một thiết bị lưu trữ. Điều này cho phép bạn quay trong thời gian dài hơn mà không cần phải đổi thẻ.

Nguồn: Frame.io

Pixel Factory sưu tầm và biên dịch

Tags:
Share: