Pipeline de Transcrição de Áudio
Construa pipelines de produção de fala-para-texto com Whisper, Deepgram e AssemblyAI para transcrição em lote e em tempo real com identificação de falantes (diarização).
Pontos de Decisão
Árvore de Decisão de Seleção de Motor
Se os requisitos incluem:
├─ Streaming em tempo real necessário?
│ ├─ Sim: Use Deepgram Nova-3 WebSocket (mais rápido)
│ └─ Não: Continue para requisitos de precisão
├─ Maior precisão necessária + tem GPU?
│ ├─ Sim: Use Whisper large-v3 com faster-whisper
│ └─ Não: Continue para análise de custo
├─ Orçamento < US$ 0,0059/min E tem poder computacional?
│ ├─ Sim: Use Whisper local
│ └─ Não: Use AssemblyAI Universal-2 (melhor diarização via API)
Processamento em Lote vs. Streaming
Se características do áudio:
├─ Duração > 30 minutos?
│ ├─ Sim: Use lote com fragmentação (dividir em silêncios)
│ └─ Não: Continue para verificação de latência
├─ Precisa de resultados em < 10 segundos?
│ ├─ Sim: Use streaming (Deepgram/Whisper.cpp)
│ └─ Não: Use lote para melhor precisão
Uso de VAD (Detecção de Atividade de Voz)
Se tipo de conteúdo:
├─ Conversa/reunião ao vivo?
│ ├─ Sim: Ative VAD (economiza 40-60% de computação em silêncio)
│ └─ Não: Continue para verificação de conteúdo
├─ Palestra/apresentação com pausas?
│ ├─ Sim: Use VAD conservador (min_silence_duration_ms: 1000)
│ └─ Não: Pule VAD para fala densa (audiolivros, etc.)
Seleção de Modelo por Domínio
Se idioma/sotaque:
├─ Não-inglês ou sotaque pesado?
│ ├─ Sim: Use Whisper large-v3 (melhor multilíngue)
│ └─ Não: Continue para verificação de velocidade
├─ Precisa de latência < 1 segundo?
│ ├─ Sim: Use Deepgram Nova-3 streaming
│ └─ Não: Use AssemblyAI para terminologia empresarial/médica
Modos de Falha
Alucinação em Silêncio
Detecção: Transcrições mostram frases repetidas durante seções silenciosas ou descrições fantasmas de música
Diagnóstico: VAD desabilitado ou limiar muito baixo, modelo gerando texto a partir de ruído de fundo
Correção: Ative VAD com min_silence_duration_ms: 500, use --no_speech_threshold 0.6 no Whisper
Colapso de Diarização com >10 Falantes
Detecção: Todos os falantes rotulados como "Falante 1" após 10-15 minutos, ou troca aleatória de falante no meio da frase Diagnóstico: Modelo de incorporação de falante saturado, confusão de sobreposição em áudio lotado Correção: Pré-segmente por silêncio, use AssemblyAI dual_channel se estéreo, limite a no máximo 8 falantes ativos
Deriva de Sincronia de Timestamps com Vídeo
Detecção: Legendas aparecem 2-5 segundos antes/depois dos quadros de vídeo correspondentes
Diagnóstico: O pré-processamento de áudio alterou a duração, ou o VAD removeu segmentos sem ajuste de timestamp
Correção: Use --preserve_timing no pré-processamento, sincronize com o timecode de áudio original, valide com eventos de fala conhecidos
Falha na Detecção Automática de Idioma
Detecção: Palavras em inglês transcritas como garranchos quando o falante tem sotaque, ou alternância de código ignorada
Diagnóstico: Modelo travado no idioma errado nos primeiros 30 segundos, ou conteúdo multilíngue confundiu o classificador
Correção: Force o idioma com language="en" para inglês com sotaque, use task="translate" para não-inglês para inglês
Estouro de Memória em Arquivos Longos
Detecção: Falhas OOM em arquivos >45 minutos, ou quedas repentinas de qualidade após 30 minutos
Diagnóstico: Modelo mantendo a janela de contexto completa, VRAM da GPU esgotada
Correção: Fragmente em limites de 25 minutos com sobreposição de 30 segundos, use --without_timestamps para eficiência de RAM
Exemplos Práticos
Passo a Passo de Transcrição Completa de Reunião
Cenário: Reunião do conselho de 90 minutos, 6 falantes, precisa de identificação precisa de falantes e timestamps para atas
Análise de Entrada:
- 90 minutos → requer fragmentação
- 6 falantes → dentro dos limites de diarização
- Contexto empresarial → use AssemblyAI para terminologia
Caminho de Decisão:
- Duração > 30 min → processamento em lote necessário
- Número de falantes = 6 → diarização viável
- Domínio empresarial → AssemblyAI Universal-2 escolhido
- Alta precisão necessária → ativar rótulos de falante + formatação inteligente
Implementação:
# Passo 1: Pré-processamento (especialistas percebem: normalizar níveis de áudio)
ffmpeg -i meeting.mp4 -ar 16000 -ac 1 -filter:a "volume=0.8" meeting_clean.wav
# Passo 2: Fragmentar com sobreposição (novato processaria o arquivo inteiro)
from pydub import AudioSegment
audio = AudioSegment.from_wav("meeting_clean.wav")
chunks = []
for i in range(0, len(audio), 25*60*1000): # fragmentos de 25min
chunk = audio[i:i+27*60*1000] # 27min com 2min de sobreposição
chunks.append(chunk)
# Passo 3: Transcrever com diarização
results = []
for chunk in chunks:
response = assemblyai_client.transcribe(
chunk, speaker_labels=True, auto_punctuation=True,
dual_channel=False, speaker_labels_max=8
)
results.append(response.get_paragraphs())
# Passo 4: Mesclar segmentos sobrepostos (passo de especialista que novato perde)
merged = merge_overlapping_transcripts(results, overlap_seconds=120)
Especialista vs. Novato:
- Novato: Processa arquivo de 90 min diretamente → falha OOM ou precisão baixa
- Especialista: Fragmenta com sobreposição, valida consistência de falantes entre fragmentos, normaliza áudio primeiro
Gates de Qualidade
- WER (Taxa de Erro de Palavra) < 5% em amostra de teste com verdade de campo conhecida
- Precisão do falante > 90% (ID correto do falante para cada enunciado quando a verdade de campo está disponível)
- Latência em tempo real < 2 segundos ponta a ponta para implementações de streaming
- Arquivos SRT/VTT passam na validação (timestamps adequados, sem segmentos sobrepostos)
- Pré-processamento de áudio concluído: formato WAV/FLAC mono 16kHz confirmado
- Parâmetros de VAD ajustados: < 10% de falsos positivos na detecção de silêncio na amostra
- Uso de memória < 8 GB para arquivos de até 2 horas (fragmentação funcionando corretamente)
- Tratamento de erros de API testado: lida com timeouts, retentativas e cota excedida
- Número de falantes na diarização corresponde ao esperado (tolerância de ±1 falante)
- Timestamps de saída alinhados com o áudio original dentro de 100 ms de precisão
Limites de NÃO USO
Este skill NÃO deve ser usado para:
- Síntese de fala-para-texto → Use
voice-audio-engineerem vez disso - Transcrição musical ou extração de letras → Use
ai-engineerpara modelos de música AI - Classificação de áudio sem transcrição → Use
ai-engineerpara classificação de áudio - Tradução em tempo real (transcrever + traduzir) → Combine com o skill
language-translator - Biometria de voz ou identificação de falante → Use
ai-engineerpara modelos de reconhecimento de falante - Melhoria de qualidade de áudio ou redução de ruído → Use
voice-audio-engineerpara processamento de áudio
Delegar quando:
- Precisar de detecção de palavra de ativação personalizada →
voice-audio-engineer - Exigir impressão digital de áudio →
data-pipeline-engineer - Construir assistentes de voz →
voice-audio-engineer+conversation-designer - Processar >10.000 horas →
data-pipeline-engineerpara orquestração