Saya perlu memasukkan video ke 640x360 (maksimum yang dapat ditangani oleh pemutar ponsel saya), selain juga menjaga rasio aspek , tetapi saya juga ingin video tidak berubah jika lebih kecil dari 640x360 (tidak ada gunanya meningkatkan skala setelah semua).
Apakah ada cara untuk mendapatkan perilaku ini menggunakan command line ffmpeg?
min(…)
tetapi yang paling mudah dengan skrip sederhana yang mem-parsing dimensi. Lihat perintah saya di sini untuk contoh tentang apa yang dapat dilakukan: superuser.com/questions/547296/…Jawaban:
Dengan versi ffmpeg yang lebih baru, Anda dapat menggunakan opsi
scale
filterforce_original_aspect_ratio
. Misalnya, agar sesuai dengan video menjadi 1280 × 720, tanpa upscaling (lihat posting ini untuk info lebih lanjut):Di sini,
scale
filter menskala hingga 1280 × 720 jika input video lebih besar dari itu. Jika lebih kecil, itu tidak akan ditingkatkan. Thepad
filter diperlukan untuk membawa video output ke 1280 × 720, dalam hal rasio aspek atau ukuran berbeda dari ukuran target.Dengan versi ffmpeg yang lebih lama, ada solusi yang agak kabur. Pertama, tentukan lebar, tinggi, dan rasio aspek dari output Anda. Ini akan menyelamatkan kita dari mengetik.
Sekarang, mari kita terapkan perintah filter super kompleks yang ditulis Jim Worrall :
Saya tidak akan menjelaskan apa yang dilakukan semua ini, tetapi pada dasarnya Anda dapat memberi makan video apa pun, dan itu hanya akan turun, bukan kelas atas. Jika Anda siap, Anda dapat membedah filter ke dalam ekspresi individualnya. Dimungkinkan untuk mempersingkat ini, tetapi berfungsi seperti itu juga.
sumber
Versi yang lebih mudah dibaca dapat terlihat seperti berikut:
640 / iw adalah faktor penskalaan horizontal dan 360 / ih adalah faktor penskalaan vertikal
Anda ingin memasangkan gambar berskala di dalam kotak keluaran dan menjaga rasio aspek (penyimpanan). Anda melakukan ini dengan memilih faktor penskalaan terkecil dengan fungsi minimum: min (640 / iw, 360 / ih)
Anda ingin mencegah peningkatan (mis. Faktor penskalaan> 1.0) sehingga Anda menambahkan fungsi minimum lainnya: min (1, min (640 / iw, 360 / ih))
Langkah selanjutnya adalah menghitung resolusi keluaran dengan mengalikan faktor penskalaan dengan lebar-masukan dan tinggi-masukan:
lebar-keluaran = iw * min (1, min (640 / iw, 360 / ih))
output-height = ih * mnt (1, mnt (640 / iw, 360 / ih))
Langkah terakhir adalah membuat perintah filter. Tidak perlu menentukan tinggi output, Anda dapat menentukan -1 dan ffmpeg akan menjaga rasio aspek dengan menerapkan faktor penskalaan yang sama dengan lebar.
sumber
Saya memiliki masalah yang sama juga, tetapi diselesaikan dengan memasang video dalam bujur sangkar 640x640 (karena video vertikal dibuat dengan smartphone).
Jadi dengan menggunakan logika immerzi dan beberapa penelitian saya berakhir dengan ini:
bagian terakhir adalah untuk memiliki ketinggian yang dapat dibagi 2 yang dibutuhkan oleh banyak encoders.
sumber