Saya sudah mencoba memikirkannya sendiri, tetapi banyak sekali opsi yang membuat saya bingung.
Saya ingin menggunakan idealnya baik ffmpeg
atau mencoder
(atau sesuatu yang lain, tetapi kedua saya tahu saya telah bekerja) untuk mengkonversi video yang masuk ke ukuran layar tetap.
Jika video lebih lebar atau terlalu pendek untuk itu, maka potong video tengah. Jika itu bukan ukuran yang tepat, ukurannya naik atau turun untuk membuatnya persis dengan ukuran layar tetap.
Hal terakhir yang saya butuhkan adalah 720x480 dalam AVI XVid dengan trek audio MP3.
Saya telah menemukan banyak halaman yang menunjukkan cara mengubah ukuran ke resolusi maksimum, tetapi saya membutuhkan video untuk menjadi resolusi yang tepat (dengan bagian-bagian tambahan dipotong, tidak ada bilah hitam).
Adakah yang bisa memberitahu saya baris perintah untuk menjalankan - atau setidaknya mendapatkan saya / sebagian besar jalan ke sana? Jika perlu beberapa perintah baris (jalankan X untuk mendapatkan resolusi, lakukan perhitungan ini dan kemudian jalankan Y dengan output dari perhitungan itu) Saya bisa skrip itu.
sumber
Jawaban:
Saya bukan guru ffmpeg, tapi ini seharusnya bisa.
Pertama-tama, Anda bisa mendapatkan ukuran video input seperti ini:
Dengan ffmpeg yang cukup baru, Anda dapat mengubah ukuran video Anda dengan opsi-opsi ini:
Anda dapat mengatur lebar atau tinggi
-1
untuk membiarkanffmpeg
mengubah ukuran video menjaga rasio aspek. Sebenarnya,-2
ini adalah pilihan yang lebih baik karena nilai yang dihitung harus genap. Jadi Anda bisa mengetik:Setelah Anda mendapatkan video, mungkin lebih besar dari yang diharapkan
720x480
karena Anda membiarkanffmpeg
menghitung tinggi, jadi Anda harus memotongnya. Ini bisa dilakukan seperti ini:Akhirnya, Anda dapat menulis skrip seperti ini (dapat dengan mudah dioptimalkan, tetapi saya membuatnya mudah dibaca):
sumber
echo "scale=3; ${in_width}/${out_width}*1000"| bc | awk '{printf "%d", $0}'
h_rate =echo "scale=3; ${in_height}/${out_height}*1000"| bc | awk '{printf "%d", $0}'
# Mari kita ambil sisi yang lebih pendek, jadi video akan setidaknya sebesar ukuran # yang diinginkan, dan pangkas sisi yang lebih panjang: crop_side = 'n' jika [$ {w_rate} -gt $ {h_rate}]; kemudian scale = "- 2: $ {out_height}" crop_side = 'w' else scale = "$ {out_width}: - 2" crop_side = 'h' fi `Ganti "input.file" dengan nama file input Anda.
sumber
-c:a copy scaled_result.mp4
Jika Anda ingin memotong dan menskala dalam sekali jalan, Anda bisa membuat rantai penyaring potong-kemudian-skala seperti:
Pertama di atas memotong video ke potret 16: 9, kemudian menskala ke ketinggian 400px x lebar (nomor genap) yang sesuai.
sumber
Saya baru mengenal ffmpeg tetapi sekarang memiliki konverter kecil yang bagus di VB.NET yang membuat film mentah dari berbagai format output untuk digunakan pada perangkat kecil yang memiliki akses kartu SD tetapi tidak cukup daya untuk memecahkan kode video yang kompleks.
Karena cara kerjanya ketika mengubah ukuran dan memotong saya harus kode secara manual dan membangun parameter. Pada dasarnya saya perlu tahu lebar dan tinggi yang dihasilkan.
Saya punya 2 kotak centang untuk opsi: -
Pertahankan Rasio Aspek (X) Isi Semua Piksel (X)
Hanya 4 variabel yang diperlukan sebagai input (1) Lebar video asli, (2) Tinggi video asli, (3) Lebar perangkat, (4) Tinggi perangkat.
Meskipun untuk VB.NET bisa diadaptasi cukup mudah untuk bahasa apa pun.
sumber