Amaç

Bu bölümde, dosya tabanlı kodlama (yani canlı olmayan) gerçekleştirirken VP9 kodlama ayarlarıyla ilgili öneriler verilmektedir.

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

  • Kalite ve kodlama hızı arasında denge
  • Makul kaliteyi elde etmek için gereken minimum bit hızı
  • Çok çeşitli içerik türlerine uygun ayarlar

Bu öneriler:

  • Canlı kodlama sorunlarını giderme
  • Belirli içerik türleri için optimizasyon (ör. çok hareketli spor görüntüleri)
  • Belirli cihaz veya ağ gereksinimleri için ayarları yapılandırma

Tek çözünürlüklü kodlama

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

Tek bir çözünürlük oluşturuyorsanız çok çeşitli web ve mobil cihazlar için 640x480 güvenli bir seçenektir. Aşağıdaki FFmpeg komut satırı parametreleri, 750 kbps hızında 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ük kodlaması

Birden fazla çözünürlüğü hedeflemeyi planlıyorsanız veya yayın ağınızda farklı bant genişlikleri varsa birden fazla çözünürlük oluşturmanız önerilir. Oynatıcınız, izleyiciye hangi çözünürlüğün gönderileceğini kontrol edebilir.

Çok çözünürlüklü video kodlamaları genellikle uyarlanabilir bit hızı akışında kullanılır. Bu durumda video oynatıcı, kullanıcının bant genişliğine bağlı olarak çözünürlükler arasında gerçek zamanlı geçiş yapar. Örneğin, Shaka Player, her VP9 kodlamasının ayrı bir dosyada olduğu ve DASH manifestinin her kodlama hakkında bilgi sağladığı çok çözünürlüklü kodlamaları oynatmanıza olanak tanır.

Videoyu uyarlanabilir akış biçimlerinde paketleme hakkında daha fazla bilgi için lütfen Shaka Packager'ı inceleyin. Bu kılavuzda, birden fazla çözünürlükte VP9 için kodlama ayarlarına odaklanılacaktır.

Aşağıdaki tüm ayarlar, çeşitli çözünürlüklerdeki tek tek dosyalar için kullanılabilir. Birleştirildiklerinde uyarlanabilir akış için uygun kapsamlı bir set oluştururlar. 640x480 sürümünün iki versiyonu olduğunu unutmayın: biri düşük kaliteli (LQ), diğeri ise orta kaliteli (MQ).

Bit hızı

İsteğe bağlı görüntüleme için VP9 dosyaları kodlanırken Sınırlı Kalite (CQ) modu önerilir. Bu kodlama modu, hedef ortalama bit hızını belirtmenize olanak tanırken hem videonun maksimum kalitesini hem de minimum ve maksimum bit hızını kontrol etmenizi sağlar.

Web ve mobil dağıtım için temel olarak aşağıdaki bit hızları önerilir. Bu öneriler, tüketici web ve mobil dağıtımı için uygun video kalitesini sağlarken bit hızını en aza indirir. Bunları, makul bir kalite elde etmeye devam edebilen "düşük" bit hızı önerisi olarak düşünebilirsiniz.

Yukarıdaki örneklerde, minimum bit hızının hedef bit hızının %50'si, maksimum bit hızının ise hedef bit hızının% 145'i olarak ayarlanması önerilir.

Kare Boyutu/Kare Hızı Hedef bit hızı (VOD, kb/sn) Minimum bit hızı (%50) Maksimum bit hızı (%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 1.500 4350
2560x1440p @ 24,25,30 6.000 3000 8700
2560x1440p @ 50,60 9000 4500 13050
3840x2160p @ 24,25,30 12000 6.000 17400
3840x2160p @ 50,60 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ı ayarlar (ör. 500k)
-minrate <arg>
-maxrate <arg>
Minimum ve maksimum bit hızını ayarlar.

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

Kalite

CQ modunda maksimum kalite seviyesini de ayarlarsınız. Dosya tabanlı VP9 kodlama için aşağıdaki kalite seviyeleri önerilir:

Çerçeve 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.

Çok geçişli kodlama ve kodlama hızı

Dosyaya dayalı kodlama, hız konusunda esneklik sağlar. Ayrıca kaliteyi artırmak için aynı materyalde birden fazla geçiş yapabilir ve her biri için hız seçebilirsiniz.

FFmpeg'de VP9 dosyalarını kodlarken -quality parametresinin good olarak ayarlanması ve ardından aşağıdaki tabloda -speed parametresiyle birlikte birinci ve ikinci geçişin hızının ayarlanması önerilir. Bu, kodlama süresi ve çıkış kalitesi arasında iyi bir denge sağlar.

Çerçeve Yüksekliği Hız (İlk Geçiş) Hız (İkinci Geçiş)
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 geçiş kodlama dizesi -quality good -speed 4 içerebilir.

Animasyon Karesi Aralığı

Anahtar kareler arasında en fazla 240 kare video (30 FPS içerik için 8 saniye) kullanılması önerilir. Ana kareler, kendi kendine yeterli olan video kareleridir. Oluşturulmak için başka karelere ihtiyaç duymazlar ancak diğer kare türlerinden daha büyük olma eğilimindedirler. Web'de ve mobil cihazlarda oynatma için animasyon kareleri arasında geniş aralıklar bırakıldığında kodlayıcı, kaliteyi en üst düzeye çıkarmak için animasyon karelerinin en iyi yerleşimini seçebilir.

FFmpeg'de animasyon kareleri arasındaki boşluk, kare sayısını belirten -g komutuyla kontrol edilir. 240 kare için bu değer -g 240 olur.

Döşeme ve İş Parçacığı Oluşturma Önerileri

Döşeme, video karesini birden fazla sütuna böler. Bu işlem kaliteyi biraz düşürse de kodlama performansını artırır. Döşemeler en az 256 piksel genişliğinde olmalıdır. Bu nedenle, kullanılabilecek döşeme sayısı sınırlıdır.

Döşeme sayısına ve çıkış çerçevesinin çözünürlüğüne bağlı olarak daha fazla CPU iş parçacığı yararlı olabilir. Genel olarak, çıkış çerçevesi boyutu çok küçük olduğunda birden fazla iş parçacığı kullanmanın değeri sınırlıdır.

Çeşitli çözünürlüklerde döşeme ve iş parçacığı oluşturma için aşağıdaki ayarlar önerilir.

Çerçeve Boyutu Döşeme sütunu sayısı İş parçacığı sayısı
320x240 1 (-tile-columns 0) 1
640x360 2 (-tile-columns 1) 2
640x480 2 (-tile-columns 1) 2
1.280x720 4 (-tile-columns 2) 4
1.920x1.080 4 (-tile-columns 2) 4
2560x1440 8 (-tile-columns 3) 8
3.840x2.160 8 (-tile-columns 3) 8

FFmpeg'de döşeme sayısı -tile-columns parametresiyle, iş parçacığı sayısı ise -threads ile kontrol edilir. Örneğin, 640x480 kodlaması için -tile-columns 1 -threads 2 komut satırı kullanılır.

FFmpeg Komut Satırları

Yukarıdaki önerileri bir araya getirdiğimizde, VP9 içeriğini kodlamak için aşağıdaki FFmpeg komutları kullanılabilir.

İlk geçiş ve ikinci geçiş komutlarının birbirine bağlı olduğunu unutmayın. İkinci geçiş komutundaki -y bağımsız değişkeni, FFmpeg ilk geçiş istatistikleri dosyasının çıkış videosuyla üzerine yazılmasını istediğinde "Evet" yanıtını verir.

Ayrıca, 1280x720 çıkış hedefleyen kodlamalar için 1080p kaynağı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 1 \
  -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 1 \
  -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 2 \
  -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 2 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-640x360.webm

640x480 (Düşük Kalite, saniyede 24, 25 veya 30 kare)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
  -minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 2 \
  -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 2 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -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 2 \
  -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 2 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -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 4 \
  -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 4 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -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 4 \
  -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 4 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2-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 4 \
  -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 4 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -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 4 \
  -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 4 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -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 8 \
  -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 8 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -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 8 \
  -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 8 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -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 8 \
  -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 8 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -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 8 \
  -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 8 \
  -quality good -speed 2 -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -y tos-3840x2160-50-60fps.webm