Mã hóa HDR9

Video Dải động cao (HDR) là công nghệ hoàn thiện. Ngày nay, có một số tiêu chuẩn đồng bộ hóa.

Để hiểu rõ quá trình phát triển video HDR, hãy xem bài viết Video dải động cao trên WikiPedia.

Bạn có thể sử dụng FFmpeg cùng với VP9 để cả (1) nén nguồn HDR thành đầu ra Dải động chuẩn (SDR) hoặc (2) để đóng gói lại nguồn HDR thành định dạng phù hợp với web HDR.

Nguồn đầu vào

Hiện tại, khi mã hóa HDR bằng VP9, bạn có thể sử dụng bất kỳ codec nào có độ sâu bit cao (10 bit) do FFmpeg hỗ trợ (ví dụ: Cấu hình VP9 2 và 3, H.264 (10 bit), DNxHR, HEVC, ProRes, et al). Xem thêm bài viết hỗ trợ của YouTube Tải video có Dải động cao (HDR) lên.

Phạm vi tiếp cận đầu ra được mã hóa:

Hiện tại và nói chung, các thiết bị mục tiêu được hỗ trợ bao gồm bất kỳ thiết bị nào có thể giải mã Hồ sơ VP9 2 và xuất ra màn hình HDR.

  • Chromecast Ultra + HDR hỗ trợ TV
  • Bản cập nhật Chrome 64 Canary trên Windows 10 Fall Creators (đã bật cờ HDR). (Đây là một công cụ gỡ lỗi tốt).
  • Những TV HDR có cấu hình VP9 2
    • Tất cả các kiểu máy Samsung 2017 HDR (danh sách phẳngpanelshd.com) và các mẫu năm 2016 bắt đầu bằng "KS"
    • Tất cả các kiểu máy LG 2017 HDR (cũng một số mẫu LG G6 2016)
    • Trên thiết bị di động, các thiết bị hỗ trợ Hồ sơ VP9 tăng tốc phần cứng 2 Giải mã HDR 10 bit (Meizu Pro 7)
    • UHD Bluray từ năm 2017

Chế độ cài đặt dòng lệnh FFmpeg để bật Hồ sơ VP9 2 và EOTF

FFmpeg của bạn cần được xây dựng với dịch vụ hỗ trợ 10 bit (hoặc thậm chí 12 bit).

Trong các ví dụ bên dưới, chúng ta dùng ffmpeg được tạo tĩnh với sự hỗ trợ 10 bit. Bạn có thể sử dụng tập lệnh bản dựng của chúng tôi để tự tạo hoặc làm theo hướng dẫn trên trang web FFmpeg.

Sau đây là dòng lệnh FFmpeg có thể sử dụng để mã hóa HDR theo tiêu chuẩn SMPTE 2084 (PQ EOTF) với VP9:

ffmpeg -i strobe_scientist_18Mbps.webm -b:v 18000000 -pass 1 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
  -maxrate 26800000 -minrate 8040000 -profile:v 2 -vcodec libvpx-vp9 /dev/null && \
   ffmpeg -i strobe_scientist_18Mbps.webm -b:v 18000000 -pass 2 \
   -pix_fmt yuv420p10le \
   -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
   -maxrate 26800000 -minrate 8040000 -profile:v 2 -vcodec libvpx-vp9 \
   strobe_scientist_18Mbps.webm

Chia nhỏ các thông số chính được giới thiệu ở đây:

ffmpeg Bản dựng tĩnh có hỗ trợ 10 bit
-pass 1 HDR yêu cầu mã hóa 2 mật khẩu. Trong ví dụ này, lần chuyển đầu tiên được xuất vào /dev/null và được xử lý trong bộ nhớ trong lần chuyển thứ hai.
-pix_fmt yuv420p10le Đặt định dạng YUV 4:2:0 10 bit
-color_primaries 9 Đặt BT2020 Xem trang 5 và 6 của tài liệu này để biết thêm thông tin chi tiết.
-color_trc 16 16 đặt Đặc tính chuyển thành SMPTE 2084. PQ 18 đặt Đặc tính truyền tải SMPTE 2086 HLG
-colorspace 9 colorspace là "matrix_coefficiencys." Điều này phải được đặt nhất quán với cách sử dụng nội dung. (ví dụ: bt709, bt2020_ncl). Trong ví dụ này, giá trị đó phải là 9 cho bt2020_ncl. Để tham khảo thêm, hãy xem trang 12 của tài liệu này
-color_range 1 Dải màu (0 = chưa chỉ định, 1 = mpeg/studio/tv, 2 = jpeg/full/pc)
-profile:v 2 Đối với HDR, phải có hồ sơ hoặc 2 hoặc 3.
-vcodec libvpx-vp9 Sử dụng bộ mã hóa VP9.

Mã hóa mẫu

Các ví dụ sau đều sử dụng tệp nguồn strobe_scientist.mkv

Lưu ý chung về tốc độ bit với mã hóa HDR, nên sử dụng tốc độ bit cao hơn 25-30% so với mã hóa SDR 8 bit tương đương. Ví dụ thường nhắm mục tiêu 18 Mb/giây. Kết quả HDR tốt có thể đạt được với tốc độ bit 12 Mb/giây bằng cách điều chỉnh tối ưu.

Các mã hóa được thực hiện trên hệ thống Ubuntu Linux với thông số kỹ thuật sau:

  • Bộ xử lý: CPU 4x Intel(R) Core(TM) i5-6500 @ 3,20 GHz
  • Bộ nhớ (RAM): 8060 MB (đã sử dụng 1492MB)
  • Đồ họa: Intel HD Graphics 530 (Skylake GT2)
  • Hệ điều hành: Ubuntu 16.04 LTS

Chuyển đổi sang YUV 4:2:0 10-bit PQ

Ví dụ A: 6 Mbps 4k 2 Pass
ffmpeg -y -report -i strobe_scientist.mkv -b:v 6000000 -speed 4 -pass 1 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
  -maxrate 8000000 -minrate 4000000 \
  -profile:v 2 -vcodec libvpx-vp9 -f webm /dev/null && \
  ffmpeg -y -report -i strobe_scientist.mkv -b:v 6000000 -pass 2 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
  -maxrate 8000000 -minrate 4000000 \
  -profile:v 2 -vcodec libvpx-vp9 \
  2pass_HDR_strobe_scientist_6Mbps-static.webm
Ví dụ B1: 18 Mb/giây
ffmpeg -y -report -i strobe_scientist.mkv -b:v **18000000** -speed 4 -pass 1 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
  -maxrate **20800000** -minrate **15040000** \
  -profile:v 2 -vcodec libvpx-vp9 -f webm /dev/null && \
  ffmpeg -y -report -i strobe_scientist.mkv -b:v 18000000 -pass 2 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
  -maxrate **20800000** -minrate **15040000** \
  -profile:v 2 -vcodec libvpx-vp9 \
  2pass_HDR_strobe_scientist_18Mbps-static.webm
Ví dụ B2: 18 Mb/giây 1080p
ffmpeg -y -report -i strobe_scientist.mkv -b:v 18000000 -speed 4 -pass 1 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
  -maxrate 20800000 -minrate 15040000 \
  -profile:v 2 **-vf ****scale=-1:1080**** **-vcodec libvpx-vp9 \
  -f webm /dev/null && \
  ffmpeg -y -report -i strobe_scientist.mkv -b:v 18000000 -pass 2 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
  -maxrate 20800000 -minrate 15040000 \
  -profile:v 2 **-vf ****scale=-1:1080**** **-vcodec libvpx-vp9 \
  1080_2pass_HDR_strobe_scientist_18Mbps-static.webm

Chuyển đổi HDR sang SDR bằng bảng tra cứu (LUT)

Để chuyển đổi HDR sang SDR, bạn phải sử dụng bộ chuyển mã để hiểu cách liên kết mức độ sáng và màu sắc cho hệ màu BT.709 nhỏ hơn và phạm vi độ sáng không phải là HDR. Để có kết quả tốt nhất, bạn có thể sử dụng LUT mô tả cách thực hiện việc liên kết đó – thường dành riêng cho nội dung. Ví dụ C và D cho thấy cách sử dụng LUT. Chúng tôi sử dụng bt2020_to_bt709_example.cube

Ví dụ C: 18 Mbps 4k HDR sang SDR với LUT
ffmpeg -i strobe_scientist.mkv -y -b:v 18000000 -speed 4 -pass 1 \
  -pix_fmt yuv420p \
  -color_primaries 1 -color_trc 1 -colorspace 1 -color_range 1 \
  -maxrate 26800000 -minrate 8040000 -profile:v 0 \
  -vf scale=-1:-1:in_color_matrix=bt2020,format=rgb48,lut3d=bt2020_to_bt709_example.cube,scale=-1:-1:out_color_matrix=bt709 \
  -vcodec libvpx-vp9 -f webm /dev/null && \
  ffmpeg -i strobe_scientist.mkv -y -b:v 18000000 -pass 2 \
  -pix_fmt yuv420p \
  -color_primaries 1 -color_trc 1 -colorspace 1 -color_range 1 \
  -maxrate 26800000 -minrate 8040000 -profile:v 0 \
  -vf scale=-1:-1:in_color_matrix=bt2020,format=rgb48,lut3d=bt2020_to_bt709_example.cube,scale=-1:-1:out_color_matrix=bt709 \
  -vcodec libvpx-vp9 -f webm SDR_strobe_scientist_18Mbps-static.webm

Chuyển đổi HLG thành VP9 HLG10 PQ 10 bit

Yêu cầu nguồn HLG. Chúng tôi dùng tệp đầu vào strobe_scientist_hlg.mkv

Ví dụ D: 18 Mbps 4k 2-Pass HLG
ffmpeg -y -i strobe_scientist_hlg.mkv -b:v 18000000 -pass 1 -speed 4 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 18 -colorspace 9 -color_range 1 \
  -maxrate 26800000 -minrate 8040000 \
  -profile:v 2 -vcodec libvpx-vp9 -f webm /dev/null && \
  ffmpeg -y -i strobe_scientist_hlg.mkv -b:v 18000000 -pass 2 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 18 -colorspace 9 -color_range 1 \
  -maxrate 26800000 -minrate 8040000 \
  -profile:v 2 -vcodec libvpx-vp9 \
  HLG_HDR_strobe_scientist_18Mbps-static.webm

Tóm tắt

Các tệp đầu ra có kích thước khác nhau. Đầu vào là 4,3GB.

Ví dụ: Đầu ra mục tiêu Kích thước trên ổ đĩa Thời gian mã hóa
A HDR 4M không chia tỷ lệ 6Mbps 51,2 MB 142 phút
B1 HDR 18 Mb/giây không chia tỷ lệ 161MB 213 phút
B2 HDR 18Mbps theo tỷ lệ 160MB 113 phút
C Không thể mở rộng quy mô 18 Mbps HDR sang SDR 165MB 124 phút
D Chuyển đổi HLG 18 Mbps 165MB 168 phút

Xin lưu ý rằng bạn nên sử dụng tính năng mã hóa 2 mật khẩu cho HDR, vì 1-pass có thể thay đổi trong một số cấu hình nhất định.

Các công cụ cần thiết để báo hiệu HDR trong đầu ra WebM và MP4 (công cụ dòng lệnh Matroska)

Vào thời điểm viết, FFmpeg không cung cấp cơ chế chỉ định siêu dữ liệu tĩnh SMPTE 2086 trong WebM/MKV, mặc dù cơ chế này sẽ truyền siêu dữ liệu từ luồng đầu vào khi luồng chứa siêu dữ liệu đó.

Bạn có thể sử dụng công cụ mkvmerge của mkvtoolnix để chèn hoặc sửa đổi siêu dữ liệu này nếu ứng dụng của bạn yêu cầu.

Sau đây là ví dụ về cách chèn siêu dữ liệu HDR vào một trong các tệp tạo ở trên. Phương pháp này đặc biệt phù hợp với việc chuẩn bị nội dung HDR để tải lên YouTube.

mkvmerge \
  -o HDR_strobe_scientist_18Mbps.mkv\
  --colour-matrix 0:9 \
  --colour-range 0:1 \
  --colour-transfer-characteristics 0:16 \
  --colour-primaries 0:9 \
  --max-content-light 0:1000 \
  --max-frame-light 0:300 \
  --max-luminance 0:1000 \
  --min-luminance 0:0.01 \
  --chromaticity-coordinates 0:0.68,0.32,0.265,0.690,0.15,0.06 \
  --white-colour-coordinates 0:0.3127,0.3290 \
  HDR_strobe_scientist_18Mbps.webm

Ví dụ này tạo tệp HDR_strobe_scientist_18Mbps.mkv, trong 0,6 giây.