Konversi video ke ukuran layar tetap dengan memotong dan mengubah ukuran

14

Saya sudah mencoba memikirkannya sendiri, tetapi banyak sekali pilihan yang membuat saya bingung.

Saya ingin menggunakan idealnya baik ffmpegatau mencoder(atau sesuatu yang lain, tetapi keduanya 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 XVid AVI 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.

Andy Jeffries
sumber

Jawaban:

22

Sesuatu seperti ini harus bekerja dengan parameter yang tepat untuk setiap kasus:

Catatan: Jawaban asli telah diposting di tautan ini: Bagaimana saya bisa memotong video dengan ffmpeg? yang awalnya diposting oleh saya dan diedit beberapa kali untuk memperbaruinya ke opsi terbaru di ffmpeg versi terbaru. Terima kasih banyak untuk slhck , Jonathan. , Anton Rudeshko , LordNeckbeard dan pengembang masa depan.


Di FFmpeg versi terbaru, gunakan cropfilter :

ffmpeg -i in.mp4 -filter:v "crop=out_w:out_h:x:y" out.mp4

Di mana opsinya adalah sebagai berikut:

  • out_w adalah lebar dari persegi panjang keluaran
  • out_h adalah tinggi dari persegi panjang keluaran
  • xdan ytentukan sudut kiri atas dari persegi panjang keluaran

Gambar asli

gambar asli
Gambar 320x240 asli

Contoh 1

80x60

Untuk memotong bagian 80 × 60, mulai dari posisi (200, 100):

ffmpeg -i in.mp4 -filter:v "crop=80:60:200:100" -c:a copy out.mp4
  • Audio disalin stream dalam contoh ini, sehingga pengodean ulang dihindari.

Contoh 2

kuartal kanan bawah

Untuk memotong kuartal kanan bawah:

ffmpeg -i in.mp4 -filter:v "crop=in_w/2:in_h/2:in_w/2:in_h/2" -c:a copy out.mp4

Ini sama dengan:

ffmpeg -i in.mp4 -filter:v "crop=320/2:240/2:320/2:240/2" -c:a copy out.mp4

Yang sama dengan:

ffmpeg -i in.mp4 -filter:v "crop=240:120:240:120" -c:a copy out.mp4
  • Anda dapat merujuk ke ukuran gambar input dengan in_wdan in_hseperti yang ditunjukkan dalam contoh pertama ini. Lebar dan tinggi keluaran juga dapat digunakan dengan out_wdan out_h.

Contoh 3

20 piksel dari atas, dan 20 dari bawah

Pangkas 20 piksel dari atas, dan 20 dari bawah:

 ffmpeg -i in.mp4 -filter:v "crop=in_w:in_h-40" -c:a copy out.mp4
  • Filter akan secara otomatis memusatkan pemangkasan jika xdan ydihilangkan seperti dalam contoh ini.

Pratinjau

Anda dapat mengambil krop (heh heh) dan melihatnya secara langsung dengan ffplay:

ffplay -i input -vf "crop=in_w:in_h-40"

Dengan cara ini Anda dapat bereksperimen dan menyesuaikan pemangkasan Anda tanpa perlu menyandikan, melihat, mengulangi.

Catatan

  • crop saring dokumentasi

  • Encoder default untuk MP4 adalah libx264(video H.264) atau mpeg4( video MPEG-4 Bagian 2) tergantung pada versi Anda ffmpeg. Lihat FFmpeg Wiki: H.264 Video Encoding Guide untuk info lebih lanjut.

  • Alih-alih memotong dan menyandikan ulang, pertimbangkan memotong saat pemutaran. Ini dimungkinkan dengan pemain mana pun yang layak digunakan.

  • Kuno ffmpegmembangun digunakan -croptop, -cropbottom, -cropleft, -croprightpilihan bukan cropfilter. Jika ini yang terjadi untuk Anda maka dapatkan yang modernffmpeg . Pengembangannya sangat aktif dan tidak ada alasan untuk menggunakan barang antik.

Geppettvs D'Constanzo
sumber
Poin ekstra untuk Meninjau dengan ffplayyang membuat menggunakan ffmpeguntuk memotong video ukuran layar yang bisa diterapkan dalam praktek.
SpeedCoder5