VP9 HDR kodlama

Yüksek Dinamik Aralıklı (HDR) video, gelişmekte olan bir teknolojidir. Günümüzde, kademeli olarak uyum sağlayan bir dizi standart bulunmaktadır.

HDR video evrimiyle ilgili güncel bir resim için Wikipedia'daki High-dynamic-range video (Yüksek Dinamik Aralıklı Video) makalesine bakın.

FFmpeg, VP9 ile birlikte kullanılarak (1) HDR kaynaklarını Standart Dinamik Aralık (SDR) çıkışlarına sıkıştırabilir veya (2) HDR kaynaklarını HDR web dostu biçimlere yeniden paketleyebilir.

Giriş kaynakları

Şu anda VP9 ile HDR kodlanırken FFmpeg tarafından desteklenen tüm yüksek bit derinliğine (10 bit) sahip codec'ler giriş olarak kullanılabilir (ör. VP9 Profil 2 ve 3, H.264 (10 bit), DNxHR, HEVC, ProRes vb.). Ayrıca YouTube Destek Makalesi Yüksek Dinamik Aralıklı (HDR) videolar yükleme başlıklı makaleye de göz atın.

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

Şu anda ve genel olarak, desteklenen hedef cihazlar arasında VP9 Profil 2'yi çözebilen ve HDR ekrana çıkış verebilen tüm cihazlar yer alır.

  • Chromecast Ultra + HDR özellikli TV
  • Windows 10 Fall Creators Update'te HDR işareti etkinleştirilmiş Chrome 64 Canary. (Bu, iyi bir hata ayıklama aracıdır.)
  • VP9 Profile 2'ye sahip herhangi bir HDR TV
    • Tüm Samsung 2017 HDR modelleri (flatpanelshd.com listesi) ve "KS" ile başlayan 2016 modelleri
    • Tüm LG 2017 HDR modelleri (bazı 2016 LG G6 modelleri de dahil)
    • Mobil cihazlarda, donanım hızlandırmalı VP9 Profili 2 10 bit HDR kod çözmeyi destekleyen cihazlar (Meizu Pro 7)
    • 2017'den itibaren UHD Blu-ray

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

FFmpeg'niz 10 bit (hatta 12 bit) destekli olarak oluşturulmuş olmalıdır.

Aşağıdaki örneklerde, 10 bit desteği olan statik olarak oluşturulmuş bir ffmpeg kullanıyoruz. Kendi komut dosyanızı oluşturmak için build komut dosyamızı kullanabilir veya FFmpeg sitesindeki yönergeleri uygulayabilirsiniz.

Aşağıda, VP9 ile SMPTE 2084 (PQ EOTF) standartlarına göre 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 tanıtılan temel parametreleri inceleyelim:

ffmpeg 10 bit desteğiyle statik derleme
-pass 1 HDR için 2 geçişli kodlama gerekir. Bu örnekte, ilk geçiş /dev/null'ye çıkış olarak verilir 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 Kümeler BT2020 Daha fazla ayrıntı için bu belgenin 5. ve 6. sayfalarına bakın.
-color_trc 16 16, aktarım özelliklerini SMPTE 2084 olarak ayarlar. PQ 18 Aktarım Özellikleri SMPTE 2086 HLG olarak ayarlanır.
-colorspace 9 colorspace, "matrix_coefficients" değeridir. Bu ayar, içeriğin nasıl hazırlandığına uygun şekilde belirlenmelidir. (ör. bt709, bt2020_ncl). Bu örnekte, bt2020_ncl için 9 olmalıdır. Daha fazla bilgi için bu belgenin 12. sayfasına bakın.
-color_range 1 Renk aralığı (0 = belirtilmemiş, 1 = mpeg/stüdyo/tv, 2 = jpeg/tam/pc)
-profile:v 2 HDR için bir profil veya 2 ya da 3 gerekir.
-vcodec libvpx-vp9 VP9 kodlayıcıyı kullanın.

Örnek kodlamalar

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

HDR kodlamayla ilgili bit hızları hakkında genel bir not olarak, eşdeğer 8 bit SDR kodlamaya kıyasla% 25-30 daha yüksek bir bit hızı önerilir. Örnekler genellikle 18 Mb/sn'yi hedefler. İyi HDR sonuçları, optimum ayarlamayla 12 Mb/sn bit hızlarında elde edilebilir.

Kodlamalar, aşağıdaki özelliklere sahip bir Ubuntu Linux sisteminde gerçekleştirildi:

  • İşlemci: 4x Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
  • Bellek (RAM): 8060 MB (1492 MB kullanılıyor)
  • Grafik: Intel HD Graphics 530 (Skylake GT2)
  • OS: Ubuntu 16.04 LTS

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

A örneği: 6 Mbps 4K 2 geçişli
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
B1 örneği: 18 Mbps 4k 2 geçişli
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
B2 örneği: 18 Mbps 1080p 2 geçişli
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

Başvuru çizelgesi (LUT) ile HDR'yi SDR'ye dönüştürme

HDR'yi SDR'ye dönüştürmek için dönüştürücünün parlaklık seviyelerini ve renkleri daha küçük BT.709 renk alanına ve HDR olmayan parlaklık aralığına nasıl eşleyeceğini anlaması gerekir. En iyi sonuçları elde etmek için bu eşlemenin nasıl yapılacağını açıklayan bir LUT (genellikle içeriğe özgü) kullanılabilir. C ve D örneklerinde LUT'nin nasıl kullanılacağı gösterilmektedir. bt2020_to_bt709_example.cube dosyasını 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ğı gerektirir. strobe_scientist_hlg.mkv giriş dosyasını kullandık.

Örnek D: 18 Mbps 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ı farklıdır. Giriş 4,3 GB'tı.

Örnek Hedef Çıkış Disk üzerindeki boyut Kodlama Süresi
A 6 Mb/sn 4K Ölçeklendirilmemiş HDR 51,2 MB 142 milyon
B1 18 Mb/sn 4K ölçeklenmemiş HDR 161MB 213m
B2 18 Mb/sn 1080 ölçekli HDR 160MB 113 milyon
C 18 Mb/sn HDR - SDR ölçeklendirilmemiş 165MB 124m
D 18 Mbps HLG dönüştürme 165MB 168 milyon

Tek geçişli kodlama bazı yapılandırmalarda değişiklik gösterebileceğinden HDR için 2 geçişli kodlamanın önerildiğini unutmayın.

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

Bu makalenin yazıldığı sırada FFmpeg, WebM/MKV'de SMPTE 2086 statik meta verilerini belirtmek için bir mekanizma sağlamıyordu. Ancak akışta bu meta veriler varsa giriş akışından yayılıyordu.

mkvmerge aracı, uygulamanız gerektiriyorsa bu meta verileri eklemek veya değiştirmek için kullanılabilir.

Aşağıda, yukarıda oluşturulan dosyalardan birine HDR meta verileri ekleme örneği verilmiştir. Bu format, özellikle YouTube'a yüklemek üzere HDR içerik 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 örnekte, 0,6 saniyede HDR_strobe_scientist_18Mbps.mkv dosyası oluşturulur.