Tujuan

Bagian ini memberikan rekomendasi untuk setelan encoding VP9 saat melakukan encoding berbasis file (yaitu, tidak live).

Rekomendasi ini dirancang untuk sasaran berikut:

  • Keseimbangan antara kualitas dan kecepatan encoding
  • Kecepatan bit minimal untuk mencapai kualitas yang wajar
  • Setelan untuk mengakomodasi berbagai jenis konten

Rekomendasi ini tidak:

  • Encoding langsung alamat
  • Mengoptimalkan untuk jenis konten tertentu (misalnya rekaman olahraga gerakan tinggi)
  • Mengonfigurasi setelan untuk persyaratan perangkat atau jaringan tertentu

Encoding Resolusi Tunggal

VP9 mendukung berbagai ukuran frame, mulai dari resolusi kecil hingga 4K. Ukuran frame yang lebih besar memberikan kualitas lebih tinggi tetapi memerlukan lebih banyak bandwidth untuk dikirim, dan lebih banyak daya pemrosesan untuk mendekode.

Jika Anda membuat satu resolusi, 640x480 merupakan taruhan yang aman untuk berbagai perangkat web dan seluler. Parameter command line FFmpeg berikut memungkinkan Anda membuat file resolusi tunggal pada 750 kbps.

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

Encoding Multi-Resolusi

Jika Anda berencana menargetkan beberapa resolusi, atau jika jaringan penayangan memiliki variasi yang bervariasi, sebaiknya buat beberapa resolusi. Pemain kemudian dapat mengontrol resolusi mana yang akan dikirim ke penampil.

Encoding video multi-resolusi sering digunakan dalam streaming kecepatan bit adaptif, dengan pemutar video beralih antar-resolusi secara real-time berdasarkan bandwidth pengguna. Misalnya, Shaka Player memungkinkan Anda memutar enkode multi-resolusi, dengan setiap enkode VP9 berada dalam file terpisah dan manifes DASH memberikan informasi tentang setiap enkode.

Untuk mengetahui informasi selengkapnya tentang pengemasan video dalam format streaming adaptif, lihat Shaka Packager. Panduan ini akan berfokus pada setelan encoding untuk VP9 di beberapa resolusi.

Semua setelan di bawah ini dapat digunakan untuk setiap file pada berbagai resolusi. Kombinasi tersebut menyediakan kumpulan lengkap yang cocok untuk streaming adaptif. Perhatikan bahwa versi 640x480 memiliki dua versi, satu versi rendah (LQ) dan yang satunya dengan kualitas sedang (MQ).

Kecepatan bit

Mode Kualitas Dibatasi (CQ) direkomendasikan saat mengenkode file VP9 untuk tampilan on demand. Dengan mode encoding ini, Anda dapat menentukan kecepatan bit rata-rata target, sekaligus mengontrol kualitas maksimum video serta kecepatan bit minimum dan maksimum.

Kecepatan bit berikut disarankan sebagai dasar pengukuran untuk distribusi web dan seluler. Saran ini meminimalkan kecepatan bit yang mencapai kualitas video yang sesuai untuk distribusi web konsumen dan seluler; anggap itu sebagai rekomendasi kecepatan bit yang rendah dan masih dapat mencapai kualitas yang wajar.

Untuk contoh di atas, sebaiknya kecepatan bit minimum ditetapkan pada 50% kecepatan bit target, dan maksimum 145% dari target.

Ukuran Frame/Kecepatan Frame Kecepatan Bit Target (VOD, kbps) Kecepatan Bit Min. (50%) Kecepatan Bit Maks (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 6.000 3000 8700
2560x1440p @ 50,60 9000 4500 13050
3840x2160p @ 24,25,30 12000 6.000 17400
3840x2160p @ 50,60 18000 9000 26100

Gambar 2a: Kecepatan bit VOD yang direkomendasikan

Dalam FFmpeg, kecepatan bit dikontrol dengan perintah berikut:

Musik FFmpeg
-b:v <arg> Menetapkan kecepatan bit (mis. 500 ribu)
-minrate <arg>
-maxrate <arg>
Menetapkan kecepatan bit minimum dan maksimum.

Misalnya, saat mengenkode konten 640x480, Anda dapat menggunakan command line -b:v 750k -minrate 375 -maxrate 1088.

Kualitas

Dalam mode CQ, Anda juga akan menyetel tingkat kualitas maksimum. Tingkat kualitas berikut direkomendasikan untuk encoding VP9 berbasis file:

Tinggi Bingkai Kualitas Target (CQ)
240 37
360 36
480 34 (LQ) atau 33 (MQ)
720 32
1080 31
1440 24
2160 15

Dalam FFmpeg, kualitas ditetapkan dengan perintah -crf. Misalnya, untuk menyetel kualitas ke 33, gunakan perintah -crf 33

Encoding multi-pass dan Kecepatan Encoding

Encoding berbasis file memungkinkan fleksibilitas dalam kecepatan. Anda juga dapat melakukan beberapa penerusan pada materi yang sama untuk meningkatkan kualitas, dan memilih kecepatan untuk setiap materi.

Saat mengenkode file VP9 di FFmpeg, sebaiknya tetapkan parameter -quality ke good, lalu setel kecepatan penerusan pertama dan kedua sesuai tabel di bawah ini dengan parameter -speed. Hal ini memberikan keseimbangan yang baik antara waktu encoding dan kualitas output.

Tinggi Bingkai Kecepatan (Lulus Pertama) Kecepatan (Tiket Kedua)
240 4 1
360 4 1
480 4 1
720 4 2
1080 4 2
1440 4 2
2160 4 2

Misalnya, string enkode penerusan pertama di FFmpeg mungkin menyertakan -quality good -speed 4.

Jarak Bingkai Kunci

Sebaiknya izinkan video hingga 240 frame di antara keyframe (8 detik untuk konten 30 fps). Keyframe adalah frame video yang mandiri, dan tidak bergantung pada frame lain untuk dirender, tetapi cenderung lebih besar dari jenis frame lainnya. Untuk pemutaran web dan seluler, spasi yang banyak di antara keyframe memungkinkan encoder memilih penempatan keyframe terbaik untuk memaksimalkan kualitas.

Dalam spasi keyframe FFmpeg dikontrol dengan perintah -g, yang menunjukkan jumlah frame. Untuk 240 frame, ini akan menjadi -g 240.

Rekomendasi Ubin dan Threading

Ubin membagi frame video menjadi beberapa kolom, yang sedikit mengurangi kualitas tetapi mempercepat performa encoding. Lebar ubin harus minimal 256 piksel, sehingga ada batas jumlah ubin yang dapat digunakan.

Bergantung pada jumlah kotak dan resolusi frame output, thread CPU lainnya mungkin berguna. Secara umum, ada nilai terbatas untuk beberapa thread saat ukuran frame output sangat kecil.

Setelan berikut direkomendasikan untuk pembuatan ubin dan threading di berbagai resolusi.

Ukuran Frame Jumlah kolom ubin Jumlah thread
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

Dalam FFmpeg, jumlah kotak dikontrol dengan parameter -tile-columns dan jumlah thread berdasarkan -threads. Misalnya, encoding 640x480 akan menggunakan command line -tile-columns 2 -threads 4.

Command Line FFmpeg

Dengan menggabungkan rekomendasi di atas, perintah FFmpeg berikut dapat digunakan untuk mengenkode konten VP9.

Perhatikan bahwa perintah penerusan pertama dan penerusan kedua digabungkan. Argumen -y dalam perintah tahap kedua menjawab "Ya" saat FFmpeg meminta untuk menimpa file statistik penerusan pertama dengan video output.

Perhatikan juga bahwa sumber 1080p digunakan untuk encoding yang menargetkan output hingga 1280x720. Sumber 4k digunakan untuk menghasilkan output yang lebih besar.

320x240 (24, 25, atau 30 frame per detik)

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, atau 30 frame per detik)

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 (Kualitas Rendah, 24, 25, atau 30 frame per detik)

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 (Kualitas Sedang, 24, 25 atau 30 frame per detik)

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, atau 30 frame per detik)

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 atau 60 frame per detik)

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, atau 30 frame per detik)

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 atau 60 frame per detik)

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 atau 30 frame per detik)

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 atau 60 frame per detik)

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, atau 30 frame per detik)

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 atau 60 frame per detik)

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