FFmpeg 8.0 adiciona suporte ao Whisper
(code.ffmpeg.org)- 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
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 -
- Exemplo de geração de arquivo de legenda SRT
1 comentários
Comentários do Hacker News
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 float32para funcionar corretamente. Se der erro, pode ser necessário reinstalar a biblioteca torch com um índice específico, como nos comandos abaixo. 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
O backend automático pode ser selecionado com o comando abaixo.
uv pip install torch torchvision torchaudio --torch-backend=autoLink 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.
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.
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.
"How to wreck a nice beach you sing calm incense"
Link para o artigo
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.
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”.
Run Whisper audio transcriptions with one FFmpeg command
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.
Veja a explicação na Wikipédia sobre o Whisper
Lista completa de modelos Whisper
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.
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.srtO 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: Japonês → inglês: Link de referência do whisper-standalone-win
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.
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.
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.
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
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.
É 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).
Embora haja erros e alucinações, está funcionando bem no nível que eu queria.
Nesse tipo de situação, o reconhecimento de locutor (speaker recognition) parece especialmente importante.