Estabilizar las tomas de vídeo FPV no siempre es necesario, especialmente si la cámara (normalmente una Gopro) va montada en un gimbal. Caso distinto son los vídeos grabados por un racer, un pequeño dron rápido, ágil y ligero que suele ofrecernos vídeos nerviosos y con cierto nivel de movimiento. Estos vídeos pueden estabilizarse en cierta medida, logrando mejorar las tomas. Y además se puede hacer con software libre o gratuito: hablo de Virtualdub y de su plugin Deshaker.

Una vez procesado con el siguiente workflow, que a mí me ha dado bastante buen resultado, podemos continuar la edición con programas «para todos los públicos» como Filmora o Vegas Pro.

El formato de video MP4 y MOV

Las cámaras deportivas y en general las minicámaras que se instalan en nuestros drones o aviones, graban el video en un contenedor MP4 o MOV. Los contenedores no deben confundirse con la propia codificación del vídeo, que viene determinada por su codec.

Tanto MP4 como MOV (que son muy similares) son formatos de contenedor con pérdida. Aunque ya están muy extendidos, no todos los programas de edición los manejan bien, por lo que tendremos que convertirlos a formatos más antiguos, como AVI.

Instalación de Virtualdub + Deshaker + Plugins

Vamos a instalar las dos versiones de virtualdub, la de 32 y la de 64 bits. Hay plugins que sólo funcionan en 32 bits, por lo que estamos obligados a instalar ambas versiones y a dividir el proceso.

Bajar de http://www.virtualdub.org/.No es necesaria instalación. Es un programa portable.

Plugin ffmpeg

Este plugin permite importar directamente los archivos MP4 o MOV en Virtualdub, porque inicialmente sólo nos abre AVI. Bajar de https://sourceforge.net/projects/virtualdubffmpeginputplugin/

Copiar el contenido de plugins32 a plugins32 o plugins64 de los directorios de nuestros dos Virtualdub.

Plugin Deshaker

Este es el plugin responsable de la estabilización de nuestra cámara. Bajar desde https://www.guthspot.se/video/deshaker.htm. Nosotros sólo vamos a usar la versión de 64 bits.

Instalar de la misma manera copiando los archivos al directorio plugins64 de Virtualdub64.

Plugins de Emiliano Ferrari

En la página de este usuario hay un paquete de plugins grande e interesante. Nosotros vamos a utilizar varios de ellos. La pega es que sólo son para la versión 32 bits. Bajar el binario de https://emiliano.deepabyss.it/ y copiar a la carpeta plugins32 de nuestro Virtualdub32.

Flujo de trabajo estabilización video GoPro

Seguidamente describo mi propio flujo de trabajo para estabilizar y retocar mis tomas de FPV (FPV footages) preferidas.

Mis preferencias personales son las de grabar en 1080p (1920×1080 pixels) a 60fps. Posteriormente reduciremos la resolución del vídeo y ganaremos cierta calidad.

Dividir el MP4 en clips

Una vez que tengamos nuestras grabaciones en MP4, normalmente tendremos un vídeo más o menos largo con algunas escenas interesantes. Yo suelo almacenar el vídeo original y extraer las escenas más relevantes en archivos independientes para su proceso posterior. O simplemente para almacenarlas también por separado, evitando así tener que visionar el original para encontrar el momento concreto.

El objetivo de esta fase es extraer el clip sin recodificarlo, es decir, con el mismo formato del contenedor y con el mismo codec. Así evitamos perder información en el camino.

Hay diversos programas que pueden hacernos esta tarea:

  • Boilsoft Video Splitter. El programa sólo funcionará si tenemos los codecs instalados, por lo que es necesario instalar el K-Lite Codec Pack.  Es mi opción preferida por rapidez y sencillez de manejo.
  • Gopro Studio. Sólo permite extraer clips de vídeos grabados con la GoPro, por lo que no es válido con cámaras Runcam. Lo usé mientras tenía la Gopro, cuando mi parque de cámaras aumentó, lo descarté.
  • Filmora 9. Es un programa de pago aunque su enorme facilidad de uso lo hacen aconsejable, al menos para tenerlo en la lista.
  • LosslessCut. No lo he probado, pero parece interesante. Web: https://www.videohelp.com/software/LosslessCut

Procesar los clips en Virtualdub

Pasamos ya directamente a describir mi flujo de trabajo para estabilizar vídeos de cualquier cámara deportiva (Gopro, Runcam, Caddx,…) con Virtualdub y Deshaker.

Cargaremos uno por uno todos los clips y los procesaremos individualmente. El estabilizado mediante Deshaker es un proceso tremendamente lento y conviene dividir la tarea.

Una vez cargado en Virtualdub el primer clip, pasaremos a procesarlo. Dividiremos el proceso en dos fases por cada clip. Una en la versión de 64 bits de Virtualdub, sólo para pasarlo por Deshaker y estabilizar la toma. La otra fase en la versión de 32 bits, procesando el resto de plugins para retocar el video y grabar la copia definitiva

El motivo de esta división es que la cantidad de memoria que requiere la estabilización, hace recomendable usar la versión 64 bits. Pero esta versión tiene pocos plugins, por lo que el resto del proceso debe realizarse en la versión 32 bits.

Estabilizar con Deshaker en Virtualdub 64 bits

Con el plugin ffmepg instalado, podremos cargar el clip en formato MP4/MOV directamente en nuestro Virtualdub.

FPV racer: qué estabilizar y que no

El objetivo de esta fase es estabilizar la toma FPV (FPV footage) de un pequeño dron, un racer. Estos clips tienen gran cantidad de movimientos rápidos a una velocidad relativamente alta, especialmente notoria si volamos muy cerca del suelo, algo típico en estos drones que rara vez alcanzan alturas medias.

Obviamente la mini-cámara de estos drones carece de todo tipo de estabilización mecánica (gimbal), lo que transfiere todos los movimientos del frame a la cámara, generando un vídeo bastante nervioso. Obviamente, si el piloto es bueno, el propio pilotaje logrará una estabilización en origen notoria.

En resumen, lo que buscamos es suavizar los movimientos del dron que el piloto no ha podido lograr con los sticks. También se pueden llegar a corregir ligeros balanceos o vibraciones al final de movimientos bruscos a altas velocidades o en días de mucho viento, algo por otro lado inevitable.

Lo que no vamos a lograr es eliminar vibraciones propias de un mal funcionamiento del sistema o de unos PIDs mal configurados. Este tipo de problemas arruinan definitivamente la toma y hay que buscar soluciones mecánicas o por software. Tampoco es posible eliminar las vibraciones de muy alta frecuencia y que aparecen en el vídeo como efecto gelatina o efecto jello, aunque en este caso Virtualdub puede aligerar algo este problema, como seguidamente veremos.

Lo que tampoco tiene sentido que hagamos es estabilizar el clip en exceso, porque las tomas FPV precisamente tienen la gracia de movimientos rápidos y limpios que, estabilizadas en demasía, nos harían perder ese movimiento y un precioso ángulo de visión en la toma.

Configuración de Virtualdub

En mi caso no deseo el audio original que ha grabado la cámara, normalmente pésimo, por lo que vamos a prescindir de él. Debemos marcarlo en el menú Audio -> No audio.

Como el vídeo lo vamos a re-procesar por completo, aplicando nuestros propios codecs, debemos marcar en el menú Video -> Full processing mode. Como información, la opción contraria, la que obliga a Virtualdub a copiar el vídeo (o el audio) tal cual y sin procesamiento es Direct Stream Copy.

Configuración de Deshaker

Para modificar los parámetros de Deshaker pulsaremos Ctrl+F y pincharemos en configuración. Deshaker se compone de dos fases, cada fase tiene sus propios parámetros y son modos absolutamente distintos, pudiendo operar de manera independiente. El resultado del primero se graba en un archivo y se pasa con input al segundo.

Deshaker: Fase 1
Estabilizar vídeo Gopro virtualdub + deshaker Configuración Deshaker pass 1

Configuración Deshaker pass 1

En esta fase vamos a recopilar información de los movimientos del vídeo. Esta fase es vital que se haga con cuidado, recopilando la mayor información posible. Obviamente cuando más exhaustivos seamos, más tiempo de procesamiento necesitaremos.

1- Camcorder has a rolling shutter. Este es el famoso efecto gelatina. Hay que meter un porcentaje que depende enormemente de la cámara, del objetivo y del modo de vídeo usado. Por internet pululan diferentes porcentajes, pero lograr que uno funcione es realmente complejo. Si estás interesado, prueba con clips cortos que tengan abundante jello variando el porcentaje.

En mi caso estos parece que me han funcionado estos valores:

  • Runcam Split mini 2. 1080@60fps. Valor de 88%.

2 – Log File. Importante. Este archivo tiene la información sobre la estabilización de la primera fase de Deshaker. Yo lo grabo junto a la toma principal.

3 – Scale y Use Pixels. Son dos parámetros que tienen que ver con el grado de profundidad del análisis que hace Deshaker de los movimientos del video. Como se trata de clips más o menos cortos, yo lo fijo al máximo de detalle.

Y poco más. Ya tenemos todo preparado para el primer barrido.

deshaker play buttons

Deshaker play buttons

Cuando tengamos todo configurado en la primera fase, saldremos y pulsaremos el segundo botón de reproducción, que sirve para que Virtualdub reproduzca el vídeo mientras lo analiza ejecutando la primera fase de Deshaker.

Virtualdub + Deshaker en funcionamiento

Virtualdub + Deshaker en funcionamiento

En esta fase aparecerán sobre el vídeo vectores de movimiento. Blancos para los válidos y rojos para los inválidos (movimientos que no pueden reconocerse por Deshaker). En la imagen superior podemos ver en (1) los vectores blancos normales y unos rojos correspondientes al movimiento de la hélice. También en (1) se aprecia el famoso efecto ocasionado por los obturadores rolling shutter de los sensores CMOS, efecto gelatina o efecto jello.

Al finalizar esta fase tendremos un archivo de texto con toda la información obtenida de la fase 1. Conviene guardar este archivo con el clip porque será suficiente para posteriormente poder pasar a la fase 2 directamente.

Deshaker: Fase 2
Estabilizar vídeo Gopro virtualdub + deshaker Pantalla configuración Deshaker pass 2

Pantalla configuración Deshaker pass 2

Esta es la fase de la estabilización propiamente dicha y es algo menos lenta que la 1.

Se basa en los datos de la fase anterior, tomando dicha información del fichero de log ya comentado. Podríamos prescindir de ejecutar la lenta y tediosa fase 1 si guardamos ese archivo junto a nuestra escena. De esta manera podríamos probar diferentes parámetros de estabilización en la fase 2 en diversas jornadas hasta encontrar los ajustes perfectos.

1 – Edge Compensation

Al dejar la cámara más quieta, el movimiento se traslada a los bordes. Podemos optar por dejar esos bordes negros (y luego recortar en post-producción) o por hacer zoom a la imagen y evitar así ver los bordes.

En el caso de clips previamente estabilizados, de drones más grandes, con gimbal, son interesantes las opciones que hacen algo de zoom sobre la imagen para evitar ver el borde. Pero en el caso de drones pequeños, con mucho movimiento, el zoom es contraproducente ya que exagera mucho las vibraciones.

Mi opción para una FPV footage es clara: nada de zoom y todo el borde necesario. El borde lo vamos a disimular con la siguiente opción y, cuando quitemos el ojo de pez, buena parte de él se eliminará por completo.

2 – Use previous and future frames to fill de borders

Esta opción rellena los bordes de la fase anterior con el contenido de los fotogramas siguientes, disimulando bastante el efecto. Obligatorio.

3 – Motion Smoothness

Esta parte es clave porque marca la intensidad de la estabilización. A mayor número, más suavidad en los movimientos. En el caso extremo la cámara estaría estática… y los bordes serían enormes, claro.

Aquí conviene probar bien hasta conseguir una toma perfecta. Recordad que la fase 1 grababa un archivo reutilizable. En mi caso el dron se desestabiliza ligeramente en los giros bruscos, presentando un bamboleo apreciable en el eje roll (que a su vez bambolea la imagen), por eso el soothness de rotation es mucho mayor.

En pitch y yaw necesito menos valor, pero insisto en que depende mucho de la toma. Si es con un multi más grande y hay «paneos«, tal vez sea necesario meter algo más en Horizontal Panning. En cualquier caso siempre meter más valor en el eje con vibraciones.

Zoom no usamos, así que lo dejamos a cero.

4 – Max correction limits

Esta opción trabaja en conjunto con la anterior y marca los límites de la estabilización. Si estos límites son muy grandes, los márgenes negros pueden ser exagerados.

La suavidad de los movimientos será la marcada en el punto 3, pero siempre dentro de estos márgenes de movimiento. Como ya dije antes, en FPV footages conviene desactivar el zoom al máximo y no pasarse en exceso con el resto de valores.

Al igual que en la fase 1, cuando tengamos todo configurado pulsaremos el segundo botón de reproducción. Veremos ya como se estabiliza nuestro video.

Grabar nuestro video con un codec lossless

En esta primera fase hemos estabilizado el vídeo y hay que pasarlo a una segunda fase para seguir aplicando correcciones y efectos. Para ello vamos a grabar la toma con un codec de mínima compresión y también mínima pérdida, para evitar dejarnos detalles en el proceso.

Personalmente uso dos, Lagarith y Huffyuv. El segundo apenas lo he probado. Accedemos a su configuración a través del menú Video -> Compression.

Instrucciones básicas e instalación de Lagarith: http://www.videohelp.com/software/Lagarith-Lossless-Video-Codec

Instrucciones básicas e instalación de Huffyuv: http://www.digitalfaq.com/forum/video-conversion/1727-virtualdub-filters-pre.html

Este vídeo intermedio ocupará muchísimo espacio en el disco duro (conviene trabajar en un disco SSD) y serán borrados al terminar esta fase.

Terminar el procesamiento en Virtualdub 32 bits

Estabilizar vídeo Gopro virtualdub + deshaker Orden de los filtros en Virtualdub

Orden de los filtros en Virtualdub

Los filtros que yo aplico en Virtualdub son los que vemos en la imagen superior. Es importante respetar el orden en que serán aplicados, moviéndolos con los botones del lado derecho. El primero siempre será el que corrige el ojo de pez (barrel distorsion).

En este ejemplo paso de la resolución original del vídeo (1080p, 1920x1080px) a 720p, 1280x720px, que considero más que suficiente para reproducir en casi cualquier medio.

Otra resolución interesante para distribuir nuestro vídeo en dispositivos móviles es 480p, 640x480px, con la que lograremos reducir drásticamente el tamaño de nuestro vídeo.

Ojo de pez (barrel distorsion)

Estabilizar vídeo Gopro virtualdub + deshaker Barrel distorsion

Eliminación del ojo de pez de una Gopro

Todos los plugins anteriores son realmente intuitivos. Quizá el único un poco más complejo es Barrel Distorsion, con quien tendremos que jugar un rato hasta conseguir horizontes rectos. Tras la corrección perderemos algo de imagen por los lados, lo que incluso nos vendrá bien para eliminar el efecto indeseado de la fase de estabilización anterior.

Grabar el resultado final codec H.264

Configuración del codec H.264

Configuración del codec H.264

Si vamos a seguir exportando nuestro clip a otros programas de edición, como Filmora o Vegas Pro, podemos guardarlo en Lagarith o Huffyuv, pero en cualquier caso, la copia que vayamos a archivar mejor codificarla en H.264 (o necesitaremos un sueldo para comprar discos duros).

El codec H.264 (también llamado x264vfw) mantiene una buena relación calidad/espacio, estando muy extendido en Internet.

Instrucciones básicas y download: http://www.videohelp.com/software/x264-VFW
Hilo foro configuración: https://encodingtalk.com/threads/fraps-to-youtube-with-h-264.894/
Otro hilo foro configuración: https://encodingtalk.com/threads/ideal-compression-settings-for-xvid-virtualdub.3219/

Accedemos a su configuración a través del menú Video -> Compression.

Archivos resultantes de todo el proceso

Cuando terminemos tendremos los siguientes archivos:

  • El recorte del vídeo original, clip extraído del original de la cámara. Nombre-n.mov/mp4. El número «n» es el número de corte dentro del archivo original.
  • El archivo log de estabilización de ese clip en Deshaker. Nombre-n.log
  • El clip de vídeo ya estabilizado y editado en dos fases en Virtualdub (proceso descrito en este artículo), listo para archivar. Nombre-n.avi
  • OPTATIVO. Copias procesadas por programas tipo Filmora o Vegas Pro. Almacenadas con el nombre de la resolución y en mp4.