31 pontos por GN⁺ 2025-08-14 | 1 comentários | Compartilhar no WhatsApp
  • A versão 8.0 do FFmpeg adiciona oficialmente suporte ao modelo de reconhecimento de voz Whisper
  • O Whisper é um modelo open source de reconhecimento de voz desenvolvido pela OpenAI, usado para transcrição automática de fala em vários idiomas
  • Com a introdução desse recurso, aumenta a possibilidade de automatizar diretamente fluxos de trabalho de fala para texto em tarefas de processamento de vídeo e áudio
  • A utilidade e a eficiência do FFmpeg foram bastante reforçadas para desenvolvedores e para a área de automação de mídia
  • Ao incorporar recursos mais recentes de reconhecimento de voz, reduz-se a necessidade de ferramentas externas adicionais ou de processos complexos de integração

Visão geral do suporte ao Whisper no FFmpeg 8.0

  • A versão 8.0 do FFmpeg, ao adicionar suporte ao modelo de reconhecimento de voz Whisper, passa a oferecer a capacidade de converter automaticamente dados de áudio em texto em diversos idiomas
  • O Whisper utiliza um algoritmo baseado em deep learning criado pela OpenAI, garantindo alto nível de precisão na transcrição de fala para texto
  • Usuários atuais do FFmpeg passam a contar com a praticidade de gerar legendas ou extrair conteúdo falado de arquivos de vídeo e áudio por meio do suporte embutido ao Whisper, sem precisar recorrer a ferramentas externas

Principais benefícios da integração do Whisper

  • Com a integração do Whisper, torna-se possível implementar fluxos de trabalho de reconhecimento de voz eficientes e altamente escaláveis em pipelines de processamento e automação de mídia baseados em FFmpeg
  • Com o algoritmo de reconhecimento de voz embutido, os desenvolvedores ganham a vantagem de obter resultados de transcrição com comandos simples, sem o peso de integrações adicionais complexas ou da criação de scripts separados

Importância industrial da combinação FFmpeg + Whisper

  • Em áreas como gestão de grandes acervos de mídia, geração de legendas e arquivamento de dados de vídeo, a combinação FFmpeg + Whisper tem como ponto forte entregar ao mesmo tempo eficiência de custos e automação
  • Antes era necessário integrar ao FFmpeg uma ferramenta open source separada de reconhecimento de voz, mas agora, com o processamento direto no próprio FFmpeg, é possível esperar simplificação do fluxo de trabalho e melhora na velocidade de processamento
Publicidade

Detalhes técnicos

  • Foi adicionado ao FFmpeg um filtro de áudio baseado na biblioteca Whisper.cpp, capaz de realizar reconhecimento automático de fala (ASR) diretamente dentro do FFmpeg
  • Pode ser ativado com a opção --enable-whisper, e o caminho do modelo (model) é obrigatório
  • Principais opções: configuração de idioma (language), uso de GPU (use_gpu), tamanho da fila (queue), formato de saída (format: text/srt/json) e configuração de modelo e limite de VAD (detecção de atividade de voz), entre outras
    • Se o valor de queue for pequeno, a resposta em tempo real melhora, mas a precisão cai e a carga de CPU aumenta; se for grande, a precisão sobe, mas a latência aumenta
    • Com a opção destination, é possível salvar os resultados em arquivo, URL ou metadados de saída, e o protocolo AVIO também é suportado
  • Estão incluídos exemplos de cenários como geração de legendas SRT, envio HTTP em formato JSON e transcrição em tempo real com entrada de microfone (usando VAD)
    • Exemplo de geração de arquivo de legenda SRT
      ffmpeg -i input.mp4 -vn \  
      -af "whisper=model=../whisper.cpp/models/ggml-base.en.bin:language=en:queue=3:destination=output.srt:format=srt" \  
      -f null -  
      

1 comentários

 
GN⁺ 2025-08-14
Comentários do Hacker News
  • Descobri na prática que o Whisper é uma ferramenta realmente incrível; com o prompt certo, dá até para ter a sensação de que a vida muda para melhor.
    Quero recomendar o Subtitle Edit (inclusive vale apoiar financeiramente o desenvolvedor). O Subtitle Edit é uma ótima interface para experimentar com o Whisper. Quem já usou Aegisub antes poderia muito bem chamar o Subtitle Edit de Aegisub 2.0.
    COMO FAZER: arraste um arquivo de vídeo ou áudio para a janela da direita e depois vá em Video > Audio to text (Whisper). Normalmente, o Faster-Whisper-XXL foi o que teve melhor desempenho para mim. Se possível, recomendo usar o large-v2 (o large-v3 na verdade teve algumas regressões em certos casos). Não é perfeito, mas dá para corrigir bem com recursos como Tools > Fix common errors do Subtitle Edit.
    Se você tiver uma placa de vídeo Nvidia mais nova, talvez precise inserir --compute_type float32 para funcionar corretamente. Se der erro, pode ser necessário reinstalar a biblioteca torch com um índice específico, como nos comandos abaixo.
    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118  
    
    uv pip install --system torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118  
    
    Se isso resolver o erro, seria útil deixar um comentário dizendo qual era o problema e qual foi a solução; isso pode ajudar outras pessoas também (inclusive em buscas na web).
    Página inicial do Subtitle Edit
    Página de apoio ao desenvolvedor do Subtitle Edit
    Releases da versão mais recente do Subtitle Edit
    • Ao instalar pacotes relacionados ao torch com o uv, ele escolhe automaticamente a versão do tensor adequada ao driver CUDA. Ainda assim, é melhor usar isso em um ambiente virtual (venv), e não no Python do sistema.
      O backend automático pode ser selecionado com o comando abaixo.
      uv pip install torch torchvision torchaudio --torch-backend=auto
      Link com mais detalhes
      Os pacotes do torch são baixados do índice do torch, e o restante do PyPI, então não há preocupação com conflito.
    • O Aegisub também continua em desenvolvimento por meio de forks. Os dois programas têm propostas diferentes, então é difícil compará-los diretamente; podem ser usados de forma complementar. O Subtitle Edit é muito mais adequado para transcrição de fato, enquanto o Aegisub ainda tem vantagens em tarefas como tipografia.
    • O Subtitle Edit é excelente, mas pode ter restrições de hardware (Python, GPU Nvidia etc.). Se você não tiver GPU ou achar pesado montar um servidor, uma API simples e barata como a lemonfox.ai também é uma opção.
    • Fiquei curioso se você poderia dar exemplos concretos de como o Whisper melhorou tanto a sua vida.
    • O desempenho do Whisper é muito bom, então fico me perguntando por que as legendas automáticas do YouTube ainda são tão ruins. Até o menor modelo do Whisper é melhor que a solução do Google; será que é por licença ou pela dificuldade de implantar isso em larga escala?
  • Espero que, se a transcrição local passar a ser usada de forma mais ampla, os criadores de vídeo parem de colocar legendas chamativas e incômodas gravadas diretamente no vídeo.
    Já vi até vídeos técnicos produzidos profissionalmente com legendas desnecessárias e impossíveis de remover. Não é vídeo de gatinho, então isso é exagero demais.
    Com transcrição local, dá para fazer tradução automática e também evitar aquela experiência ruim de ter que exibir outra legenda por cima da que já foi gravada no vídeo.
    • Vale apontar que colocar legendas embutidas no vídeo geralmente tem mais a ver com aumentar o "engagement" do que com melhorar a experiência do usuário.
    • Se for comparar, acho que as legendas temáticas de abertura de anime feitas por fãs antigamente eram muito mais legais do que essas legendas embutidas nos vídeos de hoje.
    • No fim, a influência do algoritmo é enorme. Mesmo que existam legendas em tempo real 100% precisas em todos os dispositivos, se o vídeo performar melhor com legenda embutida, vão continuar usando.
    • O problema das legendas embutidas é que não dá para trocar o idioma.
    • Esse fenômeno também é causado em parte pelo recurso de reprodução automática sem som do YouTube. As legendas gravadas no vídeo ajudam a atrair as pessoas.
  • Como o Whisper é um modelo de transcrição de áudio, fiquei curioso se ele consegue revisar depois o que ouviu antes enquanto continua escutando.
    Por exemplo, em casos como “I scream” e “Ice cream”, que soam parecidos mas têm significados totalmente diferentes, eu queria saber se ele consegue alterar o texto anterior com base em informações que aparecem mais adiante no contexto longo.
    Acho que isso é uma condição necessária para conciliar tempo real + precisão. Na prática, já vi transcrição no Android ajustando o texto enquanto a pessoa vai falando.
    • Vou recomendar o título do meu artigo favorito.
      "How to wreck a nice beach you sing calm incense"
      Link para o artigo
    • Imagino que legendistas humanos ou roteiristas sempre precisem pensar em como transformar em texto falas intencionalmente ambíguas, trocadilhos e falas em que o mal-entendido é importante para a história. Expressar o que foi ouvido é diferente de escrever o original em si (o que foi dito).
      Fico curioso se pessoas com deficiência auditiva congênita estudam separadamente para compreender/criar jogos de linguagem falados (brincadeiras linguísticas, ritmo etc.).
      É quase como lidar com matemática abstrata sem ter a experiência empírica correspondente; embora matemáticos também afirmem criar fenômenos experienciais, como música, a partir de suas abstrações, então isso também é uma parte interessante.
    • O Whisper funciona em blocos de 30 segundos. Por causa dessa arquitetura de rede, ele consegue olhar o contexto anterior e posterior para mudar o resultado. Mas, por causa disso, também ocorrem muitas alucinações.
    • “I scream” parece ter uma ênfase maior na pronúncia de “I” do que “ice cream”. Mas concordo com a opinião de que o contexto é realmente necessário.
    • Se você tem curiosidade sobre esse tema, recomendo os capítulos a partir da seção 16.3 do livro didático de Stanford “Speech and Language Processing”.
      Link para o PDF
      Não conheço bem a arquitetura do Whisper, mas, em geral, modelos ASR fazem o decodificador considerar também os sons após o bloco atual para entender o contexto. Então eles usam um modelo de linguagem para ajustar a saída e inferir formas gramaticalmente naturais, como “I like ice cream”.
  • Relacionado a isso, recomendo o blog escrito pelo autor deste patch.
    Run Whisper audio transcriptions with one FFmpeg command
  • Espero que isso seja o começo da adição de mais filtros baseados em ML ao FFmpeg.
    No passado foi adicionado um filtro de sr (super resolution), mas ele já está antigo, é complicado até conseguir os pesos, e embora tenha havido suporte para várias bibliotecas de ML (libtorch etc.), começar a usar isso ainda não é fácil.
    Preferia que houvesse uma pasta “models” com modelos prontos para uso, permitindo usar rapidamente vários modelos para upscale, remoção de ruído, upscale temporal e assim por diante.
    Hoje em dia, a maior parte da pesquisa em filtros de áudio e vídeo é baseada em ML, e os novos codecs provavelmente também terão base em ML.
  • O Whisper mencionado aqui é mesmo o modelo de IA de reconhecimento de fala feito pela OpenAI?
    Veja a explicação na Wikipédia sobre o Whisper
    • Sim, e também existe uma implementação em C++: GitHub do whisper.cpp
    • Sim. Citação direta da documentação.

      It runs automatic speech recognition using the OpenAI's Whisper model.

    • Não exatamente por completo; é uma 'família de modelos de transcrição de áudio' (várias versões e grupos de modelos).
      Lista completa de modelos Whisper
  • Não conheço nada de Whisper, mas fiquei curioso se ele também pode ser usado para tradução automática (especialmente de japonês para inglês).
    Tenho um filme japonês bem antigo, mas não consigo assistir porque não existe tradução em inglês.
    No passado tentei encontrar um tradutor no Fiverr; pelo preço oficial daria alguns milhares de dólares, e mesmo negociando para algumas centenas, no fim a pessoa sumiu.
    • O Whisper de fato consegue transcrever/traduzir japonês para inglês.
      A qualidade depende do dialeto e da qualidade do áudio, e o modelo "large-v3" entrega o melhor resultado.
      Dá para usar a integração do ffmpeg com um comando como este.
      ffmpeg -i movie.mp4 -af whisper=model=large-v3:task=translate output.srt
    • Pela minha experiência, no geral foi utilizável.
      O modelo “English” na prática também oferece suporte a vários idiomas e traduz direto para o inglês.
      Também dá para primeiro transcrever em japonês e depois usar outro tradutor para passar para o inglês. Em diálogos semanticamente complexos, às vezes isso funciona melhor.
      Exemplo:
      Tradução direta:
      faster-whisper-xxl.exe --language English --model large-v2 --ff_vocal_extract mdx_kim2 --vad_method pyannote_v3 --standard   
      
      Japonês → inglês:
      faster-whisper-xxl.exe --language Japanese --task translate --model large-v2 --ff_vocal_extract mdx_kim2 --vad_method pyannote_v3 --standard   
      
      Link de referência do whisper-standalone-win
    • Na minha experiência, a transcrição falhou completamente.
      Muitas vezes ele inventava conteúdo que não estava no áudio, e, quando havia vários idiomas misturados no vídeo, ficava totalmente confuso.
      Ele não entende contexto de verdade, então aparecem com frequência erros como os que se veem em traduções automáticas do YouTube.
    • Também é possível legendar e traduzir (somente para inglês) vídeos em japonês com o Whisper.
      O melhor desempenho vem ao usar o maior modelo, mas a velocidade depende do hardware.
      Outra opção é usar algo como o VideoToTextAI, que extrai legendas → traduz para mais de 100 idiomas → salva como arquivo SRT.
    • As alucinações do Whisper são sérias.
      Muitas vezes ele adiciona aleatoriamente frases que não existem.
      Pode servir para classificação de classes, mas fica aquém para transcrição de legendas.
  • Fiquei curioso se a futura speech API da Apple também poderia ser adicionada ao ffmpeg.
    Seria bom se funcionasse direto no Mac sem precisar buscar modelos.
    Documentação do SpeechTranscriber
    Documentação do SpeechAnalyzer
    Análise prática e comparação com Whisper
  • O único problema deste PR/patch é que ele só fornece o wrapper avfilter da biblioteca whisper.cpp, então o usuário ainda precisa gerenciar as dependências por conta própria.
    Ou seja:
    1. clonar o repositório do whisper.cpp
    2. instalar as dependências dessa biblioteca
    3. concluir o build com sucesso
    4. baixar o modelo de fato
    Só depois disso é possível usar o filtro -af "whisper=model....
    Sem esse trabalho prévio, vai falhar, e isso deve ser bastante frustrante para iniciantes.
    Eu acharia mais eficiente tornar o avfilter do Whisper nativo e deixar só o download do modelo; isso aumentaria bastante o número de usuários reais.
    • Do ponto de vista do usuário final, seria melhor mesmo, mas para o FFmpeg isso é difícil em termos de manutenção.
      É preciso levar em conta o ritmo de mudanças do projeto whisper-cpp.
      Em casos como outros filtros (vmaf etc.), que exigem build de dependências e download de modelo, imagino que logo devam surgir binários pré-compilados para iniciantes também (até porque o whisper-cpp é licenciado em MIT).
  • Estou usando FFmpeg e Whisper para gravar e transcrever em tempo real o áudio ao vivo do scanner da polícia da nossa cidade, atualizando tudo diretamente em um site.
    Embora haja erros e alucinações, está funcionando bem no nível que eu queria.
    • Se o site for público, eu adoraria ver.
    • Eu queria tentar aplicar isso às reuniões do conselho do condado aqui da minha região.
      Nesse tipo de situação, o reconhecimento de locutor (speaker recognition) parece especialmente importante.