Come capovolgere solo una sottosezione di un video usando ffmpeg
?
Ecco, -filter_complex
è tuo amico, in quanto può creare catene di input filtrati. hflip
Utilizzeremo ancora il filtro menzionato nella domanda nel filtro.
È possibile applicare una sottosezione in questo modo:
ffmpeg -i input.mp4 -filter_complex "[0:v]trim=start=0:duration=90[a];\
[0:v]trim=start=90:duration=30,setpts=PTS-STARTPTS[b];\
[b]hflip[c];\
[a][c]concat[d];\
[0:v]trim=start=120:duration=60,setpts=PTS-STARTPTS[e];\
[d][e]concat[out1]" -map [out1] flip.mp4
Una riga per una facile copia + incolla:
ffmpeg -i input.mp4 -filter_complex "[0:v]trim=start=0:duration=90[a];[0:v]trim=start=90:duration=30,setpts=PTS-STARTPTS[b];[b]hflip[c];[a][c]concat[d];[0:v]trim=start=120:duration=60,setpts=PTS-STARTPTS[e];[d][e]concat[out1]" -map [out1] flip.mp4
Spiegazione:
Usare un filtrografo è un po 'come creare una catena di azioni, e c'è una bella spiegazione visiva 1 di questo nella sezione "Introduzione ai filtri" della documentazione sui filtri. I filtri funzionano con gli input - questo è il bit che vedi prima del filtro, ad esempio [0:v]
(video del primo flusso di input) o [a]
(un output creato chiamato a
) - e output . Vale a dire, un input o input vengono trasformati in base a filter
e quindi output come output o output .
Abbiamo un semplice insieme di azioni qui, e se le esaminiamo in sequenza possiamo creare un filtro per gli ingressi e le uscite.
segmenti
Crea 3 segmenti di video (dall'ingresso [0:v]
) usando trim
:
- Primo segmento (90 secondi), non fare nulla (output as
[a]
)
- Secondo segmento (30 secondi)
hflip
e setpts
per evitare problemi di durata (output trim as [b]
e passarlo hflip
a output as [c]
)
Questi due vengono quindi concat
messi insieme per rendere l'uscita [a]+[c] -> [d]
(durata: 120 s)
- Terzo segmento (60 secondi), impostare nuovamente PTS (output as
[e]
)
Unisci i segmenti per creare l'output [d] + [e] -> [out1]
e -map
quello per l'output finale nel file.
Questo ti dà un video della stessa durata dell'originale (180 s), ma con una sezione di 30 secondi al centro che viene capovolta orizzontalmente 2 .
1 :
In libavfilter
, un filtro può avere più ingressi e più uscite. Per illustrare il genere di cose che sono possibili, consideriamo il seguente filtro grafico.
[main]
input --> split ---------------------> overlay --> output
| ^
|[tmp] [flip]|
+-----> crop --> vflip -------+
Questo filtro grafico divide il flusso di input in due flussi, quindi invia un flusso attraverso il filtro di ritaglio e il filtro vflip, prima di fonderlo nuovamente con l'altro flusso sovrapponendolo in alto.
2 Testato usandoffmpeg version N-72939-g5b0f55a