Bagaimana cara membatasi ukuran file dengan ffmpeg?


10

Saya ingin menyandikan video, yang memiliki panjang 60 detik, ke target atau ukuran maksimum 10 MB .

Ada dua pendekatan yang saya tahu. Satu dijelaskan di FFMPEG-Wiki, dan yang lainnya saya temukan di dokumentasi. Sayangnya, saya belum menemukan penjelasan kapan harus menggunakan metode apa.

Apakah ada metode yang direkomendasikan? Jika tidak, apa kelebihan / kekurangan setiap metode?

1) Hitung dan atur Bitrate agar sesuai dengan panjang video seperti yang dijelaskan dalam ffmpeg-wiki

(10 MB * 8192 [mengkonversi MB ke kilobit]) / 60 detik = ~ 1365 kbits / s bitrate total 1365k - 128k (bitrate audio yang diinginkan) = 1237k bitrate video

ffmpeg -y -i input -c:v copy -preset medium -b:v 1237k -pass 1 -c:a copy -b:a 128k -f mp4 /dev/null && \
ffmpeg -i input -c:v libx264 -preset medium -b:v 1237k -pass 2 -c:a libfdk_aac -b:a 128k output.mp4

2) Gunakan -fs parameter dan biarkan ffmpeg mencari tahu.

ffmpeg -i input -c:v copy -c:a copy -preset medium -crf 23 -fs 10485760 output.mp4

1
Pada contoh pertama Anda, langkah pertama juga harus digunakan libx264sebagai c:v. Dalam fscontoh, Anda tidak mentranskode video, karena -c:v copydigunakan. Jadi, presetdan crfjuga tidak memiliki efek apa pun.
Gyan

Jawaban:


11

The fsparameter akan berhenti encode setelah hits nilainya. Jadi, jika output mencapai 10MBsasaran saat mengkodekan 15 detik, maka itulah durasi file output Anda.

Jika Anda ingin memastikan bahwa seluruh file dikodekan tetapi tidak melewati ukuran target yang ditetapkan, maka gunakan metode bitrate. Untuk mengakomodasi muxing overhead dan data lain dalam ukuran target, atur bitrate video Anda sedikit lebih rendah dengan, katakanlah, 1-2%

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.