رمزگذاری VP9 HDR
ویدئو با محدوده دینامیکی بالا (HDR) یک فناوری در حال بلوغ است. امروزه تعدادی استاندارد وجود دارد که به تدریج هماهنگ می شوند.
برای یک تصویر ثابت از تکامل ویدیوی HDR به مقاله ویکیپدیا با برد دینامیکی بالا مراجعه کنید .
از FFmpeg میتوان به همراه VP9 برای (1) فشردهسازی منابع HDR به خروجیهای محدوده دینامیکی استاندارد (SDR) یا (2) برای بستهبندی مجدد منبع HDR در قالبهای سازگار با وب HDR استفاده کرد.
منابع ورودی
در حال حاضر، هنگام رمزگذاری HDR با VP9، هر کدک با عمق بیت بالا (10 بیتی) که توسط FFmpeg پشتیبانی می شود، می تواند به عنوان ورودی استفاده شود (به عنوان مثال، VP9 Profile 2 و 3، H.264 (10 بیت)، DNxHR، HEVC، ProRes ، و همکاران). همچنین مقاله پشتیبانی YouTube آپلود ویدیوهای محدوده دینامیکی بالا (HDR) را ببینید.
دسترسی خروجی رمزگذاری شده:
در حال حاضر و به طور کلی، دستگاه های هدف پشتیبانی شده شامل هر دستگاهی است که می تواند VP9 Profile 2 را رمزگشایی کند و به یک صفحه نمایش HDR خروجی دهد.
- تلویزیون با قابلیت Chromecast Ultra + HDR
- Chrome 64 Canary در Windows 10 Fall Creators Update، با پرچم HDR روشن است. (این یک ابزار اشکال زدایی خوب است).
- هر تلویزیون HDR با نمایه VP9 2
- همه مدلهای سامسونگ 2017 HDR ( لیست flatpanelshd.com ) و مدلهای 2016 که با «KS» شروع میشوند
- همه مدل های HDR 2017 ال جی (همچنین برخی از مدل های LG G6 2016)
- در تلفن همراه، دستگاههایی که از رمزگشایی 10 بیتی HDR VP9 Profile 2 با شتاب سختافزاری پشتیبانی میکنند ( Meizu Pro 7 )
- UHD Bluray محصول 2017
تنظیمات خط فرمان FFmpeg برای فعال کردن VP9 Profile 2 و HDR EOTFs
FFmpeg شما باید با پشتیبانی 10 بیتی (یا حتی 12 بیتی) ساخته شده باشد.
در مثال های زیر از یک ffmpeg
ساخته شده به صورت ایستا با پشتیبانی 10 بیتی استفاده می کنیم. میتوانید از اسکریپت ساخت ما برای ساختن خود استفاده کنید، یا از راهنماییهای سایت FFmpeg پیروی کنید.
در زیر یک خط فرمان قابل استفاده FFmpeg برای رمزگذاری HDR به استانداردهای SMPTE 2084 (PQ EOTF) با 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
بررسی پارامترهای کلیدی معرفی شده در اینجا:
ffmpeg | ساخت استاتیک با پشتیبانی 10 بیتی |
---|---|
-pass 1 | HDR نیاز به رمزگذاری ۲ پاس دارد. در این مثال، پاس اول به /dev/null خروجی می شود و در طول پاس دوم در حافظه پردازش می شود. |
-pix_fmt yuv420p10le | فرمت پیکسلی 10 بیتی YUV 4:2:0 را تنظیم می کند |
-color_primaries 9 | مجموعه BT2020 برای جزئیات بیشتر به صفحه 5 و 6 این سند مراجعه کنید. |
-color_trc 16 | 16 مجموعه ویژگی های انتقال به SMPTE 2084. PQ 18 مجموعه ویژگی های انتقال SMPTE 2086 HLG |
-colorspace 9 | colorspace "ضریب_ماتریس" است. این باید مطابق با نحوه تسلط بر محتوا تنظیم شود. (به عنوان مثال، bt709، bt2020_ncl). در این مثال برای bt2020_ncl باید 9 باشد. برای ارجاع بیشتر به صفحه 12 این سند مراجعه کنید |
-color_range 1 | محدوده رنگ ( 0 = نامشخص، 1 = mpeg/studio/tv، 2 = jpeg/full/pc) |
-profile:v 2 | برای HDR، یک نمایه یا 2 یا 3 مورد نیاز است. |
-vcodec libvpx-vp9 | از رمزگذار VP9 استفاده کنید. |
نمونه کد می کند
نمونههای زیر همگی از فایل منبع strobe_scientist.mkv استفاده میکنند
به عنوان یک نکته کلی در مورد نرخ بیت با رمزگذاری HDR، نرخ بیت 25 تا 30 درصد بالاتر از رمزگذاری SDR 8 بیتی معادل توصیه می شود. نمونه ها معمولاً 18 مگابیت در ثانیه را هدف قرار می دهند. نتایج HDR خوبی را می توان با نرخ بیت 12 مگابیت در ثانیه با تنظیم بهینه به دست آورد.
کدها بر روی یک سیستم لینوکس اوبونتو با مشخصات زیر انجام شده است:
- پردازنده: 4x Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
- حافظه (رم): 8060 مگابایت (1492 مگابایت استفاده شده)
- گرافیک: Intel HD Graphics 530 (Skylake GT2)
- سیستم عامل: اوبونتو 16.04 LTS
تبدیل به YUV 4:2:0 10 بیتی PQ
مثال A: 6 مگابیت در ثانیه 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
- فایل خروجی: 2pass_HDR_strobe_scientist_6Mbps-static.webm
- زمان رمزگذاری: 142 متر 30 ثانیه
- حجم فایل روی دیسک: 51.2 مگابایت
مثال B1: 18Mbps 4k 2-pass
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
- فایل خروجی: 2pass_HDR_strobe_scientist_18Mbps-static.webm
- زمان رمزگذاری: 213m32s
- حجم فایل روی دیسک: 161 مگابایت
مثال B2: 18Mbps 1080p 2-pass
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
- فایل خروجی: 1080_2pass_HDR_strobe_scientist_18Mbps-static.webm
- زمان رمزگذاری: 113 m9s
- حجم فایل روی دیسک: 160 مگابایت
تبدیل HDR به SDR با جدول جستجو (LUT)
برای تبدیل HDR به SDR، رمزگذار باید بفهمد که چگونه سطوح روشنایی و رنگها را به فضای رنگی کوچکتر BT.709 و محدوده روشنایی غیر HDR ترسیم کند. برای بهترین نتایج، میتوان از یک LUT که نحوه انجام آن نقشهبرداری را توضیح میدهد - معمولاً مختص محتوا است. مثال های C و D نحوه استفاده از LUT را نشان می دهد. ما از bt2020_to_bt709_example.cube استفاده کردیم
مثال C: 18 مگابیت بر ثانیه 4k HDR به SDR با 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
- فایل خروجی: SDR_strobe_scientist_18Mbps-static.webm
- زمان رمزگذاری: 124m23s
- حجم فایل روی دیسک: 165 مگابایت
HLG را به VP9 HLG10 10 بیتی PQ تبدیل کنید
به منبع HLG نیاز دارد. ما از فایل ورودی strobe_scientist_hlg.mkv استفاده کردیم
مثال D: 18Mbps 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
- فایل خروجی: HLG_HDR_strobe_scientist_18Mbps-static.webm
- زمان رمزگذاری: 186m10s
- حجم فایل روی دیسک: 165 مگابایت
خلاصه
فایل های خروجی اندازه های متفاوتی دارند. ورودی 4.3 گیگابایت بود.
مثال | خروجی هدف | اندازه روی دیسک | زمان را رمزگذاری کنید |
---|---|---|---|
آ | 6Mbps 4k HDR بدون مقیاس | 51.2 مگابایت | 142 متر |
B1 | HDR بدون مقیاس 18 مگابیت بر ثانیه 4k | 161 مگابایت | 213 متر |
B2 | 18 مگابیت در ثانیه 1080 HDR مقیاس شده | 160 مگابایت | 113 متر |
سی | 18 مگابیت بر ثانیه HDR تا SDR بدون مقیاس | 165 مگابایت | 124 متر |
D | تبدیل 18 مگابیت بر ثانیه HLG | 165 مگابایت | 168 متر |
توجه داشته باشید که رمزگذاری 2-pass برای HDR توصیه می شود، زیرا 1-pass می تواند در تنظیمات خاصی متفاوت باشد.
ابزارهای مورد نیاز برای سیگنال دهی HDR در خروجی WebM و MP4 (ابزارهای خط فرمان Matroska)
در زمان نگارش، FFmpeg مکانیزمی را برای مشخص کردن ابرداده استاتیک SMPTE 2086 در WebM/MKV ارائه نمیکند، اگرچه زمانی که جریان حاوی آن باشد، آن را از یک جریان ورودی منتشر میکند.
ابزار mkvmerge ، بخشی از mkvtoolnix ، می تواند برای درج یا اصلاح این ابرداده در صورت نیاز برنامه شما استفاده شود.
در زیر نمونه ای از درج ابرداده HDR در یکی از فایل های ایجاد شده در بالا آورده شده است. این به ویژه برای آماده سازی محتوای HDR برای آپلود در 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
این مثال فایل HDR_strobe_scientist_18Mbps.mkv را در 0.6 ثانیه تولید می کند.