Come capovolgere solo una sottosezione di un video usando ffmpeg?
Ecco, -filter_complexè tuo amico, in quanto può creare catene di input filtrati. hflipUtilizzeremo 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 filtere 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)
hflipe setptsper evitare problemi di durata (output trim as [b]e passarlo hflipa output as [c])
Questi due vengono quindi concatmessi 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 -mapquello 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