¿Es posible en FFMPEG cambiar la escala con el tiempo?

11

Ok, entonces usando el filtro de superposición, uno puede cambiar la ubicación x / y de un video con el tiempo usando la variable "t". Por ejemplo, overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0puede usarse para comenzar a deslizar un elemento superpuesto desde la parte superior izquierda a la parte superior derecha, después de que hayan pasado 2 segundos.

Lo que quiero hacer es usar un principio similar para escalar elementos. Me gustaría poder cambiar la escala de un video a lo largo del tiempo usando una expresión (como scale=w=iw*t, o algo así).

es posible?

cuando ejecuto esa expresión a través de -filter_complex, obtengo

Error al evaluar la expresión 'iw * t'.

Tal vez la expresión para out_w: 'iw * t' o para out_h: '- 1' es autorreferenciada.

Siento que hay una buena posibilidad de que necesite parchear FFMpeg si quiero obtener esta funcionalidad, pero pensé en preguntar primero, ¡para ver si alguien estaría al tanto de este tipo de cosas!

¿Alguien sabe cómo se podría lograr tal tarea?

¡Gracias por la ayuda!

theophilus777
fuente
Suena más como un error de sintaxis en este momento, pero no he usado esa función antes, así que desafortunadamente no puedo ayudar aquí.
PTS
1
t no es una cosa definida cuando se trata de filtro de superposición.
v010dya
1
Se podría simplemente escribir un filtro. wiki.multimedia.cx/index.php?title=FFmpeg_filter_howto
denjello
1
@alexspeller el filtro de escala no admite la edición de la línea de tiempo, por lo que no es posible directamente. Comprobaré si hay una solución alternativa.
Gyan
1
Técnicamente posible con salida H.264 / 5. No sé cómo los jugadores / editores lo manejarán.
Gyan

Respuestas:

2

Por lo que entiendo, 't' se evalúa una vez. ¿Has leído esto: https://ffmpeg.org/ffmpeg-filters.html#zoompan ?

Documentos de Ffmpeg:

9.170.1 Ejemplos

  • Amplíe hasta 1.5 y realice una panorámica al mismo tiempo en algún lugar cerca del centro de la imagen:

zoompan = z = 'min (zoom + 0.0015,1.5)': d = 700: x = 'if (gte (zoom, 1.5), x, x + 1 / a)': y = 'if (gte (zoom, 1.5), y, y + 1) ': s = 640x360

  • Amplíe hasta 1.5 y realice una panorámica siempre en el centro de la imagen:

zoompan = z = 'min (zoom + 0.0015,1.5)': d = 700: x = 'iw / 2- (iw / zoom / 2)': y = 'ih / 2- (ih / zoom / 2)'

  • Igual que el anterior pero sin pausa:

zoompan = z = 'min (max (zoom, pzoom) +0.0015,1.5)': d = 1: x = 'iw / 2- (iw / zoom / 2)': y = 'ih / 2- (ih / zoom / 2) '

Robar
fuente