Konversi video ke WebM dengan ffmpeg / avconv

18

Saat mencoba mengoptimalkan ukuran video rumahan saya, saya mengonversinya beberapa di antaranya ke WebM sebagai pengujian, menggunakan Pitivi di Xubuntu. Perbedaan ukurannya signifikan. File webm yang dihasilkan hanya sekitar 10% dari file asli, sedangkan kualitas gambarnya terlihat hampir sama dengan saya.

Saya juga mencoba melakukan konversi menggunakan avconvsehingga saya bisa skrip itu, tetapi file yang dihasilkan terlihat sangat jelek. Setelah melihat pengaturan rendering di Pitivi saya mencoba beberapa parameter:, avconv -i $1 -q 5 -qmin 0 -qmax 63 ${1%.*}.webmtetapi kualitasnya masih terlihat seperti omong kosong, jadi sepertinya saya hilang / menggunakan beberapa parameter yang salah. Adakah yang tahu parameter mana yang benar untuk digunakan untuk mengonversi film H264 ke webm dan mendapatkan kualitas yang sama seperti dari Pitivi?

Ini adalah pengaturan di Pitivi: menciptakan Proyek Pitivi Merender ke webm (video html5) konfigurasi codec

jeroen
sumber

Jawaban:

53

Catatan: Informasi ini didasarkan pada Wiki FFmpeg pada penyandian VP9 . Silakan merujuk ke artikel itu untuk informasi lebih lanjut - itu akan terus dipelihara dan diperluas. Untuk hasil terbaik, Anda harus menggunakan versi terbaru ffmpegdengan mengunduhnya dari situs web mereka (versi statis akan mencukupi; ini berisi libvps-vp9pembuat enkode).

Tingkat Bit Variabel

Pengodean VBR memberi Anda kualitas keseluruhan yang optimal, karena pembuat kode dapat dengan bebas memilih berapa banyak bit yang akan ditetapkan ke suatu bingkai. Pilih mode ini kecuali Anda menyiapkan video untuk streaming dengan bitrate konstan.

Opsi 1: Pengkodean kualitas konstan

Biasanya, jika Anda tidak ingin menargetkan ukuran file tertentu, Anda harus membiarkan bitrate bervariasi secara bebas, karena itu akan mengarah pada kualitas tertinggi. Anda dapat melakukan ini dengan mengatur bitrate ke 0 dan faktor laju konstan ( CRF ) ke tingkat kualitas target:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm

Nilai CRF bisa dari 0–63. Nilai yang lebih rendah berarti kualitas yang lebih baik. Nilai yang direkomendasikan berkisar antara 15–35, dengan 31 direkomendasikan untuk video HD 1080p. Google memiliki panduan dengan info lebih lanjut tentang itu .

Opsi 2: Pengkodean dua-pass dengan bitrate target

Jika Anda ingin file Anda memiliki bitrate atau ukuran file target tertentu, Anda perlu menentukan kecepatan dan menggunakan pengkodean dua-pass (yang akan memastikan distribusi kualitas yang optimal). Di sini kita memilih 5 MBit / s, yang seharusnya cukup untuk konten 1080p.

ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 1 -f webm /dev/null && \
ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 2 output.webm

Pengguna Windows harus menggunakan, NULbukan /dev/null, dan ^bukannya \.

Tingkat Bit Konstan

Pertama-tama, libvpx menawarkan mode penyandian bitrate konstan dan variabel . Bitrate konstan harus dihindari sedapat mungkin (kecuali Anda menargetkan ukuran file tertentu atau skenario streaming), karena kualitas rata-rata per ukuran file akan lebih buruk. Namun, Anda dapat mencoba mengatur bitrate konstan jika tidak ada yang bekerja untuk Anda, misalnya dengan 1 MBit / s:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -minrate 5M -maxrate 5M -b:v 5M output.webm

Lihatlah output dan menambah atau mengurangi bit rate sesuai keinginan Anda (atau batasan ukuran file). Misalnya, Anda dapat menggunakan 500Katau 5M, dan lain-lain.

Anda harus menentukan -minrate, -maxratedan bitrate -b:vagar encoder menggunakan CBR. Mereka semua harus memiliki nilai yang sama — jika tidak maka akan memilih bitrate target yang berbeda dan melakukan pengkodean VBR, tetapi dengan kualitas buruk.

Audio

Codec audio saat ini pilihan untuk encoding VP9 adalah Opus. FFmpeg akan memilih encoder yang diperlukan dan opsinya secara default. Jika Anda ingin mengatur secara eksplisit -c:a libopus, Anda dapat melakukannya juga. Lihat libopusdokumentasi untuk opsi lebih lanjut.

slhck
sumber
4
Ini, saat ini, panduan tunggal terbaik untuk penyandian VP8 di seluruh internet. Bagus sekali, kuharap aku bisa lebih baik sekali!
evilsoup
@ evilsoup Terima kasih. Saya masih mengutak-atiknya dan akan menambahkan halaman baru di wiki FFmpeg nanti.
slhck
Ini benar-benar jawaban yang luar biasa! Saya sekarang mengerti mengapa video saya selalu dalam kualitas rendah yang sama, karena saya sebenarnya selalu menggunakan standar 256 kBit / s. Terima kasih banyak!
jeroen
Apa perbedaan ukuran antara mp4 asli dan webm yang dikonversi?
switz
1
@Dan saya baru saja memperbarui panduan - memperhatikan bahwa itu agak ketinggalan jaman. Senang Anda menemukannya bermanfaat.
slhck