Setelan yang Direkomendasikan untuk VOD
Tujuan
Bagian ini memberikan rekomendasi untuk setelan encoding VP9 saat melakukan encoding berbasis file (yaitu tidak live).
Rekomendasi ini dirancang untuk tujuan berikut:
- Keseimbangan antara kualitas dan kecepatan encoding
- Bit rate minimal untuk mencapai kualitas yang wajar
- Setelan untuk mengakomodasi berbagai jenis konten
Rekomendasi ini tidak:
- Menangani encoding live
- Mengoptimalkan untuk jenis konten tertentu (misalnya, rekaman olahraga dengan gerakan tinggi)
- Mengonfigurasi setelan untuk persyaratan jaringan atau perangkat tertentu
Encoding Resolusi Tunggal
VP9 mendukung berbagai ukuran frame, dari resolusi kecil hingga 4K. Ukuran frame yang lebih besar memberikan kualitas yang lebih tinggi, tetapi memerlukan lebih banyak bandwidth untuk pengiriman, dan lebih banyak daya pemrosesan untuk mendekode.
Jika Anda membuat satu resolusi, 640x480 adalah pilihan 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 Anda memiliki bandwidth yang bervariasi, sebaiknya buat beberapa resolusi. Pemutar Anda kemudian dapat mengontrol resolusi yang dikirim ke penonton.
Encoding video multi-resolusi sering digunakan dalam streaming bitrate adaptif, dengan pemutar video beralih antar-resolusi secara real-time berdasarkan bandwidth pengguna. Misalnya, Shaka Player memungkinkan Anda memutar ulang encoding multi-resolusi, dengan setiap encoding VP9 berada dalam file terpisah dan manifes DASH memberikan informasi tentang setiap encoding.
Untuk mengetahui informasi selengkapnya tentang pengemasan video dalam format streaming adaptif, lihat Shaka Packager. Panduan ini akan berfokus pada setelan encoding untuk VP9 di berbagai resolusi.
Setelan yang Direkomendasikan
Semua setelan di bawah dapat digunakan untuk setiap file pada berbagai resolusi. Jika digabungkan, setelan ini memberikan kumpulan komprehensif yang cocok untuk streaming adaptif. Perhatikan bahwa versi 640x480 memiliki dua versi, satu berkualitas rendah (LQ) dan yang lainnya berkualitas sedang (MQ).
Kecepatan bit
Mode Kualitas Terbatas (CQ) direkomendasikan saat mengenkode file VP9 untuk penayangan on-demand. Mode encoding ini memungkinkan Anda menentukan target bit rate rata-rata, sekaligus mengontrol kualitas maksimum video serta bit rate minimum dan maksimum.
Kecepatan bit berikut disarankan sebagai dasar untuk distribusi web dan seluler. Saran ini meminimalkan bitrate untuk 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.
Untuk contoh di atas, sebaiknya kecepatan bit minimum ditetapkan pada 50% dari kecepatan bit target, dan maksimum pada 145% dari target.
Ukuran Frame/Kecepatan Frame | Kecepatan Bit Target (VOD, kbps) | Kecepatan Bit Min. (50%) | Kecepatan Bit Maksimum (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 | 12.000 | 6000 | 17400 |
3840x2160p @ 50,60 | 18000 | 9000 | 26100 |
Gambar 2a: Kecepatan bit VOD yang direkomendasikan
Di FFmpeg, kecepatan bit dikontrol dengan perintah berikut:
FFmpeg | |
---|---|
-b:v <arg> |
Menetapkan kecepatan bit (misalnya, 500k) |
-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 menetapkan 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 |
Di FFmpeg, kualitas ditetapkan dengan perintah -crf
. Misalnya, untuk menyetel
kualitas ke 33, Anda akan menggunakan perintah -crf 33
Encoding multi-pass dan Kecepatan Encoding
Encoding berbasis file memungkinkan Anda fleksibilitas dalam kecepatan. Anda juga dapat melakukan beberapa kali pemrosesan pada materi yang sama untuk meningkatkan kualitas, dan memilih kecepatan untuk setiap pemrosesan.
Saat mengenkode file VP9 di FFmpeg, sebaiknya setel parameter -quality
ke good
, lalu setel kecepatan pass pertama dan kedua sesuai dengan tabel di bawah dengan parameter -speed
. Hal ini memberikan keseimbangan yang baik antara waktu encoding dan kualitas output.
Tinggi Bingkai | Kecepatan (Lolos Wawancara) | Kecepatan (Second Pass) |
---|---|---|
240 | 4 | 1 |
360 | 4 | 1 |
480 | 4 | 1 |
720 | 4 | 2 |
1080 | 4 | 2 |
1440 | 4 | 2 |
2160 | 4 | 2 |
Misalnya, string encoding first pass di FFmpeg mungkin menyertakan
-quality good -speed 4
.
Jarak Bingkai Utama
Sebaiknya izinkan hingga 240 frame video di antara keyframe (8 detik untuk konten 30 fps). Keyframe adalah frame video yang mandiri; tidak bergantung pada frame lain untuk dirender, tetapi cenderung lebih besar daripada jenis frame lainnya. Untuk pemutaran web dan seluler, jarak yang cukup jauh antar-bingkai utama memungkinkan encoder memilih penempatan bingkai utama terbaik untuk memaksimalkan kualitas.
Di FFmpeg, jarak keyframe dikontrol dengan perintah -g
, yang menunjukkan
jumlah frame. Untuk 240 frame, nilainya adalah -g 240
.
Rekomendasi Pengubinan dan Threading
Pengubinan membagi frame video menjadi beberapa kolom, yang sedikit mengurangi kualitas, tetapi mempercepat performa encoding. Petak harus memiliki lebar minimal 256 piksel, sehingga ada batasan jumlah petak yang dapat digunakan.
Bergantung pada jumlah petak dan resolusi frame output, lebih banyak thread CPU mungkin berguna. Secara umum, nilai beberapa thread terbatas jika ukuran frame output sangat kecil.
Setelan berikut direkomendasikan untuk pengelompokan dan threading pada berbagai resolusi.
Ukuran Bingkai | Jumlah kolom petak | Jumlah thread |
---|---|---|
320x240 | 1 (-tile-columns 0 ) |
1 |
640x360 | 2 (-tile-columns 1 ) |
2 |
640x480 | 2 (-tile-columns 1 ) |
2 |
1280x720 | 4 (-tile-columns 2 ) |
4 |
1920x1080 | 4 (-tile-columns 2 ) |
4 |
2560x1440 | 8 (-tile-columns 3 ) |
8 |
3840x2160 | 8 (-tile-columns 3 ) |
8 |
Di FFmpeg, jumlah petak dikontrol dengan parameter -tile-columns
dan jumlah thread dengan -threads
. Misalnya, encoding 640x480 akan
menggunakan -tile-columns 1 -threads 2
command line.
Command Line FFmpeg
Dengan menggabungkan rekomendasi di atas, perintah FFmpeg berikut dapat digunakan untuk mengenkode konten VP9.
Perhatikan bahwa perintah first-pass dan second-pass dirangkai bersama. Argumen
-y
dalam perintah second-pass menjawab "Ya" saat FFmpeg meminta untuk
mengganti file statistik first-pass dengan video output.
Perhatikan juga bahwa sumber 1080p digunakan untuk encoding yang menargetkan output hingga 1280x720. Sumber 4k digunakan untuk 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 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
- File input: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- File output: tos-320x240.webm (320x240, 21,73 MB)
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 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
- File input: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- File output: tos-640x360.webm (640x360, 31,53 MB)
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 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
- File input: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- File output: tos-640x480-low.webm (640x480, 51,18 MB)
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 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
- File input: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- File output: tos-640x480-medium.webm (640x480, 69,27 MB)
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 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
- File input: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- File output: tos-1280x720-24-30fps.webm (1280x720, 98,2 MB)
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 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
- File input: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- File output: tos-1280x720-50-60fps.webm (1280x720, 157,1 MB)
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 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
- File input: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- File output: tos-1920x1080-24-30fps.webm (1920x1080, 151,51 MB)
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 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
- File input: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- File output: tos-1920x1080-50-60fps.webm (1920x1080, 238,18 MB)
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 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
- File input: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- File output: tos-2560x1440-24-30fps.webm 2560x1440, 533,54 MB)
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 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
- File input: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- File output: tos-2560x1440-50-60fps.webm 2560x1440, 664,04 MB)
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 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
- File input: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- File output: tos-3840x2160-24-30fps.webm 3840x2160, 1,03 GB)
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 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
- File input: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- File output: tos-3840x2160-50-60fps.webm 3840x2160, 1,56 GB)