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
libx264
sebagaic:v
. Dalamfs
contoh, Anda tidak mentranskode video, karena-c:v copy
digunakan. Jadi,preset
dancrf
juga tidak memiliki efek apa pun.Jawaban:
The
fs
parameter akan berhenti encode setelah hits nilainya. Jadi, jika output mencapai10MB
sasaran 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%
sumber