Explicación:

Explicación:

Tengo un clip corto de 3:00 minutos que solo se voltea de izquierda a derecha durante aproximadamente: 30 segundos en el medio.

Entonces, si todo se volteara de izquierda a derecha, solo me gustaría aplicar:

ffmpeg -i 3min.mp4 -vf hflip flipped_3min.mp4

Pero dado que solo está invertido parcialmente, ¿hay alguna manera, en un solo comando ffmpeg, de aplicar un segmento de tiempo para ese filtro hflip (1:30-2:00)?

Estoy buscando documentación sobre esto y no puedo encontrar nada por el estilo. Me pregunto si simplemente no es posible en FFmpeg o no.

Respuesta1

¿Cómo puedo invertir solo una subsección de un video usando ffmpeg?

Aquí,-filter_complexes tu amigo, ya que puede crear cadenas de entradas filtradas. Seguiremos usando el hflipfiltro mencionado en la pregunta del gráfico de filtros.

Puede postularse a una subsección como esta:

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 línea para copiar y pegar fácilmente:

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

Explicación:

Usar un gráfico de filtro es un poco como crear una cadena de acciones, y hay una buena explicación visual 1 de esto en elSección 'Introducción al filtrado'de la documentación de los filtros. Los filtros funcionan conentradas- ese es el bit que ves antes del filtro, por ejemplo [0:v](video del primer flujo de entrada) o [a](una salida creada llamada a) - ysalidas. Es decir, unaaporteoentradasse transforman de acuerdo con a filtery luego se emiten como unproducciónosalidas.

Aquí tenemos un conjunto simple de acciones, y si las realizamos en secuencia podemos construir un gráfico de filtro de entradas y salidas.

Segmentos

Cree 3 segmentos de video (a partir de la entrada [0:v]) usando trim:

  • Primer segmento (90 segundos), no hacer nada (salida como [a])
  • Segundo segmento (30 segundos) hflipy setptspara evitar problemas de duración (generar recorte como [b]y pasarlo hflipa generar como [c])

Luego, estos dos se concatcombinan para generar la salida [a]+[c] -> [d](duración: 120 s)

  • Tercer segmento (60 segundos), configure PTS nuevamente (salida como [e])

Una los segmentos para generar la salida [d] + [e] -> [out1]y -mapeso para la salida final en el archivo.

Esto te da un video de la misma duración que el original (180 s), pero con una sección de 30 segundos en el medio que están volteados horizontalmente 2 .


1 :

Representación visual deffmpegdocumentación de filtros

En libavfilter, un filtro puede tener múltiples entradas y múltiples salidas. Para ilustrar el tipo de cosas que son posibles, consideramos el siguiente gráfico de filtro.

                [main]
input --> split ---------------------> overlay --> output
            |                             ^
            |[tmp]                  [flip]|
            +-----> crop --> vflip -------+

Este gráfico de filtro divide el flujo de entrada en dos flujos, luego envía un flujo a través del filtro de recorte y el filtro vflip, antes de fusionarlo nuevamente con el otro flujo superponiéndolo en la parte superior.


2 Probado usandoffmpeg version N-72939-g5b0f55a

Respuesta2

En este ejemplo, el giro horizontal se produce entre 2 y 3 segundos.
En este ejemplo, el giro horizontal se produce entre 2 y 3 segundos.

Algunos filtros tienen soporte de línea de tiempo a través delhabilitar opción.

Puede ver una lista de filtros y si tienen soporte de línea de tiempo con ffmpeg -filters. Un " T" que precede al nombre del filtro indica que admite la edición de la línea de tiempo. Si el filtro que desea no es compatible con la línea de tiempo, actualícelo, ffmpegya que los filtros a veces se actualizan para admitir esto. De lo contrario, utilice los filtros de recorte como se explica en la otra respuesta.

ffmpegejemplo:

ffmpeg -i input -vf "hflip=enable='between(t,90,120)'" -c:a copy output

ffplayejemplo:

ffplay -vf "hflip=enable='between(t,90,120)'" input

información relacionada