Ubah ukuran video dengan lebar berbeda menjadi rasio aspek menjaga ketinggian tetap dengan ffmpeg

17

Saya ingin mengonversi banyak file video ke video flash untuk situs web perusahaan kami. Saya memiliki persyaratan bahwa semua video harus dalam format 360p, jadi ukurannya adalah Nx360.

FFmpeg menggunakan -s argumen untuk menentukan resolusi target as W x H . Saya tidak tahu W idth, karena tergantung pada aspek rasio file sumber. Jika sumbernya 640x480, target akan menjadi 480x360. Jika sumbernya 848x480, targetnya adalah 636x360.

Apakah ada cara untuk melakukannya dengan beberapa saklar ffmpeg? Itu akan mempertahankan rasio aspek dan saya hanya akan menentukan ketinggian video target?

Saya dapat dengan mudah menyelesaikannya dengan membuat program yang akan meluncurkan ffprobe untuk mendapatkan ukuran video sumber, menghitung rasio aspek dan kemudian menghitung lebar baru.

Axarydax
sumber

Jawaban:

15

Anda dapat mencoba menambahkan filter video ini:

-vf "scale=-1:360" 

-1 dalam hal ini berarti variabel / tidak dikenal, sehingga filter ini mengubah ukuran video untuk mempertahankan rasio aspek input, menjaga 360 sebagai ketinggian.

Bagi saya ini mencapai hasil yang sama seperti yang Anda cari.

pengguna65600
sumber
6

Belum memiliki cukup poin untuk mengomentari jawaban yang ada, tetapi ini mengikuti jawaban pengguna65600 dan melangkah lebih jauh ketika codec tertentu membutuhkan lebar / tinggi yang dapat dibagi 2 (misalnya libx264)

Saat Anda menggunakan -1 (variabel / tidak diketahui), itu dapat mengembalikan # ganjil. Untuk menjamin # genap, Anda harus menggunakan sesuatu seperti trunc(ow/a/2)*2, yang akan secara otomatis menghitung genap # terdekat sambil mempertahankan rasio aspek.

-vf "scale=trunc(ow/a/2)*2:360"

Sumber: https://ffmpeg.org/trac/ffmpeg/ticket/309

Toland H
sumber
3

-vf "scale=trunc(ow/a/2)*2:360" tidak berfungsi karena kesalahan "referensi-sendiri".

Alih-alih, yang berikut ini berfungsi:

-vf "scale = -1: 360, scale = trunc (iw / 2) * 2: 360"

Referensi diri dengan demikian dihindari oleh dua skala berturut-turut, dan pembulatan dilakukan pada langkah kedua. Lucu bukan? :)

ddistill
sumber
Skala filtergraph sederhana = -1: 480; scale = trunc (iw / 2) * 2: 480 'tidak memiliki tepat satu input dan output. Kesalahan saat membuka filter!
digitalPBK