Kecepatan bit variabel dengan pengaturan “-vb” dan “minrate” / “maxrate” di FFmpeg

12

Untuk rendering, waktu yang diperlukan sangat berbeda.

  • -b 3500K -minrate 0K -maxrate 8000K Dibutuhkan 1 jam 17 menit
  • vb=3000k membutuhkan 2,5 jam

Apa vb 3000kdan bagaimana bedanya -b 3500K -minrate 0K -maxrate 8000K? Apakah pengaturan kecepatan bit variabel ini?

Jika saya berubah -b 3500K -minrate 3500K -maxrate 3500K, apakah itu laju bit konstan?

Scott Downey
sumber

Jawaban:

16

Silakan baca dokumentasi untuk FFmpeg, dan jalankan ffmpeg -h fulluntuk daftar opsi. Juga, lihat artikel yang saya tulis ini, yang menunjukkan perbedaan antara mode kontrol laju dalam penyandi seperti x264 dan x265.

Secara umum, inilah yang dimaksud dengan opsi:

  • -b:v(atau -vb, sama) menentukan laju bit rata-rata target untuk digunakan pembuat enkode:

    -b <int> E..VA. atur bitrate (dalam bit / s) (dari 0 hingga INT_MAX)

  • -minrate menentukan toleransi minimum untuk digunakan:

    -minrate <int> E..VA. Tetapkan toleransi bitrate minimum (dalam bit / dtk). Paling berguna dalam menyiapkan pengkodean CBR. Tidak ada gunanya sebaliknya. (dari INT_MIN ke INT_MAX)

  • -maxratemenentukan toleransi maksimum. Namun, seperti yang ditunjukkan dalam dokumentasi, ini hanya digunakan bersamaan dengan bufsize:

    -maxrate <int> E..VA. Tetapkan toleransi bitrate maksimum (dalam bit / dtk). Harus bufsizediatur. (dari INT_MIN ke INT_MAX)

    -bufsize <int> E..VA. setel ukuran buffer kontrol ratecontrol (dalam bit) (dari INT_MIN ke INT_MAX)

    Ini hanya masuk akal untuk pengkodean bit rate variabel, di mana alih-alih menggunakan laju bit konstan atau model kualitas konstan, encoder mensimulasikan transmisi dengan buffer virtual di dekoder. Opsi -minrate/ -maxrate/ -bufsizemengontrol ukuran buffer itu. Anda biasanya hanya menggunakan mode ini untuk streaming, karena teknik ini akan membatasi laju bit agar tidak melebihi nilai tertentu yang akan menyebabkan buffer decoder over-atau underflow.

Untuk meringkas, Anda memiliki beberapa opsi untuk membatasi bitrate:

  1. Untuk mengatur proses CBR, Anda harus memeriksa apa yang ditawarkan oleh pembuat enkode. Biasanya, Anda tidak dapat mencapai bitrate konstan "sempurna", karena pembuat enkode tidak akan membuang-buang bit. Pengaturan -b:v,, -minratedan -maxrateke level yang sama akan mencapai itu, misalnya untuk libx264:

    ffmpeg -i input.mp4 -c:v libx264 -x264-params "nal-hrd=cbr" -b:v 1M -minrate 1M -maxrate 1M -bufsize 2M output.ts
    

    Peringatan: Ini mungkin menghasilkan kualitas rendah untuk video yang sulit untuk disandikan, dan itu akan membuang-buang bit. Kecuali jika Anda benar-benar harus mencapai output laju konstan, jangan gunakan opsi ini.

  2. Menyiapkan proses laju bit terbatas / variabel untuk streaming. Gunakan -b:v 3500K -maxrate 3500K -bufsize 1000K, misalnya. Anda harus menyesuaikan kecepatan dan ukuran buffer ke konteksnya secara jelas. Semakin tinggi ukuran buffer, semakin tinggi variasi bitrate yang dibolehkan.

  3. Gunakan target kualitas konstan dan batasi bitrate hanya untuk menangkap paku. Misalnya, gunakan -c:v libx264 -crf 23 -maxrate 4M -bufsize 4Muntuk menyandikan pada bitrate variabel dengan CRF target 23, tetapi batasi output hingga maksimum 4 MBit / s.

slhck
sumber
1
Bagaimana cara menyandikan menggunakan bit rate variabel? seperti pada sintaks yang digunakan?
Scott Downey
Encoder apa yang ingin Anda gunakan?
slhck
ffmpeg, saya percaya yang digunakan dalam kdenlive
Scott Downey
Tidak, maksud saya seperti pada: x264 untuk video AVC H.264 / MPEG-4 atau XviD untuk MPEG-4, atau Ogg Theora, dll. Sederhananya, file apa yang Anda inginkan? MP4?
slhck
3
Lihat di sini untuk informasi lebih lanjut tentang penyandian dengan x264 di FFmpeg; terutama melihat preset (saya biasanya menggunakan preset sangat cepat, dalam tes saya dropoff terbesar di filesize adalah antara supercepat dan sangat cepat - setelah itu perbedaannya jauh lebih inkremental. YMMV tentu saja).
evilsoup