Farklı genişliklere sahip videoları ffmpeg ile sabit bir yükseklik koruma en boy oranına göre yeniden boyutlandırın


17

Şirketimizin web sitesi için birçok video dosyasını flash videoya dönüştürmek istiyorum. Tüm videoların 360p formatında olması gerekiyor, bu yüzden boyutları Nx360 olurdu.

FFMpeg, hedef çözünürlüğü G x Y olarak belirtmek için -s bağımsız değişkenini kullanır . Kaynak dosya en boy oranına bağlı olarak W idth'i bilmiyorum . Kaynak 640x480 ise hedef 480x360 olacaktır. Kaynak 848x480 ise hedef 636x360 olacaktır.

Bir ffmpeg anahtarıyla yapmanın bir yolu var mı? En boy oranını koruyacağını ve yalnızca hedef videonun yüksekliğini belirleyeceğimi mi?

Kaynak video boyutunu almak, en boy oranını hesaplamak ve daha sonra yeni bir genişlik hesaplamak için ffprobe başlatacak bir program yaparak kolayca çözebilirim.

Yanıtlar:


15

Bu video filtresini eklemeyi deneyebilirsiniz:

-vf "scale=-1:360" 

-1 bu durumda değişken / bilinmeyen anlamına gelir, bu nedenle bu filtre videoyu girişin en boy oranını korumak için yeniden boyutlandırır ve 360'ı yükseklik olarak tutar.

Benim için bu, aradığınız aynı sonucu elde etti.



6

Mevcut bir yanıta yorum yapmak için yeterli puanınız yok, ancak bu user65600'ün yanıtını takip ediyor ve belirli kodekler 2 ile bölünebilen bir genişlik / yükseklik gerektirdiğinde daha da ileri gidiyor (örn. Libx264)

-1 (değişken / bilinmeyen) kullandığınızda, tek bir # döndürebilir. trunc(ow/a/2)*2Çift sayıyı garanti etmek için , en boy oranını korurken en yakın çift sayıyı otomatik olarak hesaplayacak gibi bir şey kullanmanız gerekir .

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

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


3

-vf "scale=trunc(ow/a/2)*2:360" "kendine gönderme" hatası nedeniyle çalışmaz.

Bunun yerine, aşağıdakiler çalışır:

-vf "ölçek = -1: 360, ölçek = trunc (iw / 2) * 2: 360"

Bu nedenle, birbirini izleyen iki ölçekleme tarafından kendi kendine referanslama yapmaktan kaçınılır ve ikinci aşamada yuvarlama yapılır. Sevimli, değil mi? :)


Basit filtre grafiğinin ölçeği = -1: 480; scale = trunc (iw / 2) * 2: 480 'tam olarak bir giriş ve çıkışa sahip değildir. Filtreler açılırken hata oluştu!
digitalPBK
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.