Mengubah ukuran video video dengan memotong "pan dan memindai"

8

Saya mencoba menyiapkan koleksi ~ 120 klip video untuk diputar di VLC Player dan diproyeksikan pada proyektor beresolusi rendah (1024x768) selama acara musik elektronik DIY. Klip sumber semua visual abstrak super tinggi dalam format .mov, masing-masing sekitar 4GB. Mereka memiliki berbagai aspek rasio. Ada yang 4: 3, ada yang 16: 9, ada yang 1: 1 (persegi) dll.

Saya ingin memotong / menskalakan semua klip hingga 1024x768 sambil mempertahankan rasio aspek asli masing-masing. Dan, saya ingin melakukannya tanpa membubuhkan surat dan meninggalkan bilah hitam di bagian atas / bawah atau kiri / kanan. Pada dasarnya apa yang ingin saya lakukan adalah menguranginya ke titik di mana mereka sepenuhnya mengisi layar 1024x768, dan tidak lebih kecil. Saya percaya bahwa pada dasarnya ini adalah teknik "pan and scan"?

(Tidak masalah jika bagian dari gambar dihapus dalam proses - mereka hanya berputar bentuk geometris dan semacamnya.)

Apakah ada cara saya bisa mengubah ukuran semua ~ 120 video dalam batch menggunakan perintah FFMPEG tunggal? Atau, adakah alat lain untuk Windows atau Linux yang bisa digunakan? Saya tidak terlalu peduli format output apa - hanya sesuatu yang dapat dimainkan VLC tanpa menjadi berombak.

Derrick Miller
sumber

Jawaban:

3

Jika Anda hanya memiliki 4: 3 dan 16: 9 video, saya sarankan:

ffmpeg -i input.mov -filter:v 'scale=-1:768,crop=1024:ih' \
-c:v libx264 -crf 23 -preset veryfast output.mp4

Itu akan skala video ke ketinggian 768, skala lebar untuk menjaga rasio aspek; dan kemudian memotong lebar menjadi 1024, menjaga ketinggian di 768. Fakta bahwa Anda menggunakan video 1: 1 juga menyulitkan hal-hal: video 3000x3000 akan diskalakan ke 768x768, dan kemudian ffmpeg akan mencoba memotongnya ke 1024x768, yang jelas tidak akan berhasil, karena panen tidak boleh lebih besar dari input ...

Satu-satunya cara saya bisa memikirkan ini untuk bekerja adalah memotong semua video, yang Anda nyatakan tidak akan menjadi masalah. Ini akan memotong lebar output menjadi sama dengan tinggi input, dan tinggi output menjadi 3/4 dari tinggi input; dan kemudian itu akan skala video ke ketinggian 768, menjaga rasio aspek dengan lebar:

ffmpeg -i input.mov -filter:v 'crop=ih:3/4*ih,scale=-1:768' \
-c:v libx264 -crf 23 -preset veryfast output.mp4

Ini hanya akan berfungsi jika file asli memiliki ketinggian 1024 atau lebih. Perhatikan bahwa x264 hanya menerima lebar atau tinggi genap, yang dapat menyebabkan masalah (tetapi tidak seharusnya dalam kasus ini).

Untuk mengonversi setiap .mov di direktori, Anda dapat menggunakan for for:

for f in *.mov; \
do ffmpeg -i "$f" -filter:v 'crop=ih:3/4*ih,scale=-1:768' \
-c:v libx264 -crf 23 -preset veryfast "${f/%mov/mp4}"; \
done

Untuk melakukannya secara rekursif, Anda dapat menggunakan find:

find . -type f -name *.mov -exec bash -c \
'ffmpeg -i "$0" -filter:v "crop=ih:3/4*ih,scale=-1:768" \
-c:v libx264 -crf 23 -preset veryfast "${0/%mov/mp4}"' {} \;

Semua ini membutuhkan versi terbaru dari ffmpeg.

Evilsoup
sumber