Saya menggunakan ffmpeg untuk menyandikan video saya untuk mengunggahnya di web. Saya melihat posting ini tentang menggunakan ffmpeg, tetapi tidak cukup mengerti bagaimana mempertimbangkan nilai-nilai.
Misalkan saya punya video ukuran 70 MB dengan durasi 4 menit. Bagaimana saya akan mempertimbangkan nilai untuk bendera ini: -b:v
, -maxrate
dan -bufsize
untuk perintah ini?
ffmpeg -i input -codec:v libx264 -profile:v main -preset slow -b:v ? -maxrate ? -bufsize ? -vf "scale=720:trunc(ow/a/2)*2" -threads 0 -codec:a libfdk_aac -movflags +faststart output
Atau adakah nilai normal, seperti untuk crf
nilai 19-24? Saya akan sangat menghargai bantuan dan bimbingan Anda.
Jawaban:
Ini sangat tergantung pada kecepatan unggah Anda.
bufsize
akan menentukan bagaimana ffmpeg agama menjaga bitrate Anda konstan. Jika Anda menetapkanbufsize
64k, sesuai FFmpeg Wiki: Membatasi bitrate output , itu akan menghitung bitrate saat ini setiap 64 kilobyte dan menyesuaikan sesuai. Ukuran yang lebih kecil untukbufsize
dapat berbahaya bagi kualitas karena tidak memungkinkan cukup ruang di antara pemeriksaan x264 untuk melakukan perubahan mendadak - Anda akan mendapatkan blockiness.Jika Anda
maxrate
640kbps, dan Andabufsize
64k, maka setiap persepuluh x264 kedua akan diperiksa. Ini kurang optimal - FFmpeg Wiki: Pengkodean untuk situs streaming merekomendasikan untuk menjalankannya setiap 1 hingga 2 detik. Jika ini tidak masuk akal, anggap itu sebagaimaxrate
/bufsize
= frekuensi pemeriksaan. Jaga frekuensi ini antara 1 dan 2 detik sebagai aturan praktis.Jika Anda mengatur keduanya
maxrate
danbufsize
, Anda harus:maxrate
berapa pun kecepatan unggahan terendah Anda (dalam contoh wiki ffmpeg , ini adalah 80% dari total kecepatan unggah, tetapi jarak tempuh Anda mungkin beragam).bufsize
ke tempat yang sama denganmaxrate
(satu detik) dan dua kali darimaxrate
(2 detik) Anda. Jika ini masih belum cukup rendah, turunkanmaxrate
dan atur ulangbufsize
.Kemudian, Anda harus bermain-main sedikit, tetapi karena Anda harus mulai di suatu tempat saya baru saja mulai
maxrate
sekitar 600k, yang biasanya cukup memuaskan bagi saya sebelum saya gunakancrf
untuk semuanya.Jika mau, Anda dapat mencoba nilai yang lebih rendah untuk
bufsize
, seperti untuk setiap tiga atau empat detik, hanya untuk melihat bagaimana nilai mengubah bagaimana output Anda terlihat. Kemudian Anda dapat menentukan seberapa besar Anda harus mengkhawatirkannya untuk video Anda.Tidak ada nilai normal, sungguh - apa yang
crf
dilakukan adalah mengoptimalkan output berdasarkan apa yang dianggapnya sebagai ukuran buffer terbaik untuk mempertahankan berapa pun rate yang ditetapkan. Itu mencoba untuk menjaga ukuran file serendah sambil mempertahankan beberapa kualitas, dengan biaya paku sesekali.sumber
crf
, maka saya tidak perlu menentukanbitrate
,buffsize
danmaxrate
? Dan jika demikian, mana yang lebih efisien (gunakancrf
ataubitrate
,buffsize
danmaxrate
)?bufsize
danmaxrate
. Anda tidak perlubitrate
. Seperti kata Ely, itu akan membuatnya lebih baik untuk streaming.