sábado, 9 de enero de 2021

Cámara rápida/lenta, con SlowmoVideo

Al final de mis ‘incursiones’ en el mundo del FFMPEG, para obtener videos a distinta velocidad (y montarlos), o sea eso de ajustar las frames por segundo para verlo a ‘cámara rápida’ (o a ‘cámara lenta’), que comentaba aquí, descubrí que Debian (Buster) ofrece una aplicación, hasta con GUI, llamada SlowmoVideo… pero en primera impresión la vi muy compleja, y lo dejé estar. Aunque, claro, ‘la curiosidad mató al gato’… y no he podido menos que meter las narices en el asunto. El resultado… estos ‘apuntes’


Empiezo comentando que lo que digo de que es una aplicación muy compleja se entenderá mejor si añado que ‘SlowmoVideo’ nace de la tesis doctoral de un muchacho de la universidad de Zurich… y que la documentación que he podido encontrar me ha parecido para gente 'entendida', porque tiene un fondo conceptual de muy alto nivel, y además me temo que explicado para ‘conocedores del tema’. Pero bueno, yo voy a tratar de ir a lo práctico, y a ver su uso elemental, dejando las curvas de Bezier, y cosas de esas, para los estudiosos.
Y voy a decir otra cosa: que mi primera impresión es la de que (con perdón...) es una mierda de programa. Me explico: trabaja a partir de las ‘frames’ del video, que las extrae una a una… y resulta que, de un video de ¡55 segundos, y un tamaño de 5,4 MB…! me ha sacado 1674 frames. Y por duplicado, así que solo eso me ocupa, en un subdirectorio que crea, y solo para este pequeño video… 1,9 GB. Casi 2 gigas para poder manipular un video de 55 segundos que solo me ocupa 5,4 megas me parece poco apropiado para un ‘amateur’’... Y, además, leo en otro sitio que el procesamiento es muy lento… y (que yo haya visto) solo trabaja con imágenes, así que la banda de audio la tienes que agregar luego. Para colmo, su GUI me parece muy poco amigable, y como poco ‘pulida’. Nada ‘comercial’, vamos.
Pero bueno, picado por la curiosidad, quiero probarlo, aunque luego lo borre todo. Así que habría que empezar instalándolo en nuestro Debian, con el típico
sudo aptitude install slowmovideo
y tendríamos la aplicación en Menu-Sonido y Video, con el nombre de ‘slowmoUI’ y, por cierto, un icono bastante feo
Aunque, más tarde, que descubro que también tiene una AppImage, que funciona muy bien, y no hubiese hecho falta instalarlo. Se descarga de aquí. Pero empecemos... 

Como primera idea básica, si queremos modificar un video tendremos que abrir un pro­yecto, y cada proyecto que creemos necesita tener un directorio vacío, porque se va a llenar de co­sas. Así que, para hacer mi primera prueba, creo una carpeta, por comodidad, en mi Escritorio, y que llamaré, por ejemplo, slowmo1.
Al arrancar por primera vez la aplicación sale una pantalla que no entiendo y que, cerrada, ya no vuelve a aparecer en los sucesivos arranques (más tarde veo que son las 'Preferences' de File). Bien, pues ya en el programa, con File-New… aparece una primera pantalla, donde hay que poner cosas muy sencillas: el directorio (creado previamente) donde se guardará el proyecto y también el nombre que le pongo a este proyecto (la extensión sería .sVproj), y la ruta del video con el que voy a trabajar. Asi que rellenaremos estos campos (que se pondrán 'en verde').
(Por cierto, en vez de un video también se puede usar imágenes, y crear con ellas una secuencia, a la velocidad de reproducción que queramos… digo yo que para hacer un GIF, o algo sencillito). No pretendo hacer caso a esta opción.

Bien, pues rellenada esta primera pantalla (con un video), y dando OK, se empiezan a extraer las frames, una a una y, al cabo de un rato (puede ser un buen rato...), puede verse lo que se ha creado en la carpeta del proyecto… que es con lo que vamos a empezar a trabajar.

Ahora vemos en pantalla una cuadricula en negro con un gráfico de dos ejes. De momento fijémonos que el vertical indica el tiempo en segundos, y hay una línea horizontal, que es la del video cargado, que está justamente en el punto (del eje vertical) que corresponde a la duración (a velocidad normal) del video. Si voy pasando el puntero del ratón por dicho eje vertical, veo que me aparece, en cada caso, el dato del número de la ‘frame’ que corresponde a ese punto, y el instante, en segundos (del video) correspondiente. Naturalmente, al llegar al punto donde está la línea horizontal, aparece el total de frames, y la duración total del video.
Y el eje horizontal es similar, pero para el video ‘renderizado’, que veremos luego.
Dicho esto, ahora veamos unos trucos básicos de manejo. El primero, que el incómodo cuadro de ‘atajos’, que te tapa parte del gráfico, se puede hacer aparecer y desaparecer pulsando la tecla ‘h’. El segundo, que si seleccionamos, con botón derecho ratón, lo que enseguida veremos que se llama ‘un nodo’, nos da la opción de borrarlo. Como el nodo se crea con un simple clic del ratón… seguro que a estas alturas ya hemos creado, al azar, alguno y, como es un elemento clave, mejor los borramos.
Y el tercero, que si vamos a View, y marcamos ‘input monitor’, la pantalla cambia un poco, y de momento veo que, si me muevo por el gráfico con el cursor del ratón, me aparece, en ese ‘input monitor’ la imagen de la frame a la que corresponde esa posición. Como es independiente, podemos moverla a un lateral, y así estorba menos.
Ahora juguemos con esto, para entender el concepto clave: si, con el ratón, me desplazo horizontalmente, en el monitor veo siempre el mismo frame (desplazándome en horizontal por la línea marcada, veré siempre el último frame del video).

Y vamos con el truco: con un clic del ratón, fijo un punto. Esto se llama ‘un nodo’ (ya dije cómo poder borrarlos fácilmente). Y si ahora me desplazo a otro punto, pero con un ángulo de 45° (se hace bien, con la cuadrícula), veo, que tanto en el eje vertical como en el vertical aparece el mismo instante (segundo). Y si hago un clic, para crear otro ‘nodo’ aparece una línea uniendo ambos nodos creados. Y es una diagonal a 45°, claro).

Pues ya tenemos dos datos importantes para la renderización:
a) uno, que dos nodos (que son, en esencia, dos instantes de tiempo) unidos por una linea horizontal significa ‘video congelado’ (es la misma frame durante todo ese tiempo). (pero veo que (al menos en mis primeras pruebas, de preconocimiento del programa) no se acepta la línea vertical, que creía yo que daría ‘salto de frames’ o sea un corte en el video. Qué pena...
b) y el segundo que, como acabamos de ver, dos nodos unidos por una línea a 45° significa que el video (su randerización) va a su velocidad normal.

Y por tanto, llegaremos a la conclusión de que uniendo dos nodos (que, en el fondo, también indican dos frames del eje vertical) con una línea de menos de 45° significará que, tras renderizarlo, el video va a ir más lento, y si es superior a 45°, irá más rápido que lo normal.
O sea que si creo un nodo en el punto 0,0 (frame 0, y tiempo 0) y voy a cualquier punto de la linea horizontal (que ya decíamos que correspondía a la ultima frame del video) y creo ahí otro nodo... aquí está la clave porque...
a) Si el ángulo de la línea que une dos nodos consecutivos es de menos de 45° estaré haciendo un video ‘a camara lenta’.
b) Pero si es de más de 45°, se obtendría un video ‘a cámara rápida’ (en esencia es ‘ir en menos tiempo’ (del eje horizontal, del renderizado) hasta el frame final).

Y esto ocurrirá… cuando renderice según esa ‘curva’ (aquí hablo de una recta, pero ya explicará algo más al final)

La renderización
Es muy sencillo: hay que ir a File-Render (o Ctrl+R) y si los parametros son correctos (colores verdes), das a aceptar… y a esperar. Renderiza frame a frame. El video te aparecerá, por defecto, en la carpeta Videos de tu /home, como ‘rendered.mp4’, pero esto se puede cambiar en la ventana que sale, al dar a Render, ‘Rendering Settings’, en la pestaña Output’. Por ejemplo yo he puesto que se guarde como ‘rendered.mkv’, y en el Escritorio. Por cierto, la primera vez que se renderiza un proyecto es enormemente lento, en mi PC un proyecto de 2800 frames me tardó 12 minutos… aunque parece que, si tienes que repetirlo, por corregir algo, tarda un poco (pero poco…) menos (posiblemente tome algo del ‘caché)

Pues bien, hasta aquí el concepto sencillo de cómo funciona esta aplicación. Pero hay mucho más. Porque, por ejemplo, podemos coger un video completo e ir indicando, a través de diferentes nodos elegidos, una curva personalizada, que contenga tramos en que va normal, otros en que va rápido, otros a camara lenta, incluso algún bloqueo de imagen… Y esto no es nada, el programa se mete con conceptos muy elevados, como hacerlo con ‘curvas de Bezier’, o crear desenfoques, etc, etc. que, por supuesto, lo dejo para el que lo quiera estudiar.
Yo me conformo con un ejemplo ’poco complejo’: hacer el video del que hablaba el otro día (que hice con FFMPEG), pero con ‘slowmovideo’… para no tener necesidad de dividir en partes, porque todo el video (eso si, ‘depurando’ antes los que sobra en el final, con FFMPEG, porque son muchos frames inútiles) se haría a la vez, con una curva con tramos de distintas velocidades. Esta tan sencilla…

que produce (tras renderizar) un video que tiene un inicio normal (45°), luego un tramo intermedio 'a cámara rápida' (a más de 45°) y termina en un tramo final también a velocidad normal (otra vez
45°) y debo decir que queda bastante bien… aunque, como dije antes, sin banda de audio, que habría que añadirsela después... y podría ser otra complicación.
En resumen… que aunque pudiera ser bueno para un profesional, que le saque partido, no le veo  ningún interés especial para un principiante, a mi me resulta más fácil hacer cositas con el FFMPEG, a base de un ‘copy-paste’ de los comandos. Además, no encontré por ninguna parte un ‘manual de uso’ que te pueda guiar, y de momento la única información disponible es la que se encuentra en esta página web:
http://slowmovideo.granjow.net/index.html
donde te explica los conceptos teóricos en el apartado de ‘Documentación’, y en otro te deja, si quieres, descargarte la tesis doctoral del creador, el amigo Simón A. Eugster, aka 'Granjow'. (por si hay alguien que quiera profundizar en el tema)


Y acabo ya, que menudo rollo he metido. Pero me ha divertido mucho, en estos días, metiendo las narices en estas cosas de edición de video. Así que me parece que voy a dejar el Blog unos días, que recien acaba de comenzar el 9 de enero y ya llevo… 4 entradas en lo que va de mes. (Bueno, conociéndome, seguramente haré alguna otra pequeña práctica más con esta aplicación 'SlowmoVideo'… a ver si ‘le cojo el aire’. Porque tenerla como AppImage, y poder hacerla funcionar sin tener que instalar nada, no me molesta y a lo mejor me sirve para alguna cosita. 

(por cierto, las ventajas de instalar con 'sudo aptitude install...' es que, con un 'sudo aptitude purge...' me elimina todos los paquetes dependientes, que en el caso de esta aplicación son bastantes)

No hay comentarios:

Publicar un comentario