Eliminador de fondo verde con FFmpeg: chroma key en video
Usar un fondo verde y luego eliminarlo puede ser un proceso tedioso. Sin embargo, si las condiciones son favorables, apostar por algo de automatización ayuda a ahorrar mucho tiempo. Como es natural, en Transloadit nos encanta automatizar los pequeños detalles, así que veamos cómo podemos usar FFmpeg y Transloadit para eliminar automáticamente un fondo verde de un video mediante chroma key, dejándolo con un fondo transparente.
El eliminador de fondo verde más rápido de FFmpeg usa el filtro colorkey para volver transparente
un tono seleccionado y luego codifica el resultado en un formato que admite un canal alfa. Una buena
iluminación y un fondo de color uniforme importan tanto como el propio comando.

¿Cómo funciona un fondo verde?
Antes de poder eliminar un fondo verde, necesitamos entender qué es realmente. Un fondo verde se coloca detrás del sujeto para crear un fondo uniforme que se pueda eliminar con mayor facilidad. Normalmente, el color elegido es un verde neón, ya que es el más alejado de los tonos de piel, aunque el azul también se usa con frecuencia.
Cuando quieres eliminar el fondo, necesitas usar un chroma key para quitar de forma selectiva el color verde de cada fotograma del video, lo que te deja un fondo transparente detrás del sujeto.
Comando de FFmpeg
Antes de entrar en los detalles de nuestras Assembly Instructions, abramos el capó y veamos qué hay debajo 🔎
Transloadit usa una selección de herramientas CLI que nos ayudan a realizar operaciones de transcodificación en tus archivos. Una de ellas es el muy reconocido FFmpeg, que usamos en muchos de nuestros Robots para transcodificar video, audio e imágenes.
Antes de redactar nuestro Template, podemos intentar primero la operación de forma local con un comando de FFmpeg. Después, convertimos ese comando en un conjunto de Assembly Instructions, lo que nos permite aprovechar la comodidad y la velocidad que ofrece Transloadit.
Para eliminar un fondo verde de un video, el comando es el siguiente:
ffmpeg -i input.mp4 -vf 'colorkey=0x00FF00:similarity=0.2:blend=0.3' -c:v libvpx-vp9 -pix_fmt yuva420p -c:a libopus output.webm
Analicémoslo por partes.
Primero, usamos el flag i para especificar nuestro archivo de entrada. A partir de ahí, podemos pasar una serie de filtros de video al flag vf. En nuestro caso, solo necesitamos usar el filtro colorkey, estableciendo la clave de color en 0x00FF00.
Después podemos ajustar el colorkey con los parámetros similarity y blend. Estos
especifican qué tan cerca debe estar un color del color clave para volverse transparente, y también
qué tan drástica es la clave. No dudes en experimentar con sus valores para ver cómo cambia el
resultado.
A continuación, c:v selecciona el codificador VP9 y pix_fmt solicita un formato de píxel con un canal alfa.
El audio se codifica como Opus. Para más información sobre VP9 y otros códecs,
consulta nuestro blog sobre compresión de video.
Por último, la extensión de salida .webm selecciona el formato WebM, ya que este formato admite
la transparencia en el video.
Template
Ahora que hemos visto el comando subyacente, veamos cómo queda dentro de nuestro Template.
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"remove_green_screen": {
"use": ":original",
"robot": "/video/encode",
"result": true,
"ffmpeg_stack": "v7",
"preset": "empty",
"ffmpeg": {
"vf": "colorkey=0x00FF00:similarity=0.2:blend=0.3",
"c:v": "libvpx-vp9",
"pix_fmt": "yuva420p",
"c:a": "libopus",
"f": "webm"
}
},
"exported": {
"use": ["remove_green_screen", ":original"],
"robot": "/s3/store",
"credentials": "demo_s3_credentials",
"url_prefix": "https://demos.transloadit.com/"
}
}
}
Fíjate en que, dentro del parámetro ffmpeg, podemos especificar exactamente los mismos flags
que en el comando original, lo que nos permite manipular el archivo de la misma manera y, al mismo
tiempo, obtener la funcionalidad adicional que ofrece Transloadit.
Un detalle importante que conviene señalar aquí es que estamos usando el ajuste preestablecido empty,
para asegurarnos de que no se aplique al archivo ninguna otra codificación aparte de la que
especificamos. Consulta nuestra
página de ajustes preestablecidos para ver los detalles de
lo que ofrece cada uno.
Resultados finales
A continuación se muestra el resultado de nuestro Template al pasarle un video de un dinosaurio delante de un fondo verde brillante.
¡Se ve bastante bien! Además, todo esto ocurrió de forma automática, lo que nos permite procesar cientos de archivos con facilidad y exportar nuestros resultados a un bucket de almacenamiento para recuperarlos más tarde.
¡Eso es todo por este blog! Esperamos que te haya dado una mirada entre bastidores sobre cómo usar FFmpeg dentro de tus Templates. Para estar al día de los próximos artículos y ver textos que nuestros desarrolladores encuentran interesantes, ¿por qué no te suscribes a nuestro boletín más abajo?
