Hace un tiempo un cliente nos contactó para preguntar si era posible generar un conjunto de imágenes a partir de un video educativo que había generado para un nuevo producto. Lo quq quería era muestrear los cuadros (frames) del video y obtener un conjunto de imágenes.
Al inicio la petición nos pareció algo rara, sin embargo su solicitud surgía de la necesidad de realizar notas sobre estos cuadros en formato de imagen con el objetivo de darle retroalimentación al productor del video. Querían evitar tener que tomar impresiones de pantalla a mano cada ciertos segundos o tener que escribir un documento muy extenso describiendo a qué cuadro se referían además de su retroalimentación.
Adicionalmente al tener este conjunto de imágenes se les iba facilitaba seleccionar la imagen que utilizarían como portada de video al subirla a plataformas digitales.
Obviamente el cliente conocía sobre herramientas que permiten generar comentarios sobre videos, pero estas tienen un costo. Sin embargo, como esta necesidad es esporádica buscaban resolverlo de manera más rápida. En este artículo explicaremos cómo generar estás imágenes a partir de un video usando línea de comandos con herramientas open source.
FFMpeg al rescate
FFMpeg es un software open source que pone a disposición una serie de herramientas y librerías que permiten manipular video a través de la línea de comandos.
No cubriremos el proceso de instalación en este artículo pero es un proceso sencillo que podemos seguir una vez que descarguemos el instalador.
FFMpeg está disponible para Linux, Mac y Windows.
Paso 1. Decidir el tiempo de muestreo
El primer paso es decidir qué tan frecuente queremos muestrear (samplear) el video, esto depende totalmente de la necesidad y el objetivo final. Hay que tener en cuenta que muestrear el video de manera muy frecuente primero provocaría que nos tardemos unos minutos más en obtener el resultado y finalmente vamos a obtener muchas imágenes similares (con ligeros cambios). En cambio muestrear el video con mayor frecuencia, reduce el tiempo de ejecución del proceso pero nos genera mucho menos imágenes donde podríamos perder detalles entre los cuadros que quizás queramos obtener.
Para artículo vamos a muestrear el video cada 15 segundos.
Debido a que un minuto tiene 60 segundos vamos a indicar en el comando que vamos a tomar una imagen cada 15 seconds, es decir tomaremos 4 imágenes por minuto (60 segundos / 15 segundos = 4 imágenes).
Paso 2. Obtener las imágenes
Ahora vamos a proceder a abrir la línea de comandos y debemos dirigirnos a la carpeta donde tenemos el video y donde queremos generar las imágenes.
Si estás en Linux o Mac:
cd miCarpetaDelVideo
Si estás en windows puede ser:
dir miCarpetaDelVideo
Posteriormente escribimos el siguiente comando (antes de dar ENTER continuar leyendo):
ffmpeg -i myVideo.mp4 -vf fps=4/60 videoImg_%03d.jpeg
Explicación de los parámetros:
- '-i myVideo.mp4': indica cual es nuestro archivo de entrada, 'myVideo.mp4' representa el nombre de nuestro archivo de video, cambiarlo como corresponda.
- '-vf fps=4/60': Indicamos el muestre, en nuestro ejemplo queremos obtener 4 imágenes cada 60 segundos, de ahí la fracción 4/60.
- '-i videoImg_%03d.jpeg': significa, nombra cada imagen con el prefijo "videoImg_" y concatena un número consecutivo de 3 dígitos. Una vez que corramos el comando obtendremos en la carpeta donde lo ejecutamos una serie de imágenes con un nombre similar a "videoImg_001.jpeg".
El formato de imagen lo podemos cambiar al usar la extensión "png".
Una vez que ejecutemos el comando obtendremos las imágenes deseadas.
Muestrear a partir de cierto punto
Si el objetivo es no muestra todo el video, podemos iniciar a hacer este proceso a partir de cierta marca de tiempo. Debemos ajustar el comando anterior para indicar en la opción "-ss" la hora:minuto:segundo a partir de donde queremos iniciar el muestreo.
ffmpeg -i myVideo.mp4 -ss 00:2:00 -vf fps=4/60 videoImg_%03d.jpeg
Reflexiones finales
FFMpeg es una herramienta muy util que nos permite realizar operaciones y manipulaciones con archivos de video. En caso que tengamos que hacer un proceso repetitivo podemos crear un script de línea de comandos para que procese varios videos cada cierto tiempo ahorrándonos procesos manuales.
FFMpeg puede realizar las siguientes operaciones, solamente por mencionar algunas: cambiar el formato del video, obtener y manipular información del archivo de video (metadata), cortar o mezclar archivos de video, quitar o agregar tracks de audio o modificar los niveles, reescalar el video, rotarlo, hacer correción de color y muchos más.