Encuentra la duración del video después de aplicar cámara lenta

0

Estoy tratando de aplicar el efecto de cámara lenta a una serie de videos. Y además, esos videos serán escalados, rellenados y desvanecidos. El siguiente es el comando que estoy usando para aplicar cámara lenta.

ffmpeg -i 1.mp4 -filter_complex "
[0:v]trim=0:5,setpts=PTS-STARTPTS[tv1];
[0:v]trim=5:7,setpts=PTS-STARTPTS[tv2];
[0:v]trim=start=7,setpts=PTS-STARTPTS[tv3];
[tv2]setpts=PTS*2[slow];
[tv1][slow][tv3]concat=n=3:v=1:a=0[out]" -map [out] -c:v libx264 test.mp4

Tengo dos preguntas.

  1. Refiriéndose a [tv2]si está recortado y aplicado el efecto de cámara lenta a partir del 5 ° segundo, en realidad aplica el efecto desde el 4 ° segundo. ¿Cuál es la razón para esto?

El siguiente es el comando que estoy usando para otro procesamiento justo después de concatenar en el comando anterior.

[concat0]scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2,format=pix_fmts=yuva420p,fade=t=out:st=16:d=2:alpha=1,setpts=expr=PTS-STARTPTS+10/TB[va0];

Allí necesito especificar setptsy estoy usando la duración acumulativa de los videos antes del video actual. Aquí está el comando completo que estoy usando para ello.

  1. ¿Cómo puedo calcular la duración del video después de aplicar el efecto de cámara lenta? Por ejemplo, ¿cuál sería el incremento de la duración del resultado del video del primer comando que mencioné aquí en segundos o incluso microsegundos?
Chamath
fuente

Respuestas:

0

Pregunta 1 : el comando está incompleto porque no tiene en cuenta la pista de audio , cambió el PTS solo en la pista de video . Para ver la diferencia solo prueba esto:

# no-good, starts from 4th second audio with a frozen video frame
ffmpeg -i in.mp4 -vf trim=5:7 out.mp4
#
# works as expected, both audio and video start at 5th second
ffmpeg -i in.mp4 -vf trim=5:7 -af atrim=5:7 out.mp4

Pregunta 2 : Esto tampoco funcionará como se esperaba por la misma razón, pero una vez que solucione el problema anterior, aquí hay un truco no muy elegante pero efectivo para correlacionar los tiempos de "antes" y "después":

# overlay the input video with a timer, pulled to the right 200 pixels
ffmpeg -i in.mp4 -f lavfi -i testsrc=n=3 -vf overlay=x=200 in-with-time.mp4
#
# do all your manipulation, and finaly overlay with another timer at x=0
ffmpeg -i in-with-time.mp4 -f lavfi -i testsrc=n=3 -filter_complex "..stuff...,overlay[out]" out.mp4

Esto le proporciona por fotograma el tiempo original y resultante con una precisión de 1 milisegundo.

avnr
fuente
Gracias por la explicación. Para el primer punto, no necesito el audio original en el archivo de salida, por lo que es mejor agregarlo -an. Para el segundo punto, necesitaba un cálculo matemático para obtener la duración.
Chamath
Para calcular hay que mostrar cómo se alimenta [concat0], cómo se le [out]asigna. Esto puede influir en la línea base para calcular el PTS. ¿Se hace en la misma llamada CLI o como un segundo pase? ¿Hay algo más en el medio? La referencia que dio a la otra pregunta muestra un escenario diferente.
avnr
Suponga que la respuesta que obtengo de mi cálculo es "tt". Luego solía hacer cálculos PTS como tt / TB. ¿Esto esta mal? Lo siento, soy nuevo en ffmpeg. (la referencia que mencioné es el comando que estoy usando y le agregué esos efectos slomo)
Chamath
Bueno, antes que nada, si eres nuevo en ffmpeg, entonces no deberías haber publicado respuestas aquí y a tu pregunta anterior, particularmente sin verificar que las respuestas sean correctas. En segundo lugar, parte de tratar de ayudar es averiguar si sus suposiciones son correctas, después de todo, mi suposición es que usted tiene una necesidad real de que algo funcione, y me dio un poco de mi tiempo para ayudarle en eso. Entonces, hasta que elimine sus respuestas anteriores, lo que podría confundir a alguien con un problema similar que las lea, y hasta que proporcione una imagen clara de su problema, no entiendo cómo puedo ser de alguna ayuda.
avnr
1
Eliminé mi respuesta según su solicitud. Las respuestas que publico se generan a partir del chat IRC de ffmpeg. Y también se prueban en el contexto de mi problema. Solo para dejarlo claro.
Chamath