Kullanım amacı

Bu bölümde, dosyaya dayalı kodlama (yani canlı olmayan) gerçekleştirilirken VP9 kodlama ayarları için öneriler sunulmaktadır.

Bu öneriler aşağıdaki hedefler için tasarlanmıştır:

  • Kalite ile kodlama hızı arasında denge
  • Makul kaliteye ulaşmak için minimum bit hızı
  • Çok çeşitli içerik türlerine uygun ayarlar

Bu öneriler aşağıdakileri yapmaz:

  • Adres kodlama
  • Belirli içerik türleri (ör. hareketli çekim spor görüntüleri) için optimize etme
  • Belirli cihaz veya ağ gereksinimlerinin ayarlarını yapılandırma

Tek Çözünürlüklü Kodlama

VP9, küçük çözünürlüklerden 4K'ya kadar çeşitli çerçeve boyutlarını destekler. Daha büyük kare boyutları daha yüksek kalite sunar. Ancak bu boyutların sağlanması için daha fazla bant genişliği ve daha fazla işlem gücü gerekir.

Tek bir çözünürlük oluşturuyorsanız 640x480, geniş bir web ve mobil cihaz yelpazesi için güvenli bir seçenektir. Aşağıdaki FFmpeg komut satırı parametreleri, 750 kb/sn'de tek çözünürlüklü bir dosya oluşturmanıza olanak tanır.

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

Çoklu Çözünürlüklü Kodlama

Birden fazla çözünürlüğü hedeflemeyi planlıyorsanız veya yayınlama ağınız belirli bir bant genişliğine sahipse birden fazla çözünürlük oluşturmanız önerilir. Ardından oynatıcınız izleyiciye hangi çözünürlüğün gönderildiğini kontrol edebilir.

Çoklu çözünürlük video kodlamaları, genellikle uyarlanabilir bit hızı akışında kullanılır. Burada video oynatıcı, kullanıcının bant genişliğine göre çözünürlükler arasında gerçek zamanlı olarak geçiş yapar. Örneğin, Shaka Player çok çözünürlüklü kodlamaları oynatmanıza olanak tanır. Burada, her VP9 kodlama ayrı bir dosyadadır ve DASH manifesti her kodlama hakkında bilgi sağlar.

Videonun uyarlanabilir akış biçimlerinde paketlenmesi hakkında daha fazla bilgi için lütfen Shaka Paketleyici'ye bakın. Bu kılavuz, birden fazla çözünürlükde VP9 için kodlama ayarlarına odaklanacaktır.

Aşağıdaki ayarların hepsi, uyarlanabilir çözünürlüklere uygun olan kapsamlı bir küme sağlamak üzere çeşitli çözünürlüklerdeki dosyalar için kullanılabilir. 640x480 sürümünün iki sürümü vardır. Bunlardan biri düşük kalite (LQ), diğeri orta kalitededir (MQ).

Bit hızı

İsteğe bağlı görüntüleme için VP9 dosyalarını kodlarken Kısıtlı Kalite (CQ) modu önerilir. Bu kodlama modu, hem videonun maksimum kalitesinin hem de minimum ve maksimum bit hızını kontrol ederken bir hedef ortalama bit hızı belirtmenize olanak tanır.

Aşağıdaki bit hızları, web ve mobil dağıtımı için referans değer olarak önerilir. Bu öneriler, tüketici web ve mobil dağıtımı için uygun video kalitesine ulaşan bit hızını en aza indirir. Bunları, makul kaliteye ulaşabilecek bir 'düşük'bit hızı önerisi olarak düşünün.

Yukarıdaki örnekler için minimum bit hızının hedef bit hızının %50'si, maksimum hedef değerinin ise% 145'i olarak ayarlanması önerilir.

Kare Boyutu/Kare Hızı Hedef Bit Hızı (VOD, Kb/sn.) Min. Bit Hızı (%50) Maks. Bit Hızı (%145)
24.25.30 @ 320x240p 150 75 218)
24.25.30 x 640x360p 276 138) 400
24.25.30 x 640x480p 512 (LQ), 750 (MQ) 256 (LQ) 375 (MQ) 742 (LQ) 1088 (MQ)
24.25.30 x 1280x720p 1.024 512 1485
50.60 x 1.280x720p 1.800 900 2610
24.25.30'da 1.920x1.080p 1.800 900 2610
50.60 x 1920x1080p 3.000 1.500 4350
24.25.30 x 2.560x1.440p 6.000 3.000 8700
50.60 x 2.560x1.440p 9000 4500 13050
24.25.30 @ 3840x2160p 12000 6.000 17400
50.60 x 3.840x2.160p 18000 9000 26100

Şekil 2a: Önerilen VOD bit hızları

FFmpeg'de, bit hızı aşağıdaki komutlarla kontrol edilir:

FFmpeg
-b:v <arg> Bit hızını belirler (ör. 500 k)
-minrate <arg>
-maxrate <arg>
Minimum ve maksimum bit hızını ayarlar.

Örneğin, 640x480 içeriği kodlarken -b:v 750k -minrate 375 -maxrate 1088 komut satırını kullanabilirsiniz.

Kalite

CQ modunda da maksimum kalite seviyesini ayarlarsınız. Dosya tabanlı VP9 kodlaması için aşağıdaki kalite düzeyleri önerilir:

Kare Yüksekliği Hedef Kalite (CQ)
240 37
360 36
480 34 (LQ) veya 33 (MQ)
720 32
1080 31
1440 24
2160 15

FFmpeg'de kalite -crf komutuyla ayarlanır. Örneğin, kaliteyi 33 olarak ayarlamak için -crf 33 komutunu kullanırsınız.

Çoklu geçiş kodlaması ve Kodlama Hızı

Dosya tabanlı kodlama, hız konusunda esneklik sağlar. Ayrıca, kaliteyi artırmak için aynı malzemede birden fazla geçiş gerçekleştirebilir ve her biri için hızlar seçebilirsiniz.

FFmpeg'de VP9 dosyaları kodlarken -quality parametresini good olarak ayarlamanız ve ardından ilk parametrenin hızını aşağıdaki tabloya göre -speed parametresiyle ayarlamanız önerilir. Bu, kodlama zamanıyla çıkışın kalitesi arasında iyi bir denge sağlar.

Kare Yüksekliği Hız (İlk Kart) Hız (İkinci Kart)
240 4 1
360 4 1
480 4 1
720 4 2
1080 4 2
1440 4 2
2160 4 2

Örneğin, FFmpeg'deki ilk kart kodlama dizesi -quality good -speed 4 içerebilir.

Animasyon Karesi Aralığı

Animasyon kareleri arasında en fazla 240 karelik videoya (30 fps içeriği için 8 saniye) izin verilmesi önerilir. Animasyon kareleri kendi kendine yeten video kareleridir. Oluşturulacak diğer karelere güvenmezler ancak genellikle diğer kare türlerinden daha büyüktürler. Web ve mobil oynatma için animasyon kareleri arasındaki geniş aralık, kodlayıcının kaliteyi en üst düzeye çıkarmak için en iyi animasyon karelerini yerleşimini seçmesine olanak tanır.

FFmpeg kare cinsinden boşluk, -g komutuyla kontrol edilir. Bu da kare sayısını belirtir. 240 kare için bu -g 240 olur.

Karo ve İplik Önerileri

Karo, video karesini birden fazla sütuna böler. Böylece kaliteyi biraz düşürür ancak kodlama performansını hızlandırır. Kutular en az 256 piksel genişliğinde olmalıdır. Bu nedenle kaç karo kullanılabilir?

Karo sayısına ve çıkış karesinin çözünürlüğüne bağlı olarak daha fazla CPU ileti dizisi yararlı olabilir. Genel olarak, çıkış çerçevesi boyutu çok küçük olduğunda birden çok mesaj dizisinin sınırlı değeri olur.

Çeşitli çözünürlüklerde karo ve iplik almak için aşağıdaki ayarlar önerilir.

Kare Boyutu Karo sütun sayısı Mesaj dizisi sayısı
320x240 1 (-tile-columns 0) 2
640x360 2 (-tile-columns 1) 4
640x480 2 (-tile-columns 1) 4
1.280x720 4 (-tile-columns 2) 8
1.920x1.080 4 (-tile-columns 2) 8
2560x1440 8 (-tile-columns 3) 16
3.840x2.160 8 (-tile-columns 3) 16

FFmpeg'de karo sayısı, -tile-columns parametresi ve -threads tarafından oluşturulan ileti dizilerinin sayısı ile kontrol edilir. Örneğin, 640x480 kodlama, -tile-columns 2 -threads 4 komut satırını kullanır.

FFmpeg Komut Satırları

Yukarıdaki önerileri bir araya getirmekte, VP9 içeriğin kodlanması için aşağıdaki FFmpeg komutları kullanılabilir.

İlk geçiş ve ikinci geçiş komutlarının zincirlendiğini unutmayın. FFmpeg, ikinci geçiş komutundaki -y bağımsız değişkeni, çıkış videosuyla ilk geçiş istatistikleri dosyasının üzerine yazmak istediğinde "Evet" yanıtını verir.

Ayrıca, 1280x720 çıkışına kadar kodlama kodlamaları için 1080p kaynağının kullanıldığını unutmayın. Daha büyük çıkış için 4k kaynak kullanılır.

320x240 (saniyede 24, 25 veya 30 kare)

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 (saniyede 24, 25 veya 30 kare)

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 (Düşük Kalite, 24, 25 veya 30 kare/sn.)

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 (Orta Kalite, saniyede 24, 25 veya 30 kare)

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 (saniyede 24, 25 veya 30 kare)

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 (saniyede 50 veya 60 kare)

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 (saniyede 24, 25 veya 30 kare)

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 (saniyede 50 veya 60 kare)

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 (saniyede 24, 25 veya 30 kare)

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 (saniyede 50 veya 60 kare)

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 (saniyede 24, 25 veya 30 kare)

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 (saniyede 50 veya 60 kare)

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