Cómo usar el efecto de cámara lenta en un intervalo de tiempo específico con ffmpeg

4

Estoy tratando de usar el efecto de cámara lenta en mis videos. Digamos que tengo un video de 2 minutos y quiero usar este efecto entre 20 y 30 segundos.

Encontré este comando de un blog:

ffmpeg -i input.mp4 -vf "setpts=(<speed>/1)*PTS" output.mp4

Pero no sé cómo implementar la duración en él.

iwocan
fuente

Respuestas:

7

los setpts filtro no tiene edición de línea de tiempo funcionalidad como algunos de los otros filtros (refiérase a ffmpeg -filters para ver cual hacer).

Esto significa que tendrá que hacer un video lento y concatenarlos en sus videos de velocidad normal o realizar un filtrado sofisticado.

Ejemplo: solo video

Utilizando la trim, setptsy concat filtros:

La entrada en este ejemplo tiene una duración de 60 segundos. 0-10 será la velocidad normal, 10-30 será un 50% más lento, y 30-end será la velocidad normal dando como resultado una salida con una duración de ~ 80 segundos:

ffmpeg -i input.mkv -filter_complex \
"[0:v]trim=0:10,setpts=PTS-STARTPTS[v1]; \
 [0:v]trim=10:30,setpts=PTS-STARTPTS[v2]; \
 [0:v]trim=start=30,setpts=PTS-STARTPTS[v3]; \
 [v2]setpts=PTS/0.5[slowv]; \
 [v1][slowv][v3]concat=n=3:v=1:a=0[out]" \
-map "[out]" output.mp4

Ejemplo: con audio

ffmpeg -i input.mkv -filter_complex \
"[0:v]trim=0:10,setpts=PTS-STARTPTS[v1]; \
 [0:v]trim=10:30,setpts=PTS-STARTPTS[v2]; \
 [0:v]trim=start=30,setpts=PTS-STARTPTS[v3]; \
 [0:a]atrim=0:10,asetpts=PTS-STARTPTS[a1]; \
 [0:a]atrim=10:30,asetpts=PTS-STARTPTS[a2]; \
 [0:a]atrim=start=30,asetpts=PTS-STARTPTS[a3]; \
 [v2]setpts=PTS/0.5[slowv]; \
 [a2]atempo=0.5[slowa]; \
 [v1][a1][slowv][slowa][v3][a3]concat=n=3:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" output.mp4

video slowmo

Alternativamente puedes probar video slowmo lo que probablemente resultará en un mejor efecto de ralentización en comparación con ffmpeg solo (slowmoVideo usa ffmpeg). También le permite usar curvas de Bézier para trazar el efecto de manera que pueda iniciarlo sin problemas y puede incluir el desenfoque de movimiento.

llogan
fuente
No necesita usar setpts = PTS-STARTPTS para la transmisión v1, ¿no es así?
ptQa
No obtengo audio usando el comando anterior
Karandeep Atwal
@KarandeepAtwal Ejemplo añadido con audio.
llogan