Removedor de tela verde com FFmpeg: chroma key em vídeo
Usar e depois remover uma tela verde pode ser um processo trabalhoso. No entanto, se as condições forem favoráveis, recorrer a alguma automação pode ajudar a economizar muito tempo. Naturalmente, na Transloadit adoramos automatizar os pequenos detalhes, então vamos ver como podemos usar o FFmpeg e a Transloadit para remover automaticamente, com chroma key, a tela verde de um vídeo, deixando-o com um fundo transparente.
O removedor de tela verde mais rápido com FFmpeg usa o filtro colorkey para tornar transparente um tom
selecionado e, em seguida, codifica o resultado em um formato compatível com canal alfa. Uma boa
iluminação e um fundo de cor uniforme importam tanto quanto o próprio comando.

Como funciona uma tela verde?
Antes de remover uma tela verde, precisamos entender o que ela realmente é. Uma tela verde é posicionada atrás do elemento filmado para criar um fundo uniforme que pode ser removido com mais facilidade. Normalmente, a cor escolhida é um verde neon, por ser a mais distante dos tons de pele, embora o azul também seja muito usado.
Quando você quer remover o fundo, precisa usar um chroma key para remover seletivamente a cor verde de cada quadro do vídeo, deixando um fundo transparente atrás do elemento filmado.
Comando do FFmpeg
Antes de entrarmos nos detalhes das nossas Assembly Instructions, vamos abrir o capô e ver o que tem por baixo 🔎
A Transloadit usa uma seleção de ferramentas de CLI para realizar operações de transcodificação nos seus arquivos. Uma delas é o renomado FFmpeg, que usamos em muitos dos nossos Robots para transcodificação de vídeo, áudio e imagem.
Antes de esboçar nosso Template, podemos primeiro testar a operação localmente com um comando do FFmpeg. Depois, convertemos o comando do FFmpeg em um conjunto de Assembly Instructions, o que nos permite aproveitar a praticidade e a velocidade que a Transloadit oferece.
Para remover uma tela verde de um vídeo, o comando é o seguinte:
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
Vamos analisá-lo por partes.
Primeiro, usamos a flag i para especificar o arquivo de entrada. A partir disso, podemos passar uma série de filtros de vídeo para a flag vf. No nosso caso, só precisamos usar o filtro colorkey, definindo a cor-chave como 0x00FF00.
Em seguida, podemos ajustar o colorkey usando os parâmetros similarity e blend. Eles especificam o quão
próxima uma cor precisa estar da cor-chave para se tornar transparente e também o quão rígido é o
recorte. Fique à vontade para experimentar os valores deles e ver como o resultado muda.
Depois, c:v seleciona o codificador VP9 e pix_fmt solicita um formato de pixel com canal alfa.
O áudio é codificado em Opus. Para mais informações sobre o VP9 e outros codecs,
confira nosso post do blog sobre compressão de vídeo (English).
Por fim, a extensão de saída .webm seleciona o formato WebM, já que esse formato oferece suporte a
transparência em vídeo.
Template
Agora que vimos o comando subjacente, vamos ver como ele fica dentro do nosso 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/"
}
}
}
Observe como, no parâmetro ffmpeg, podemos especificar exatamente as mesmas flags do comando
original, o que nos permite manipular o arquivo da mesma forma, ganhando ao mesmo tempo as
funcionalidades extras que a Transloadit oferece.
Um detalhe importante aqui é que estamos usando a predefinição empty para garantir que nenhuma
outra codificação seja aplicada ao arquivo além do que especificamos. Confira nossa
página de predefinições para ver os detalhes do que
cada predefinição oferece.
Resultados finais
Abaixo está o resultado do nosso Template ao receber um vídeo de um dinossauro na frente de um fundo verde vibrante.
Ficou muito bom! E tudo isso aconteceu automaticamente, o que nos permite processar centenas de arquivos com facilidade e significa que podemos exportar os resultados para um bucket de armazenamento para recuperá-los depois.
Isso é tudo para este post! Esperamos que ele tenha mostrado os bastidores de como usar o FFmpeg nos seus Templates. Para acompanhar os próximos posts e ver artigos que nossos desenvolvedores acham interessantes, que tal assinar nossa newsletter abaixo?
