VP9 HDR এনকোডিং

হাই ডায়নামিক রেঞ্জ (HDR) ভিডিও একটি পরিপক্ক প্রযুক্তি। আজ অনেকগুলি ধীরে ধীরে-সুসংগত মান রয়েছে৷

HDR ভিডিও বিবর্তনের একটি রক্ষণাবেক্ষণের জন্য উইকিপিডিয়া নিবন্ধটি দেখুন হাই-ডাইনামিক-রেঞ্জ ভিডিও

FFmpeg VP9 এর সাথে উভয়ই ব্যবহার করা যেতে পারে (1) HDR সোর্সকে স্ট্যান্ডার্ড ডায়নামিক রেঞ্জ (SDR) আউটপুটগুলিতে সংকুচিত করতে বা (2) HDR সোর্সকে HDR ওয়েব-ফ্রেন্ডলি ফর্ম্যাটে পুনরায় প্যাকেজ করতে।

ইনপুট উত্স

বর্তমানে, VP9 এর সাথে HDR এনকোড করার সময়, FFmpeg দ্বারা সমর্থিত যেকোনো উচ্চ বিট গভীরতা (10-বিট) কোডেক ইনপুট হিসাবে ব্যবহার করা যেতে পারে (উদাহরণস্বরূপ, VP9 প্রোফাইল 2 এবং 3, H.264 (10-বিট), DNxHR, HEVC, ProRes, et al.)। এছাড়াও YouTube সমর্থন নিবন্ধটি হাই ডায়নামিক রেঞ্জ (HDR) ভিডিও আপলোড করুন

এনকোডেড আউটপুট পৌঁছানো:

বর্তমানে এবং সাধারণভাবে, সমর্থিত টার্গেট ডিভাইসগুলির মধ্যে যেকোন ডিভাইস রয়েছে যা VP9 প্রোফাইল 2 ডিকোড করতে পারে এবং একটি HDR ডিসপ্লেতে আউটপুট করতে পারে।

  • Chromecast আল্ট্রা + HDR-সক্ষম টিভি
  • Windows 10 Fall Creators আপডেটে Chrome 64 Canary, HDR ফ্ল্যাগ চালু আছে। (এটি একটি ভাল ডিবাগিং টুল)।
  • VP9 প্রোফাইল 2 সহ যেকোনো HDR টিভি
    • সমস্ত Samsung 2017 HDR মডেল ( flatpanelshd.com তালিকা ) এবং 2016 মডেল "KS" দিয়ে শুরু
    • সমস্ত LG 2017 HDR মডেল (এছাড়াও কিছু 2016 LG G6 মডেল)
    • মোবাইলে, যে ডিভাইসগুলি হার্ডওয়্যার-এক্সিলারেটেড VP9 প্রোফাইল 2 10-বিট HDR ডিকোড সমর্থন করে ( Meizu Pro 7 )
    • 2017 থেকে UHD Bluray

VP9 প্রোফাইল 2 এবং HDR EOTF সক্ষম করতে FFmpeg কমান্ড-লাইন সেটিংস

আপনার FFmpeg 10-বিট (বা এমনকি 12-বিট) সমর্থন দিয়ে তৈরি করা দরকার।

নীচের উদাহরণগুলিতে আমরা 10-বিট সমর্থন সহ একটি স্ট্যাটিকালি-বিল্ট ffmpeg ব্যবহার করি। আপনি নিজের তৈরি করতে আমাদের বিল্ড স্ক্রিপ্ট ব্যবহার করতে পারেন, বা FFmpeg সাইটে নির্দেশিকা অনুসরণ করতে পারেন।

VP9 সহ SMPTE 2084 (PQ EOTF) স্ট্যান্ডার্ডে HDR এনকোডিংয়ের জন্য নিম্নলিখিত একটি ব্যবহারযোগ্য FFmpeg কমান্ড লাইন রয়েছে:

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-এর জন্য 2-পাস এনকোডিং প্রয়োজন। এই উদাহরণে, প্রথম পাসটি /dev/null এ আউটপুট হয় এবং দ্বিতীয় পাসের সময় মেমরিতে প্রক্রিয়া করা হয়।
-pix_fmt yuv420p10le YUV 4:2:0 10-বিট পিক্সেল বিন্যাস সেট করে
-color_primaries 9 BT2020 সেট করে আরো বিস্তারিত জানার জন্য এই নথির পৃষ্ঠা 5 এবং 6 দেখুন।
-color_trc 16 SMPTE 2084-এ 16 সেট স্থানান্তর বৈশিষ্ট্য। PQ 18 সেট স্থানান্তর বৈশিষ্ট্য SMPTE 2086 HLG
-colorspace 9 colorspace হল "matrix_coefficients"। বিষয়বস্তু কিভাবে আয়ত্ত করা হয়েছে তার সাথে সামঞ্জস্যপূর্ণ সেট করা উচিত। (যেমন, 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 ব্যবহার করে৷

এইচডিআর এনকোডিং সহ বিটরেটের সাধারণ নোট হিসাবে, সমতুল্য 8-বিট এসডিআর এনকোডিংয়ের চেয়ে 25-30% বেশি বিটরেট বাঞ্ছনীয়। উদাহরণগুলি সাধারণত 18Mbps কে লক্ষ্য করে। সর্বোত্তম টিউনিং সহ 12Mbps বিটরেটের সাথে ভাল HDR ফলাফল অর্জন করা যেতে পারে।

এনকোডগুলি একটি উবুন্টু লিনাক্স সিস্টেমে নিম্নলিখিত বৈশিষ্ট্যগুলির সাথে সঞ্চালিত হয়েছিল:

  • প্রসেসর: 4x Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
  • মেমরি (RAM): 8060MB (1492MB ব্যবহৃত)
  • গ্রাফিক্স: Intel HD Graphics 530 (Skylake GT2)
  • ওএস: উবুন্টু 16.04 LTS

YUV 4:2:0 10-বিট PQ এ রূপান্তর করুন

উদাহরণ A: 6Mbps 4k 2-পাস
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: 18Mbps 4k 2-পাস
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: 18Mbps 1080p 2-পাস
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

একটি লুক-আপ টেবিল (LUT) দিয়ে HDR থেকে SDR তে রূপান্তর করুন

HDR কে SDR তে রূপান্তর করার জন্য ট্রান্সকোডারকে বুঝতে হবে কীভাবে উজ্জ্বলতার মাত্রা এবং রঙগুলিকে ছোট BT.709 রঙের স্থান এবং নন-HDR রেঞ্জের উজ্জ্বলতার সাথে ম্যাপ করতে হয়। সর্বোত্তম ফলাফলের জন্য, একটি LUT বর্ণনা করে যে ম্যাপিংটি কীভাবে সম্পাদন করতে হয় -- সাধারণত বিষয়বস্তুর জন্য নির্দিষ্ট -- ব্যবহার করা যেতে পারে। উদাহরণ C এবং D দেখায় কিভাবে একটি LUT ব্যবহার করতে হয়। আমরা bt2020_to_bt709_example.cube ব্যবহার করেছি

উদাহরণ C: LUT সহ 18Mbps 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 কে 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

সারাংশ

আউটপুট ফাইল বিভিন্ন আকারের হয়. ইনপুট ছিল 4.3GB।

উদাহরণ টার্গেট আউটপুট ডিস্কের আকার এনকোড সময়
6Mbps 4k আনস্কেলড HDR 51.2MB 142 মি
B1 18Mbps 4k আনস্কেল HDR 161MB 213 মি
B2 18Mbps 1080 স্কেল করা HDR 160MB 113 মি
18Mbps HDR থেকে SDR আনস্কেল 165MB 124 মি
ডি 18Mbps HLG রূপান্তর 165MB 168 মি

মনে রাখবেন যে 2-পাস এনকোডিং HDR-এর জন্য সুপারিশ করা হয়, যেহেতু 1-পাস নির্দিষ্ট কনফিগারেশনে পরিবর্তিত হতে পারে।

WebM এবং MP4 আউটপুটে HDR সংকেত দেওয়ার জন্য প্রয়োজনীয় সরঞ্জাম (Matroska কমান্ড-লাইন সরঞ্জাম)

লেখার সময়, FFmpeg WebM/MKV-তে SMPTE 2086 স্ট্যাটিক মেটাডেটা নির্দিষ্ট করার জন্য একটি প্রক্রিয়া প্রদান করে না, যদিও এটি একটি ইনপুট স্ট্রীম থেকে এটি প্রচার করবে যখন স্ট্রীমে এটি থাকে।

mkvmerge টুল, mkvtoolnix- এর অংশ, আপনার অ্যাপ্লিকেশনের প্রয়োজন হলে এই মেটাডেটা সন্নিবেশ বা পরিবর্তন করতে ব্যবহার করা যেতে পারে।

উপরে তৈরি করা ফাইলগুলির মধ্যে একটিতে HDR মেটাডেটা সন্নিবেশ করার একটি উদাহরণ নিচে দেওয়া হল। এটি YouTube-এ আপলোড করার জন্য HDR সামগ্রী প্রস্তুত করার জন্য বিশেষভাবে উপযুক্ত।

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 সেকেন্ডে তৈরি করে।