2012-06-07 10 views
10

Sto cercando di ridimensionare un video in modo che sia sempre largo 512 in cui l'altezza cambia in proporzione al video originale. Una volta ridimensionato, voglio quindi applicare una filigrana/sovrapposizione al video, quindi il video si ridimensionerà ma la filigrana non lo farà.FFmpeg - Come ridimensionare un video e applicare una filigrana?

io sono in grado di raggiungere ciascuno di questi separatamente utilizzando i seguenti filtri:

Scala

-vf "scale=512:-1" 

Watermark

-vf "movie=watermark.png [watermark]; [in][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]" 

Essi lavorano con successo per conto proprio.

Tuttavia quando si cerca di combinare le due cose, Im che ha un po 'di problemi.

Avendo entrambi come parametri, naturalmente, non funziona come uno sarà prioritario rispetto alle altre.

Ive ha provato:

-vf "scale=512:-1,movie=watermark.png [watermark]; [in][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]" 

mio pensiero era che la scala sarebbe stata applicata prima poi la filigrana, ma tutto quello che ottiene è un errore

Troppi ingressi specificati per il filtro "film" .

Errore durante l'apertura dei filtri!

Quindi, modificare a, a; ha provocato:

Scala di filtro semplice = 512: -1; movie = watermark.png [filigrana]; [In] [filigrana] overlay = (main_w-overlay_w)/2: (main_h-overlay_h)/2 [out]' non ha esattamente un ingresso e di uscita.

Errore durante l'apertura dei filtri!

Suppongo di dover fare qualcosa di più con i filtri, ma sto cercando di capirlo.

Qualche idea a qualcuno?

Molte grazie in anticipo.

+2

Non correlato alla programmazione - provare http://superuser.com? –

+0

Penso che sia meglio prima ridimensionare l'immagine della filigrana e dopo averla applicata nel video della scala. Puoi provare a fare una pipe tra i due processi. –

risposta

14

Grazie a entrambi @DiJuMx e @LordNeckbeard, entrambi mi avete avvicinato alla mia soluzione. Non ho ancora provato l'opzione filter_complex ma sicuramente sembra più semplice.

La soluzione che ho trovato a lavorare è:

-vf "movie=watermark.png [watermark]; [in]scale=512:trunc(ow/a/2)*2 [scale]; [scale][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]" 

noti che Ive sostituito il -1 nella scala come che aveva il potenziale di causare un numero dispari di pixels in altezza del video durante il ridimensionamento che causerebbe quindi errori di codifica.

16

È possibile utilizzare l'opzione -filter_complex con i filtri di scala e di sovrapposizione:

ffmpeg -i input.mp4 -i logo.png -filter_complex "[0:v]scale=512:-1[bg];[bg][1:v]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" output 
  • vedere la documentazione scale e overlay filtro per maggiori informazioni.
  • Non è necessario il filtro di origine movie come negli altri esempi.
  • È possibile aggiungere -c:a copy se si vuole stream copy (ri-mux) l'audio originale, invece di ri-codifica esso.Questo è utile se i formati del contenitore di input e di output sono gli stessi.
  • L'esempio posizionerà il logo al centro. Per le altre opzioni di posizionamento:
    • In alto a sinistra con 10 px padding: overlay=10:10
    • In alto a destra con 10 px padding: overlay=W-w-10:10
    • In basso a destra con imbottitura 10 px: overlay=W-w-10:H-h-10
    • In basso a sinistra con 10 px padding: overlay=H-h-10:10
0

Da quello che ho capito, questo potrebbe funzionare:

-vf "movie=watermark.png [watermark]; [in] scale=512:-1,[watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]" 

Si applica il filtro di scala all'ingresso "[in]".

Purtroppo non ho molta esperienza con i filtri su ffmpeg quindi non posso fare altro. Scusa