Bagian ini mencantumkan rekomendasi encoding VP9 untuk berbagai profil umum:

  • Video yang sangat dioptimalkan untuk web dan seluler (VOD)
  • Distribusi konten premium (VOD)
  • Olahraga, Animasi, konten 10-bit (VOD)
  • Enkoding langsung
  • WebRTC

Pengantar

Saat mengenkode video, ada beberapa pertimbangan yang perlu diperhatikan:

  • Apakah Anda membuat satu versi media, atau beberapa versi dengan kecepatan bit dan resolusi yang berbeda?
  • Apakah Anda membuat live stream video, atau file video on demand?
  • Jenis media apa yang Anda encoding - apakah memiliki banyak gerakan? Detail? Animasi?
  • Apakah Anda melakukan encoding untuk kualitas maksimum (misalnya, konten premium) atau kecepatan (misalnya, konferensi web)?

Bagian ini dimulai dengan setelan untuk file video on-demand dasar, lalu memberikan rekomendasi untuk semua pertanyaan ini.

Setelan Dasar

Kecepatan Bit Encoding

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

Target Bitrate yang Disarankan

Ukuran/Kecepatan Frame Kecepatan Bit Rata-Rata (VOD, kbps) Kecepatan Bit Rata-Rata (Live, kbps)
320x240p @ 24,25,30 150 250
640x360p @ 24,25,30 276 386
640x480p @ 24,25,30 512 (LQ), 750 (MQ) 720 (LQ), 1024 (MQ)
1280x720p @ 24,25,30 1024 1440
1280x720p @ 50,60 1800 2500
1920x1080p @ 24,25,30 1800 2500
1920x1080p @ 50,60 3000 4200
2560x1440p @ 24,25,30 6000 8400
2560x1440p @ 50,60 9000 12600
3840x2160p @ 24,25,30 12.000 16800
3840x2160p @ 50,60 18000 25200

Gambar 2a: Kecepatan Bit Target

Setelan Encoding VOD

Setelan untuk Sebagian Besar Jenis Konten

Untuk sebagian besar jenis konten, sebaiknya gunakan mode kualitas terbatas (CQ), dengan batas bitrate. Sebagian besar video berisi campuran adegan dengan gerakan tinggi (misalnya, urutan adegan aksi), dan adegan dengan lebih sedikit detail (misalnya, percakapan). Mode CQ memungkinkan encoder mempertahankan tingkat kualitas yang wajar selama adegan yang lebih panjang dan lebih mudah (tanpa membuang bit) sekaligus mengalokasikan lebih banyak bit untuk urutan yang sulit.

Sebaiknya izinkan rentang kecepatan bit dari 50% hingga 150% dari target, menggunakan nilai kualitas seperti yang ditunjukkan dalam diagram di bawah. Mode ini memerlukan encoding dua tahap, dan sebaiknya gunakan setelan yang lebih cepat untuk HD dan yang lebih tinggi seperti yang ditunjukkan di bawah.

Setelan Encoder untuk Encoding CQ

Tinggi Bingkai Kualitas Target (CQ) Mode Encoding
240 37 TWO_PASS_MEDIUM
360 36 TWO_PASS_MEDIUM
480 34 (kualitas rendah) atau 33 (kualitas sedang) TWO_PASS_MEDIUM
720 32 TWO_PASS_FAST
1080 31 TWO_PASS_FAST
1440 24 TWO_PASS_FAST
2160 15 TWO_PASS_FAST

Gambar 2b: Setelan yang direkomendasikan CQ

Terakhir, sebaiknya gunakan 240 frame video di antara keyframe (untuk konten 30 fps, ini setara dengan 8 detik). Keyframe adalah frame video yang mandiri; tidak bergantung pada frame lain untuk dirender (lihat Struktur GOP untuk penjelasan yang lebih mendetail). Untuk pemutaran web dan seluler, kami mengizinkan jarak yang cukup jauh antar-frame utama karena hal ini memungkinkan encoder memilih penempatan 'terbaik' frame utama untuk memaksimalkan kualitas.

Contoh Parameter Command Line: Video 640x360

Dari penjelasan di atas, rekomendasi untuk video 360p adalah sebagai berikut:

  1. Tingkat CQ 36 (lihat Gambar 2b)
  2. Kecepatan bit target 276 kbps (lihat Gambar 2a)
  3. Kecepatan bit minimum yang diizinkan adalah 138 kbps (50% dari target)
  4. Kecepatan bit maksimum yang diizinkan adalah 414 kbps (150% dari target)
  5. Jarak antar-bingkai utama maksimum 240 detik
  6. Profil dua-pass, "Medium"

Hal ini memberikan parameter command line berikut untuk libvpx dan FFmpeg:

libvpx

--end-usage=cq --cq-level=36 --target-bitrate=276 --minsection-pct=50 \
  --maxsection-pct=150 --kf-max-dist=240 --passes=2 --good --cpu-used=2

FFmpeg

-crf 36 -b:v 276k -minrate 138k -maxrate 414k -g 240 -good -speed 2

Setelan Konten Premium

Dalam contoh di atas, kami menggunakan setelan encoding yang cukup cepat untuk membuat streaming video secara efisien. Namun, untuk beberapa konten (seperti film premium), sebaiknya luangkan lebih banyak waktu selama encoding untuk mendapatkan output berkualitas lebih tinggi.

Untuk konten premium, sebaiknya gunakan setelan yang sama seperti di atas, tetapi dengan preset yang berbeda, yang menginstruksikan encoder untuk meluangkan lebih banyak waktu dalam mengoptimalkan kualitas:

Mode Encoding Konten Premium dan Parameter Command Line

Tinggi Bingkai Mode Encoding libvpx FFmpeg
240 TWO_PASS_VERY_SLOW --good --cpu-used 0 -good -speed 0
360 TWO_PASS_VERY_SLOW --good --cpu-used 0 -good -speed 0
480 TWO_PASS_VERY_SLOW --good --cpu-used 0 -good -speed 0
720 TWO_PASS_SLOW --good --cpu-used 1 -good -speed 1
1080 TWO_PASS_MEDIUM --good --cpu-used 2 -good -speed 2
1440 TWO_PASS_MEDIUM --good --cpu-used 2 -good -speed 2
2160 TWO_PASS_MEDIUM --good --cpu-used 2 -good -speed 2

Gambar 2c: Mode encoding Konten Premium

Setelan Konten Olahraga dan Gerakan Tinggi

Sebaiknya gunakan encoding VBR untuk konten olahraga. Olahraga cenderung memiliki tingkat gerakan tinggi dan kompleksitas yang cukup konsisten, dan penggunaan VBR mencapai kualitas yang lebih tinggi selama periode gerakan yang lebih rendah daripada encoding QP.

Untuk command line, perbedaan utama antara mode QP dan VBR adalah Anda tidak akan menentukan tingkat CQ; jika tidak, setelan yang direkomendasikan sama.

Contoh Parameter Command Line VBR: Video 640x360

libvpx

--end-usage=vbr --target-bitrate=276 --minsection-pct=50 --maxsection-pct=150 \
  --kf-max-dist=240 --passes=2 --good --cpu-used=2

FFmpeg

-b:v 276k -minrate 138k -maxrate 414k -g 240 -good -speed 2

Setelan Animasi dan Game

Setelan Konten Bising / Berkualitas Rendah

Untuk konten yang bising, sebaiknya tingkatkan jumlah dan kekuatan frame alt-ref. Frame referensi alternatif adalah frame 'tidak terlihat', yang tidak pernah ditampilkan kepada pengguna, tetapi digunakan sebagai referensi saat membuat frame akhir (Anda dapat membaca informasi selengkapnya di sini).

Parameter berikut direkomendasikan untuk menginstruksikan VP9 agar menggunakan frame alt-ref lainnya:

libvpx

--auto-alt-ref=1 --lag-in-frames-16 --arnr-maxframes=5 --arnr-strength=3

FFmpeg

Encoding 10 Bit/HDR

Untuk encoding 10-bit, Anda sebaiknya menggunakan VP9 Profile 2. Encoding pada 10-bit tidak memerlukan lebih banyak bit, sehingga parameter lainnya tetap sama:

libvpx

--profile=2

FFmpeg

-profile 2

Setelan Encoding Live

Live Streaming

Encoding live biasanya dilakukan sebagai CBR, yang membatasi kemampuan encoder untuk memaksimalkan kualitas. Oleh karena itu, kami akan menggunakan bitrate yang lebih tinggi seperti yang ditunjukkan pada Gambar 2a.

Untuk encoding live, kita juga ingin memaksimalkan threading. Hal ini dilakukan dengan:

  1. Mengizinkan VP9 membagi video menjadi kolom (yang lebarnya tidak boleh kurang dari 256 piksel, dan harus merupakan pangkat dua);
  2. Menunjukkan kepada VP9 untuk menggunakan lebih banyak daya CPU. Tabel berikut mencantumkan rekomendasi untuk setiap resolusi.

Rekomendasi Pengubinan dan Threading

Setelan Encoder untuk Encoding CQ
Ukuran Bingkai Jumlah kolom petak Jumlah thread
320x240 1 2
640x360 2 4
640x480 2 4
1280x720 4 8
1920x1080 4 8
2560x1440 8 16
3840x2160 8 16

Gambar 2d. Pengaturan ubin dan thread yang direkomendasikan untuk encoding live

Encoding live juga akan menetapkan batas waktu ke 'realtime' untuk memastikan performa, dan akan menginstruksikan frame alt-ref untuk tidak melihat ke masa depan (yang akan memperkenalkan latensi):

Dari sini, rekomendasi untuk video 360p live adalah sebagai berikut:

  1. CBR, target kecepatan bit 386 kbps (lihat Gambar 2a)
  2. 2 kolom kartu (lihat Gambar 2d)
  3. 4 rangkaian pesan (lihat Gambar 2d)
  4. Performa real-time
  5. Tidak ada latensi karena frame alternatif (tidak ada jeda frame)

Hal ini memberikan parameter command line berikut untuk libvpx dan FFmpeg:

libvpx

--end-usage=cbr --target-bitrate=386 --cpu-used=4 --tile-columns=2 --rt --lag-in-frames=0

FFmpeg

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -r 29.97 -b:v 386k \
  -minrate 386k -maxrate 386k -c:v libvpx-vp9 -c:a libopus output.webm

Encoding VP9 Live untuk DASH/YouTube

Encoding WebRTC