VP9 HDR Kodlama

Yüksek Dinamik Aralıklı (HDR) videolar olgunluğa ulaşmış bir teknolojidir. Günümüzde aşamalı olarak uyumlulaştırma standartları vardır.

HDR video evriminin bakımlı bir resmi için Yüksek dinamik aralıklı video WikiPedia makalesine bakın.

FFmpeg, (1) HDR kaynaklarını Standart Dinamik Aralık (SDR) çıkışlarına sıkıştırmak veya (2) HDR kaynağını HDR web dostu biçimlerde yeniden paketlemek için her iki yöntemle de VP9 ile birlikte kullanılabilir.

Giriş kaynakları

Şu anda VP9 ile HDR kodlaması yapılırken, FFmpeg tarafından desteklenen tüm yüksek derinlik (10 bit) codec'leri giriş olarak kullanılabilir (örneğin, VP9 Profil 2 ve 3, H.264 (10 bit), DNxHR, HEVC, ProRes vb.). Ayrıca, Yüksek Dinamik Aralıklı (HDR) videolar yükleme başlıklı YouTube destek makalesine göz atın.

Kodlanmış çıkış erişimi:

Şu anda genel olarak, desteklenen hedef cihazlar VP9 Profil 2'nin kodunu çözebilen ve HDR ekrana çıkabilen tüm cihazları içerir.

  • Chromecast Ultra + HDR özellikli TV
  • Windows 10 Sonbahar İçerik Üreticileri Güncellemesi'nde, HDR işareti açık olan Chrome 64 Canary. (Bu, iyi bir hata ayıklama aracıdır).
  • VP9 Profil 2 ile tüm HDR TV'ler
    • Tüm Samsung 2017 HDR modelleri (flatpanelshd.com listesi) ve 2016 modelleri &quot"KS
    • Tüm LG 2017 HDR modelleri (ayrıca bazı 2016 LG G6 modelleri)
    • Mobil cihazlarda, donanım hızlandırılmış VP9 Profil 2 10 bit HDR kod çözmeyi destekleyen cihazlar (Meizu Pro 7)
    • 2017 tarihli UHD Bluray

VP9 Profil 2 ve HDR EOTF'leri etkinleştirmek için FFmpeg komut satırı ayarları

FFmpeg'nizin 10 bit (hatta 12 bit) destek ile oluşturulmuş olması gerekir.

Aşağıdaki örneklerde, 10 bit destekle statik olarak oluşturulmuş bir ffmpeg kullanılmıştır. Kendi komut dosyanızı oluşturmak için oluşturma komut dosyamızı kullanabilir veya FFmpeg sitesindeki kılavuzu uygulayabilirsiniz.

Aşağıda, VP9 ile SMPTE 2084 (PQ EOTF) standartlarında HDR kodlaması için kullanılabilir bir FFmpeg komut satırı verilmiştir:

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

Burada sunulan temel parametrelerin dökümü:

ffmpeg 10 bit destekli statik yapı
-pass 1 HDR için 2 geçişli kodlama gerekir. Bu örnekte ilk geçiş, /dev/null çıkışına aktarılır ve ikinci geçiş sırasında bellekte işlenir.
-pix_fmt yuv420p10le YUV 4:2:0 10 bit piksel biçimini ayarlar
-color_primaries 9 BT2020 ayarlar. Daha ayrıntılı bilgi için bu dokümanın 5. ve 6. sayfasına bakın.
-color_trc 16 16, Aktarım Özelliklerini SMPTE 2084 olarak ayarlar. PQ 18, Aktarım Özellikleri SMPTE 2086 HLG'yi ayarlar
-colorspace 9 colorspace, matris_ katsayılarıdır. Bu, içeriğin ana kopyalanma şekliyle tutarlı olarak ayarlanmalıdır. (ör. bt709, bt2020_ncl). Bu örnekte, bt2020_ncl için 9 olmalıdır. Daha fazla bilgi için bu dokümanın 12. sayfasına bakın.
-color_range 1 Renk aralığı (0 = belirtilmemiş, 1 = mpeg/studio/tv, 2 = jpeg/full/pc)
-profile:v 2 HDR için 2 veya 3 profili gerekir.
-vcodec libvpx-vp9 VP9 kodlayıcıyı kullanın.

Örnek kodlamalar

Aşağıdaki örneklerin tümü strobe_scientist.mkv kaynak dosyasını kullanır

HDR kodlamasına sahip bit hızları hakkında genel bir not olarak, 8 bit eş değer SDR kodlamaya göre% 25-30 daha yüksek bit hızı önerilir. Örnekler genellikle 18 Mb/sn'yi hedefler. En iyi HDR sonuçları, optimum ayara sahip 12 Mb/sn bit hızlarıyla elde edilebilir.

Kodlamalar, aşağıdaki spesifikasyonlarla Ubuntu Linux sisteminde gerçekleştirildi:

  • İşlemci: 4,20 GHz'te 4x Intel(R) Core(TM) i5-6500 CPU
  • Bellek (RAM): 8.060 MB (1.492 MB kullanılır)
  • Grafik: Intel HD Graphics 530 (Skylake GT2)
  • İşletim sistemi: Ubuntu 16.04 LTS

YUV'ye 4:2:0 10 bit PQ'ya dönüştür

Örnek A: 6 Mb/sn 4k 2 geçiş
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
Örnek B1: 18 Mb/sn 4k 2 geçiş
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
Örnek B2: 18 Mb/sn 1080p 2 geçiş
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

Arama tablosu (LUT) ile HDR'yi SDR'ye dönüştürme

HDR'ye SDR'ye dönüştürme işlemi için kod dönüştürücünün parlaklık seviyelerini ve renklerini daha küçük BT.709 renk alanı ve HDR olmayan parlaklık aralığıyla nasıl eşleştireceğini anlaması gerekir. En iyi sonuçları elde etmek için bu eşlemenin nasıl gerçekleştirileceğini (genellikle içeriğe özgü) açıklayan bir LUT kullanılabilir. C ve D örnekleri, LUT'nin nasıl kullanılacağını gösteriyor. bt2020_to_bt709_example.cube kullandık

Örnek C: LUT ile 18 Mb/sn 4k HDR - SDR
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

HLG'yi VP9 HLG10 10 bit PQ'ya dönüştürme

HLG kaynağı gerekir. strobe_scientist_hlg.mkv şeklindeki giriş dosyasını kullandık.

Örnek D: 18 Mb/sn 4k 2 Geçişli 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

Özet

Çıkış dosyalarının boyutları değişiklik gösterir. Giriş 4,3 GB'tı.

Örnek Hedef Çıkış Diskteki Boyut Kodlama Zamanı
A 6 Mb/sn 4k Ölçeklenmemiş HDR 51,2 MB 142m
B1 18 Mb/sn 4k ölçeklendirilmemiş HDR 161MB 213m
B2 18 Mb/sn 1080 ölçeklendirilmiş HDR 160MB 113m
C 18 Mb/sn HDR - SDR ölçeklendirilmemiş 165MB 124m
D 18 Mb/sn HLG dönüşümü 165MB 168m

1 geçiş değeri bazı yapılandırmalarda değişebileceğinden, HDR için 2 geçişli kodlama kullanılmasının önerildiğini unutmayın.

WebM ve MP4 çıkışında HDR sinyali için gerekli araçlar (Matroska komut satırı araçları)

Yazma sırasında FFmpeg, WebM/MKV'de SMPTE 2086 statik meta verilerini belirtmek için bir mekanizma sağlamaz, ancak akış içerdiğinde bunu bir giriş akışından yayar.

mkvtoolnix'in bir parçası olan mkvmerge aracı, uygulamanız gerektiriyorsa bu meta veriyi eklemek veya değiştirmek için kullanılabilir.

Aşağıda, yukarıda oluşturulan dosyalardan birine HDR meta verilerinin eklenmesine dair bir örnek verilmiştir. Bu, özellikle HDR içeriğini YouTube'a yüklenmeye hazırlamak için uygundur.

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

Bu örnek, 0,6 saniye içinde HDR_strobe_scientist_18Mbps.mkv dosyasını üretir.