Ridimensiona i video con diverse larghezze ad un'altezza fissa preservando le proporzioni con ffmpeg


17

Vorrei convertire molti file video in video flash per il sito Web della nostra azienda. Ho l'obbligo che tutti i video debbano essere in formato 360p, quindi le loro dimensioni sarebbero Nx360.

FFMpeg usi -s argomento per specificare risoluzione destinazione come W x H . Non conosco W idth, poiché dipende dalle proporzioni del file di origine. Se la sorgente è 640x480, la destinazione sarà 480x360. Se l'origine è 848x480, l'obiettivo sarà 636x360.

C'è un modo per farlo con qualche interruttore di ffmpeg? Che conserverà le proporzioni e specificherò solo l'altezza del video target?

Potrei facilmente risolverlo creando un programma che avvierà ffprobe per ottenere le dimensioni del video sorgente, calcolare le proporzioni e quindi calcolare una nuova larghezza.

Risposte:


15

Potresti provare ad aggiungere questo filtro video:

-vf "scale=-1:360" 

-1 in questo caso significa variabile / sconosciuto, quindi questo filtro ridimensiona il video per preservare le proporzioni dell'input, mantenendo 360 come altezza.

Per me questo ha ottenuto lo stesso risultato che stai cercando.



6

Non hai ancora abbastanza punti per commentare una risposta esistente, ma questo segue la risposta di user65600 e va oltre quando specifici codec richiedono una larghezza / altezza che è divisibile per 2 (ad esempio libx264)

Quando si utilizza -1 (variabile / sconosciuto), può restituire un numero dispari. Per garantire un numero pari, devi usare qualcosa di simile trunc(ow/a/2)*2, che calcolerà automaticamente il numero pari più vicino mantenendo le proporzioni.

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

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


3

-vf "scale=trunc(ow/a/2)*2:360" non funziona a causa dell'errore di "autoreferenziazione".

Invece, il seguente funziona:

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

L'autoreferenziazione viene quindi evitata da due ridimensionamenti consecutivi e l'arrotondamento viene eseguito nel secondo passaggio. Carino, no? :)


Scala del filtro semplice '= -1: 480; scale = trunc (iw / 2) * 2: 480 'non ha esattamente un input e un output. Errore durante l'apertura dei filtri!
digitalPBK
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.