jueves, 7 de enero de 2021

Videos en 'cámara rápida', con FFMPEG

Hoy, ya en la última semana ‘navideña', estaba aburrido y se me ocurrió meterme a editar un video para ponerlo ‘a mi gusto’. Cuento los antecedentes: es un video (que me enviaron), que no llega a los 2 minutos, donde solo una parte me resulta interesante pero, como quiero que siga apareciendo, a modo testimonial, todo, se me ocurrió la idea de poner lo poco interesante a ‘cámara rápida’ , y dejar ‘lo importante’ a velocidad normal. Y además, de esta forma, me parecía que quedaba más 'resaltado' lo interesante.
Así que me puse a ello, empezando, como hay que hacer siempre, por ‘fijar la estrategia a seguir’.


Y mi estrategia se basaría, por supuesto, en usar la herramienta FFMPEG, y en ver cómo (y por donde) había que cortar, manipular y unir videos. Así que lo primero es ver el video, con papel y lápiz, y pensar bien y anotar las partes en que lo tengo que dividir. Por basarme en un ejemplo práctico, en mi caso lo tengo que separar en cuatro partes, en unos instantes que, en una primera aproximación, serían, en mi ejemplo...
Un video 'inicio', que dura desde el instante 00.00.00 (‘horas.minutos.segundos’), aunque quizás recorte los primeros 3 o 4 segundos, que tampoco tienen excesivo interés, hasta el instante 00.00.24, y que sería la introducción.
Un video 'intermedio', del 00.00.24 al 00.01.20, que es lo que quiero pasar a ‘cámara rápida’ porque no tiene un interés primordial.
Un video 'final', del 00.01.20 al 00.01.33, que es lo que me parece interesante
Y quedaría una 'cola', del 00.01.33 al 00.01.57, que no tiene el menor interes, y lo quiero suprimir.
Bien, pues ahora... manos a la obra.
De entrada, comento que es bueno ‘afinar’ por el método de hacer un primer video 'cortado', comprobarlo, y ajustar mejor los tiempos repitiendo la orden retocando ligeramente éstos (y sobreescribiendo el archivo anterior), ya que hacerlo con el ffmpeg, y siendo tramos cortos de video, es realmente rápido. Eso si, es importante advertir que las fracciones de segundo hay que ponerlas ‘con punto’ (por ejemplo 03.5 segundos), y no con ‘coma’ (03,5).

Ah, y me apetece tener el resultado en formato ‘mkv’ (matroska). Así que abro consola donde tengo el archivo original, del que voy a partir y tras los ajustes indicados, al final llego a estos instantes de corte...
ffmpeg -i original.mp4 -ss 00:00:03.5 -to 00:00:24.2 -async 1 inicio.mkv
ffmpeg -i original.mp4 -ss 00:00:24.2 -to 00:01:20 -async 1 intermedio.mkv
ffmpeg -i original.mp4 -ss 00:01:20 -to 00:01:33.5 -async 1 final.mkv

y así ya me olvido de la ‘cola’ del 01:33 al final (01:57)

Ahora el segundo paso es poner en cámara rápida el tramo ‘intermedio’.
Lo primero (porque tengo que hacerlo con el video y el audio por separado) es extraer el audio
ffmpeg -i intermedio.mkv -ab 128k audio.mp3
y luego obtener el video 'mudo', eliminando el audio con
ffmpeg -i intermedio.mkv -c copy -an intermedio_mudo.mkv

Y a partir de aquí toca ponerlos 'en cámara rápida' (por cierto, el proceso de obtener un video ‘a cámara lenta’ es similar, cambiando los parámetros). 
Para el video parece ser que se puede hacer de varias maneras. Una, muy sencilla, es usando el metadato PTS (Presentation Time Stamp) que contienen los videos, así…
ffmpeg -i intermedio_mudo.mkv -vf "setpts=0.5*PTS" intermediox2.mkv
que lo pasa al doble de velocidad. Pero yo creo que queda mejor pasarlo a x4, que sería
ffmpeg -i intermedio_mudo.mkv -vf "setpts=0.25*PTS" intermedio_mudox4.mkv
(el parámetro, para ‘camara lenta’ sería "setpts=2.0*PTS", o más, si queremos más lento)
Y para el audio, parecido, aquí con el filtro 'atempo' (aquí, dando un valor <1.0 (de hasta 0.5), enlentece, y >1.0, lo reproduce más rápido), así que…
ffmpeg -i audio.mp3 -af "atempo=2.0" audiox2.wav
que se puede repetir, aunque es más fácil ‘anidar’, así
ffmpeg -i audio.mp3 -af "atempo=2.0,atempo=2.0" audiox4.wav

Y ya solo queda unir el audio y el video ‘rápidos’, con
ffmpeg -i intermedio_mudox4.mkv -i audiox4.wav -c copy -map 0:0 -map 1:0 output.mkv

Tercera parte parte del proceso: unir los videos
Aquí, como los videos son todos ‘del mismo padre y de la misma madre’ (extensión, codecs, resolución…) unirlos es muy fácil. Lo primero que hay que hacer es crear un archivo de texto, que llamaremos 'lista.txt', en la carpeta donde guardo estos videos.En este archivo se  relacionará, línea a línea, y anteponiendo la palabra ‘file’, los videos que quiero unir. En el caso del ejemplo que estoy siguiendo el archivo lista.txt contendrá exactamente esto:
file inicio.mkv
file output.mkv
file final.mkv

Y ahora se unen, concatenándolos con la orden
ffmpeg -f concat -i lista.txt -c copy VIDEO_RESULTANTE.mkv

(Nota final: el audio ‘acelerado’ del video resultante queda mal: si lo creo (como he hecho aquí) como WAV queda muy estridente, y si lo hago como MP3 no suena. Habrá que investigarlo… o dejar (ese tramo acelerado) sin audio, que tampoco queda mal)


En fin, que he pasado una tarde muy entretenida, ya a las puertas de entrar en las rutinas del año, aprendiendo a editar y modificar videos. Y aquí dejo ’mis apuntes’, para quien quiera hacer sus pinitos… siendo, como yo, novato en estas lides.

Pero... NOTA FINAL: descubro que existe un paquete, en los repositorios oficiales de Debian Buster, que se llama 'slowmovideo'... que parece que sirve para esto mismo. Por supuesto lo instalo... y de entrada me parece muy complicado, y tendré que investigar cómo funciona (por lo menos así quedo más tranquilo, lo que he hecho sirve para algo). Ya veré en qué queda la cosa, y si merece la pena el 'slowmovideo' ese.

No hay comentarios:

Publicar un comentario