Aggiungi una sovrapposizione di immagini davanti al video usando ffmpeg


31

Ho molti video e devo mettere un'immagine davanti a loro per circa 5 secondi, ma aggiungerla manualmente e renderizzarla ogni volta richiederebbe davvero molto tempo, quindi sto chiedendo se è possibile farlo tramite ffmpeg e se tu potrei, per favore, darmi una mano poiché non ho esperienza con ffmpeg. Ho già trovato alcuni comandi, ma nessuno di questi ha funzionato. Questo per esempio.

ffmpeg -itsoffset 5 -i in.mp4 -r 25 -loop 1 -i intro.png -filter_complex "[1:v] fade=out:125:25:alpha=1 [intro]; [0:v][intro] overlay [v]" -map "[v]" -map 0:a -acodec copy out.mp4

1
Hai appena copiato quel comando o lo hai scritto in base alle tue esigenze? Sto chiedendo perché questo comando comporta cose come una dissolvenza e tutti i tipi di altre cose non coperte dalla tua domanda. Hai solo bisogno di sovrapporre un'immagine o hai bisogno di più?
PTS

L'ho copiato da qualche parte, tutto ciò che serve è solo per mettere l'immagine davanti al video.
Azthy,

Risposte:


44

È possibile eseguire una semplice sovrapposizione di immagini utilizzando la sintassi seguente:

ffmpeg -i input.mp4 -i image.png \
-filter_complex "[0:v][1:v] overlay=25:25:enable='between(t,0,20)'" \
-pix_fmt yuv420p -c:a copy \
output.mp4

overlay=25:25 significa che vogliamo posizionare l'immagine 25px a destra e 25px in basso, originando dall'angolo in alto a sinistra (0: 0).

enable='between(t,0,20)' significa che vogliamo che l'immagine venga mostrata tra il secondo 0 e il 20.

[0:v][1:v]significa che vogliamo che il primo file video con cui importiamo -i, nel nostro caso input.mp4 o come ffmpeg lo veda il file di input video numero 0, sia nel file di input video 1, nel nostro caso image.png. :vsignifica solo che vogliamo video 0 e video 1. [0:a]significherebbe che vogliamo la prima traccia audio importata. Che verrebbe anche da input.mp4 ma punta alla traccia audio anziché alla traccia video nel file mp4.

Se si desidera una determinata qualità / impostazioni dell'immagine e non le impostazioni scelte da ffmpeg, aggiungere l'immagine e / o le opzioni di codifica audio che si desidera utilizzare. Il codificatore video predefinito sarà x264. Controlla la guida alla codifica H.264 per le possibili impostazioni.

Il -acodec copy/ -c:a copyche hai nel tuo comando fe semplicemente riutilizzerebbe l'audio dal file sorgente. Anche se ovviamente non puoi farlo con il video (in questo caso), questo deve essere transcodificato perché stiamo creando una nuova sorgente video.

Se si desidera transcodificare l'audio, rimuovere la -c:a copyparte. Potrebbe essere necessario specificare esplicitamente un codificatore, ad es -c:a aac -strict experimental. Consulta la guida alla codifica AAC per maggiori informazioni.


La seguente iterazione del comando precedente ha funzionato per me su Android poiché l'originale dà e l'errore come aac è una funzione sperimentale: ffmpeg -i input.mp4 rigoroso -2 -i image.png -filter_complex [0: v] [1: v] overlay = 25: 25: enable = 'between (t, 0,20)' output.mp4
muneikh

c'è comunque da posizionare in basso senza conoscere l'altezza? o all'estrema destra senza conoscere la larghezza?
amorevole

certo, basta analizzare il video con ffprobe ed estrarre le dimensioni del video dall'output. Forse c'è anche un'opzione integrata in ffmpeg ma non ne sono consapevole.
PTS

3
Il tuo comando sostituisce un frammento del file video originale, ma un utente potrebbe voler aggiungere (aumentando così la lunghezza del video) un'immagine prima e / o dopo il video. Per favore
aiutatemi

1
@laurent che dipende dal file sorgente e / o dall'output. pix_fmt sta per formato pixel. Ci sono molti formati di pixel diversi disponibili per codec diversi, specificando uno per non finire con qualcosa che non funziona per te. yuv420p è il formato di pixel più supportato quando si tratta di h264 ma ci sono anche yuv422p e yuv444p per esempio.
PTS
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.