هدف

این بخش توصیه هایی را برای تنظیمات کد VP9 هنگام انجام رمزگذاری مبتنی بر فایل (یعنی غیر زنده) ارائه می دهد.

این توصیه ها برای اهداف زیر طراحی شده اند:

  • تعادل بین کیفیت و سرعت رمزگذاری
  • حداقل نرخ بیت برای دستیابی به کیفیت معقول
  • تنظیماتی برای گنجاندن طیف وسیعی از انواع محتوا

این توصیه ها انجام نمی دهند:

  • کدگذاری زنده آدرس
  • بهینه سازی برای انواع محتوای خاص (مانند فیلم های ورزشی با حرکت بالا)
  • تنظیمات را برای دستگاه یا شبکه مورد نیاز خاص پیکربندی کنید

رمزگذاری تک رزولوشن

VP9 از طیف وسیعی از اندازه‌های فریم، از رزولوشن‌های کوچک تا 4K پشتیبانی می‌کند. اندازه‌های فریم بزرگ‌تر کیفیت بالاتری را ارائه می‌کنند، اما به پهنای باند بیشتری برای ارائه و قدرت پردازش بیشتری برای رمزگشایی نیاز دارند.

اگر یک رزولوشن واحد ایجاد می کنید، 640x480 یک شرط مطمئن برای طیف گسترده ای از وب و دستگاه های تلفن همراه است. پارامترهای خط فرمان FFmpeg زیر به شما این امکان را می دهد که یک فایل با وضوح تک با سرعت 750 کیلوبیت در ثانیه ایجاد کنید.

-vf scale=640x480 -b:v 750k -quality good -speed 0 -crf 33 \
  -c:v libvpx-vp9 -c:a libopus output.webm

رمزگذاری چند رزولوشن

اگر قصد دارید چندین رزولوشن را هدف قرار دهید، یا اگر شبکه تحویل شما دارای پهنای باند متفاوتی است، توصیه می‌شود چندین رزولوشن ایجاد کنید. سپس پخش کننده شما می تواند کنترل کند که کدام رزولوشن برای بیننده ارسال می شود.

کدهای ویدیویی چند رزولوشن اغلب در پخش با نرخ بیت تطبیقی ​​استفاده می‌شوند، جایی که پخش‌کننده ویدیو بین رزولوشن‌ها در زمان واقعی بر اساس پهنای باند کاربر سوئیچ می‌کند. به عنوان مثال، Shaka Player به شما امکان می دهد کدهای با وضوح چندگانه را پخش کنید، جایی که هر کد VP9 در یک فایل جداگانه قرار دارد و یک مانیفست DASH اطلاعاتی در مورد هر کد ارائه می دهد.

برای اطلاعات بیشتر در مورد بسته بندی ویدیو در قالب های جریان تطبیقی، لطفاً Shaka Packager را ببینید. این راهنما بر روی تنظیمات رمزگذاری برای VP9 در چندین رزولوشن تمرکز خواهد کرد.

تمام تنظیمات زیر را می توان برای فایل های فردی با رزولوشن های مختلف استفاده کرد، ترکیبی از آنها مجموعه ای جامع و مناسب برای پخش تطبیقی ​​را ارائه می دهند. توجه داشته باشید که نسخه 640x480 دارای دو نسخه است، یکی با کیفیت پایین (LQ) و دیگری با کیفیت متوسط ​​(MQ).

میزان بیت

حالت محدودیت کیفیت (CQ) هنگام رمزگذاری فایل‌های VP9 برای مشاهده درخواستی توصیه می‌شود. این حالت رمزگذاری به شما امکان می دهد نرخ بیت متوسط ​​هدف را مشخص کنید، در حالی که حداکثر کیفیت ویدیو و همچنین حداقل و حداکثر نرخ بیت را کنترل می کنید.

نرخ بیت زیر به عنوان خطوط پایه برای توزیع وب و موبایل پیشنهاد شده است. این پیشنهادات نرخ بیت را به حداقل می‌رسانند که کیفیت ویدیوی مناسب برای توزیع وب و موبایل مصرفی را به دست می‌آورد. آنها را به عنوان یک توصیه نرخ بیت "کم" در نظر بگیرید که هنوز هم می تواند به کیفیت معقولی دست یابد.

برای مثال‌های بالا، توصیه می‌شود که حداقل نرخ بیت روی 50 درصد نرخ بیت هدف، و حداکثر روی 145 درصد هدف تنظیم شود.

اندازه فریم / نرخ فریم نرخ بیت هدف (VOD، kbps) حداقل میزان بیت (50%) حداکثر نرخ بیت (145%)
320x240p @ 24,25,30 150 75 218
640x360p @ 24,25,30 276 138 400
640x480p @ 24,25,30 512 (LQ)، 750 (MQ) 256 (LQ) 375 (MQ) 742 (LQ) 1088 (MQ)
1280x720p @ 24,25,30 1024 512 1485
1280x720p @ 50,60 1800 900 2610
1920x1080p @ 24,25,30 1800 900 2610
1920x1080p @ 50,60 3000 1500 4350
2560x1440p @ 24,25,30 6000 3000 8700
2560x1440p @ 50,60 9000 4500 13050
3840x2160p @ 24,25,30 12000 6000 17400
3840x2160p @ 50,60 18000 9000 26100

شکل 2a: میزان بیت VOD توصیه شده

در FFmpeg، نرخ بیت با دستورات زیر کنترل می شود:

FFmpeg
-b:v <arg> میزان بیت را تنظیم می کند (مثلاً 500k)
-minrate <arg>
-maxrate <arg>
حداقل و حداکثر نرخ بیت را تنظیم می کند.

به عنوان مثال، هنگام کدگذاری محتوای 640x480 می توانید از خط فرمان -b:v 750k -minrate 375 -maxrate 1088 استفاده کنید.

کیفیت

در حالت CQ حداکثر سطح کیفیت را نیز تنظیم خواهید کرد. سطوح کیفیت زیر برای رمزگذاری VP9 مبتنی بر فایل توصیه می شود:

ارتفاع قاب کیفیت هدف (CQ)
240 37
360 36
480 34 (LQ) یا 33 (MQ)
720 32
1080 31
1440 24
2160 15

در FFmpeg کیفیت با دستور -crf تنظیم می شود. به عنوان مثال، برای تنظیم کیفیت روی 33، از دستور -crf 33 استفاده کنید

رمزگذاری چند پاس و سرعت رمزگذاری

رمزگذاری مبتنی بر فایل به شما امکان انعطاف در سرعت را می دهد. همچنین می‌توانید برای افزایش کیفیت، چندین پاس روی یک ماده انجام دهید و برای هر یک سرعت انتخاب کنید.

هنگام رمزگذاری فایل های VP9 در FFmpeg، توصیه می شود پارامتر -quality را روی good تنظیم کنید و سپس سرعت اولین و دومین پاس را مطابق جدول زیر با پارامتر -speed کنید. این تعادل خوبی بین زمان رمزگذاری و کیفیت خروجی ایجاد می کند.

ارتفاع قاب سرعت (اولین پاس) سرعت (گذر دوم)
240 4 1
360 4 1
480 4 1
720 4 2
1080 4 2
1440 4 2
2160 4 2

به عنوان مثال، یک رشته کد رمز عبور اول در FFmpeg ممکن است شامل -quality good -speed 4 باشد.

فاصله فریم های کلیدی

توصیه می شود حداکثر 240 فریم ویدیو بین فریم های کلیدی مجاز باشد (8 ثانیه برای محتوای 30 فریم در ثانیه). فریم های کلیدی فریم های ویدئویی هستند که خودکفا هستند. آنها برای رندر کردن به فریم دیگری متکی نیستند، اما نسبت به سایر انواع فریم بزرگتر هستند. برای پخش وب و موبایل، فاصله سخاوتمندانه بین فریم‌های کلیدی به رمزگذار اجازه می‌دهد تا بهترین مکان‌گذاری فریم‌های کلیدی را برای به حداکثر رساندن کیفیت انتخاب کند.

در FFmpeg فاصله فریم های کلیدی با دستور -g کنترل می شود که تعداد فریم ها را نشان می دهد. برای 240 فریم این مقدار -g 240 است.

توصیه های کاشی کاری و نخ زنی

کاشی کاری فریم ویدیو را به چندین ستون تقسیم می کند که کمی کیفیت را کاهش می دهد اما عملکرد رمزگذاری را سرعت می بخشد. کاشی ها باید حداقل 256 پیکسل عرض داشته باشند، بنابراین محدودیتی برای تعداد کاشی هایی که می توان استفاده کرد وجود دارد.

بسته به تعداد کاشی ها و وضوح فریم خروجی، رشته های CPU بیشتری ممکن است مفید باشند. به طور کلی، زمانی که اندازه فریم خروجی بسیار کوچک است، مقدار محدودی برای رشته های متعدد وجود دارد.

تنظیمات زیر برای کاشی کاری و نخ با وضوح های مختلف توصیه می شود.

اندازه قاب تعداد کاشی-ستون تعداد رشته ها
320x240 1 ( -tile-columns 0 ) 2
640x360 2 ( -tile-columns 1 ) 4
640x480 2 ( -tile-columns 1 ) 4
1280x720 4 ( -tile-columns 2 ) 8
1920x1080 4 ( -tile-columns 2 ) 8
2560x1440 8 ( -tile-columns 3 ) 16
3840x2160 8 ( -tile-columns 3 ) 16

در FFmpeg، تعداد کاشی ها با پارامتر -tile-columns و تعداد رشته ها توسط -threads می شود. به عنوان مثال، یک کد 640x480 از خط فرمان -tile-columns 2 -threads 4 استفاده می کند.

خطوط فرمان FFmpeg

با کنار هم قرار دادن توصیه های بالا، دستورات FFmpeg زیر ممکن است برای رمزگذاری محتوای VP9 استفاده شود.

توجه داشته باشید که دستورات اول و دوم به صورت زنجیره ای به هم متصل می شوند. آرگومان -y در فرمان گذر دوم زمانی که FFmpeg از شما بخواهد فایل آمار پاس اول را با ویدیوی خروجی بازنویسی کند، "بله" پاسخ می دهد.

همچنین توجه داشته باشید که یک منبع 1080p برای کدهایی استفاده می شود که حداکثر خروجی 1280x720 را هدف قرار می دهد. منبع 4k برای خروجی بزرگتر استفاده می شود.

320x240 (24، 25 یا 30 فریم در ثانیه)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \
  -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 2 \
  -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-320x240.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \
  -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 2 \
  -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-320x240.webm

640x360 (24، 25 یا 30 فریم در ثانیه)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
  -minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
  -minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x360.webm

640x480 (کیفیت پایین، 24، 25 یا 30 فریم در ثانیه)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
  -minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360-low.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
  -minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x480-low.webm

640x480 (کیفیت متوسط، 24، 25 یا 30 فریم در ثانیه)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
  -minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360-medium.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
  -minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x480-medium.webm

1280x720 (24، 25 یا 30 فریم در ثانیه)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
  -minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1280x720-24-30fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
  -minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1280x720-24-30fps.webm

1280x720 (50 یا 60 فریم در ثانیه)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1280x720-50-60fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4-y tos-1280x720-50-60fps.webm

1920x1080 (24، 25 یا 30 فریم در ثانیه)

ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1920x1080-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1920x1080-24-30fps.webm

1920x1080 (50 یا 60 فریم در ثانیه)

ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
  -minrate 1500k -maxrate 4350k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1920x1080-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
  -minrate 1500k -maxrate 4350k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1920x1080-50-60fps.webm

2560x1440 (24، 25 یا 30 فریم در ثانیه)

ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
  -minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-2560x1440-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
  -minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-2560x1440-24-30fps.webm

2560x1440 (50 یا 60 فریم در ثانیه)

ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
  -minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-2560x1440-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
  -minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-2560x1440-50-60fps.webm

3840x2160 (24، 25 یا 30 فریم در ثانیه)

ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
  -minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 24 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-3840x2160-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
  -minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 24 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-3840x2160-24-30fps.webm

3840x2160 (50 یا 60 فریم در ثانیه)

ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
  -minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 24 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-3840x2160-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
  -minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 24 \
  -quality good -speed 4 -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -y tos-3840x2160-50-60fps.webm