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
- Çıkış dosyası: 2pass_HDR_strobe_scientist_6Mbps-static.webm
- Kodlama süresi: 142 dk. 30 sn.
- Diskteki dosya boyutu: 51,2 MB
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
- Çıkış dosyası: 2pass_HDR_strobe_scientist_18Mbps-static.webm
- Kodlama süresi: 213 dk. 32 sn.
- Disk üzerindeki dosya boyutu: 161 MB
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
- Çıkış dosyası: 1080_2pass_HDR_strobe_scientist_18Mbps-static.webm
- Kodlama süresi: 113 dk. 9 sn.
- Diskteki dosya boyutu: 160 MB
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
- Çıkış dosyası: SDR_strobe_scientist_18Mbps-static.webm
- Kodlama süresi: 124 dk. 23 sn.
- Diskteki dosya boyutu: 165 MB
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
- Çıkış dosyası: HLG_HDR_strobe_scientist_18Mbps-static.webm
- Kodlama süresi: 186 dk 10 sn
- Diskteki dosya boyutu: 165 MB
Ö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.