1

Pitch: Fiz um player de TV que legenda e dubla canais estrangeiros em português, ao vivo, com IA rodando no meu PC

Eu queria assistir canais de fora (Bloomberg, ABC News, documentários) e entender tudo, sem depender de legenda que não existe em TV ao vivo. Então juntei Whisper, um LLM pequeno e o VLC num player de Windows, e o resultado é o PudimFlix:

Canal em inglês com legenda em português feita pela IA, ao vivo

Isso aí é a Bloomberg Originals (canal aberto, em inglês) com a legenda em português sendo gerada na hora, na minha RTX 3050 de 8 GB.

Como funciona

1. Pegar o áudio do canal
O vídeo é tocado pelo VLC (python-vlc). Para a IA ouvir, uso os audio callbacks do libVLC (amem): o VLC me entrega o PCM e eu toco o som eu mesmo. Assim dá pra mandar uma cópia de 16 kHz mono para a IA sem depender da caixa de som. O VLC entrega cada bloco com o horário (pts) dele, e uso isso para manter som e vídeo sincronizados.

2. Reconhecer a fala
faster-whisper com o modelo large-v3-turbo na placa de vídeo. A cada 1 segundo sai uma prévia (a frase em andamento, mais clara na tela) e, quando a pessoa faz uma pausa, a frase fecha e vira legenda.

3. Traduzir
Comecei com Google Tradutor e depois testei o NLLB-200 offline. O que ficou melhor foi o Gemma 3 4B rodando com CTranslate2 em int8. Mando a frase anterior como contexto marcado com "NÃO traduza", pra ele entender do que se trata sem repetir.

Uma armadilha que me custou um tempo: em int8_float16 o Gemma estourava (overflow) e respondia "our our our our…". A solução foi int8_bfloat16.

Outra: Whisper e Gemma juntos na mesma placa de 8 GB deixaram o reconhecimento 7x mais lento por falta de memória de vídeo. Passar o Whisper para int8_float16 resolveu (pico de ~6,7 GB).

4. Dublar (opcional)
A tradução vira voz com Kokoro ou Piper (vozes em pt-BR que rodam local) e entra no áudio no horário certo, com o som original abaixado por baixo (ducking).

Outras coisas que deram trabalho

  • Pausar a TV ao vivo: o app baixa os pedaços do HLS do canal e serve uma playlist local em 127.0.0.1. O VLC toca essa playlist local, então dá pra pausar, voltar e salvar "o que acabou de passar".
  • App fechando sozinho: crash nativo aleatório. Com faulthandler e os minidumps do Windows achei o culpado: o Qt 6.11 foi compilado para OpenSSL 3.5 e estava carregando o OpenSSL 3.2 que vinha junto. Troquei o TLS do Qt para o Schannel do Windows.
  • Canal que "não abre" só no PC: o servidor redirecionava cada pedido para um servidor de vídeo diferente, e um deles aceitava a conexão e nunca mandava o vídeo (pra IPs de VPN). Agora o player testa o servidor de vídeo e pede outro quando um trava.

O resto do app

Visual no estilo Netflix, milhares de canais abertos que se atualizam sozinhos (iptv-org, Free-TV, Pluto, Samsung TV Plus…), guia de programação, controle pelo celular via QR code e os jogos do dia no Início. Dá pra adicionar a sua própria lista M3U também.

É Python + PyQt6, empacotado com PyInstaller e instalador Inno Setup. Código aberto (MIT):

👉 https://github.com/caionicfilho89-dot/iptv-player

Se alguém testar, me conta o que achou, principalmente em placa de vídeo mais fraca ou sem placa NVIDIA. E se tiver ideia de como diminuir o atraso da legenda, aceito sugestões.

Carregando publicação patrocinada...
1