Dicas para OBS no Linux para Google Meet
Novas tecnologias de transmissão são fundamentais para o retorno aos cursos emergenciais e aulas remotas, então segui os bons conselhos do meu irmão Mateus Nazário e colegas professores para dar uma olhada no Open Broadcast Studio (OBS). As vantagens do OBS são amplo suporte a plataformas (Windows/Linux/Mac) e grande flexibilidade através de plugins, além de ser uma tecnologia de código-aberto.
Em resumo: a tecnologia é ótima, funciona e vale a pena! Vou contar alguns desafios que passei para deixar tudo direitinho (vou focar no Linux neste tutorial). Como todo tutorial Linux, vou assumir familiaridade com a linha de comandos. Veja abaixo ele funcionando no Google Meet com meu rosto recortado em dois filtros circulares, com o Museu de Arte Contemporânea de Niterói (MAC) ao fundo.
A instalação foi relativamente tranquila, embora esperasse problemas devido ao meu repositório bastante antigo do Deepin 15, mas bastou seguir os passos do site do OBS e fazer o download (https://obsproject.com/pt-br/download). O programa pode parecer complexo à primeira vista, mas poucos recursos são necessários para configurar um mínimo (para gravações e aulas síncronas).
Basicamente, você vai precisar de uma câmera (no meu caso é a do notebook) como entrada, e configurar uma câmera virtual como saída. Instalei o plugin OBS para câmeras virtuais do linux, o V4L2 Video Output (https://github.com/CatxFish/obs-v4l2sink). No Windows, o equivalente é o plugin VirtualCam: https://github.com/CatxFish/obs-virtual-cam.
No linux, também é preciso instalar o módulo v4l2loopback, que pode ser feito com o apt:
$ sudo apt install v4l2loopback-dkms
Depois, é necessário criar uma câmera virtual (coloquei número 7 nela):
$ sudo modprobe v4l2loopback devices=1 video_nr=7 card_label="OBS Cam 7" exclusive_caps=1
IMPORTANTE: caso ocorra o erro “modprobe: ERROR: could not insert ‘v4l2loopback’: Bad address” você precisará remover o módulo dkms e compilar manualmente (vide github), ou tentar outro kernel (5.3.0–62-generic funciona)
Para verificar se ela foi criada:
$ v4l2-ctl --list-devices
OBS Cam 07 (platform:v4l2loopback-000):
/dev/video7
Integrated Webcam: Integrated W (usb-0000:00:14.0-5):
/dev/video0
Então, basta abrir o OBS studio, criar uma Cena, adicionar como Fonte a sua câmera (Dispositivo de Captura de Vídeo V4L2), pode adicionar imagens de fundo (como eu fiz), ou colocar um filtro na sua câmera para cortar um círculo nela (como eu fiz… explico mais abaixo). Depois, vá em Ferramentas -> V4L2 Vídeo Output e configurar a saída para /dev/video7 (sua câmera virtual).
Um detalhe importante: só consegui fazer funcionar no google meet quando escolhi o formato YUY2 (RGB32 funcionava no OBS, mas não reconhecia depois no meet… o YUV420 dava segmentation fault e fechava o OBS). Para verificar os formatos disponíveis:
v4l2-ctl --list-formats # YUYV 4:2:2 ==> YUY2
ls -ltr /var/lib/dkms/v4l2loopback # bug no 0.10 => rebuild github
Caso algo dê errado e o OBS não abra mais (se escolher o YUV420 por acaso…), remove o módulo v4l2 e carregue novamente (não precisa reiniciar o computador em nenhum momento):
$ sudo rmmod v4l2loopback
Após subir a câmera virtual no OBS, verifique se está funcionando (no ffplay ou vlc):
$ ffplay /dev/video7$ vlc v4l2:///dev/video7
Pronto! Se você chegou até aqui, já pode testar sua câmera no Google Meet… basta abrir uma sessão em meet.google.com, e selecionar a câmera do OBS no popup do browser. Pode ser necessário escolher manualmente na opção Configurações do Google Meet:
Caso algo não funcione, sugiro testar no site do webrtc:
Quando tentei rodar no jitsi (meet.jit.si), tive um problema devido a resolução 1280x720 não ser suportada na câmera (o WebRTC me ajudou nisso!). Tem um issue aberto no jitsi a respeito: https://github.com/jitsi/jitsi-meet/issues/5186
Creio que é possível aumentar a resolução no próprio OBS, porém não experimentei ainda.
Finalmente, para conseguir o filtro de círculo no rosto, fiz no GIMP um gradiente transparente externamente (e sólido no círculo), como no exemplo abaixo:
Caso não consigam baixar daqui (botão direito, “salvar imagem como…”), podem baixar do github. Segui as ideias de: https://www.versluis.com/2019/01/creating-a-round-cutout-mask-for-obs-studio/
A vantagem do gradiente é que ele é bem simples de processar, que é a mesma ideia de um Chroma Key (pano de fundo verde), que também dá pra filtrar no OBS. Eu gostaria que algum plugin do OBS detectasse o rosto automaticamente (como Snap Camera), mas não achei nenhum… mas os colegas que usam Snap Camera já acham que custa muito processamento, e de fato pode ser melhor adquirir uma tela verde se quiser fazer transmissões recorrentes no Chroma Key.
A cereja do bolo: Chroma Key de cartolina
Por fim, comprei uma cartolina verde pra testar um Chroma Key bem caseiro… comprei uma verde claro e outra verde escuro (não achei aquele “verde brilhante” que vendem oficialmente por aí). O verde escuro deu um resultado interessante!
Nessa foto abaixo dá pra ver melhor a cor da cartolina:
Podem ver as configurações que usei no OBS do filtro Chroma Key:
Colocando o filtro do círculo junto com o Chroma Key, fica “perfeito”:
Enfim, espero que essas dicas sejam úteis! Até mais!