Transcrição em lote para projetos grandes: o manual de 2026
transcrição em lotetranscriçãofluxo de trabalho

Transcrição em lote para projetos grandes: o manual de 2026

BMMamane B. MoussaMay 26, 2026Updated July 2, 202611 min read

Summarize this article with:

TL;DR

Executar transcrição em lote em escala exige um pipeline orientado por manifesto, e não apenas um laço for chamando uma API. Este guia cobre o fluxo de trabalho completo para trabalhos em escala de acervo: organização de arquivos, padrões de envio à API, concorrência e limites de taxa, novas tentativas com backoff exponencial, amostragem de controle de qualidade e comparação de custos entre Deepgram, AssemblyAI, AWS Transcribe e OpenAI Whisper. O princípio de piloto antes do lote completo economiza mais tempo do que qualquer outro hábito isolado.

Um acervo de 1.000 arquivos não é um problema de interface. No momento em que um projeto ultrapassa cerca de 50 horas de áudio, a pergunta deixa de ser "qual ferramenta usar" e passa a ser "como executar este pipeline sem perder o controle do que falhou."

O manifesto encontra o uploader: trabalhos em lote rodam arquivo por arquivo
O manifesto encontra o uploader: trabalhos em lote rodam arquivo por arquivo

Este post é sobre construir esse pipeline. Vamos cobrir organização de arquivos, padrões de envio à API, paralelismo, limites de taxa, tratamento de falhas, amostragem de controle de qualidade, convenções de nomenclatura e cálculo de custos nas principais APIs. Os padrões se aplicam quer você esteja migrando o catálogo antigo de um podcast, processando entrevistas de pesquisa ou arquivando depoimentos.

Antes de escrever uma única chamada de API: o manifesto

O maior custo oculto em qualquer lote grande é o trabalho de reconstrução: descobrir quais arquivos rodaram, quais falharam e quais saídas pertencem a qual fonte depois que o trabalho se arrasta por horas ou dias.

Um manifesto CSV escrito antes do envio elimina esse custo. As colunas que importam:

ColunaObservações
file_idSlug estável, não o nome bruto do arquivo (nomes de arquivo mudam)
source_pathCaminho absoluto ou URL de armazenamento
duration_secPreencha antecipadamente se puder; ajuda a estimar o custo
languageDefina explicitamente; não dependa da detecção automática em escala
statuspending / submitted / completed / failed
job_idRetornado pela API no envio
output_pathOnde a transcrição foi salva
errorMensagem ou código de erro se o status for failed
reviewedSinalizador de CQ: vazio / pass / needs-review

Atualize o manifesto no próprio arquivo enquanto o lote roda. Um script Python que lê o manifesto, pula as linhas completed, envia as linhas pending e faz polling das linhas submitted é idempotente por construção. Reinicie-o com segurança a qualquer momento.

Estrutura de diretórios que escala

/batch-project/
    manifest.csv
    source/
        2024-Q1/
            interview-001-smith-2024-03-12.mp3
            interview-002-jones-2024-03-14.mp3
        2024-Q2/
            ...
    transcripts/
        2024-Q1/
            interview-001-smith-2024-03-12.txt
            interview-001-smith-2024-03-12.srt
            interview-001-smith-2024-03-12.json
        ...

O padrão de nomenclatura {id}-{speaker}-{date}.{ext} torna possível reconstruir o manifesto a partir do sistema de arquivos se algo der errado. Evite espaços nos nomes de arquivo: eles quebram URLs não assinadas na maioria dos sistemas de armazenamento.

Escolhendo a API certa

Para projetos em lote, três fatores determinam qual API escolher: custo por minuto, teto de requisições simultâneas e se você precisa de diarização de falantes ou vocabulário de domínio. Veja como estão os preços atuais, verificados nas páginas dos fornecedores no início de julho de 2026.

FornecedorModeloPreço baseCom diarizaçãoLimite de concorrência
AssemblyAIUniversal-2US$ 0,15/horaUS$ 0,17/hora200 trabalhos
AssemblyAIUniversal-3.5 ProUS$ 0,21/horaUS$ 0,23/hora200 trabalhos
DeepgramNova-3 MonolingualUS$ 0,46/horaUS$ 0,58/hora50 requisições
DeepgramNova-3 MultilingualUS$ 0,55/horaUS$ 0,67/hora50 requisições
AWS TranscribeStandard (Leste dos EUA)US$ 0,36/horaN/D integradoVaria conforme a conta
OpenAIGPT-4o-mini-transcribeUS$ 0,18/horaN/DPor nível de limite de taxa

A AssemblyAI é a líder em custo para volume bruto de transcrição. A Deepgram Nova-3 custa mais, mas mostra desempenho forte em áudio ruidoso com vários falantes e oferece keyterm prompting para vocabulário de domínio. A AWS Transcribe cobra em incrementos de um segundo com um mínimo de 15 segundos por requisição; esse mínimo infla os custos efetivos quando seu acervo tem muitos clipes curtos.

Para um acervo de 1.000 horas usando AssemblyAI Universal-2 com diarização, espere gastar cerca de US$ 170. O mesmo trabalho na Deepgram Nova-3 com diarização sai por volta de US$ 580. Ambas superam a transcrição humana em áudio limpo por uma ordem de magnitude.

Consulte comparação de preços de transcrição 2026 e custo da transcrição por hora para análises mais detalhadas.

Padrões de envio: URL vs upload

Use envio por URL para arquivos que já estão em armazenamento na nuvem. A API baixa o arquivo de uma URL assinada; você nunca reenvia gigabytes de áudio pela sua conexão. A maioria dos sistemas de armazenamento (S3, R2, GCS) gera URLs assinadas com uma chamada de SDK direta.

Use upload multipart direto apenas para arquivos que estão localmente e não serão armazenados em outro lugar. Em escala, o custo de banda e de tempo dos uploads locais para a API se acumula rápido.

O loop de envio

O padrão básico em Python, escrito para poder ser reiniciado:

import csv
import time
import requests

API_KEY = "your_api_key"
BASE_URL = "https://api.assemblyai.com/v2"

def submit_job(url, language="en"):
    resp = requests.post(
        f"{BASE_URL}/transcript",
        headers={"authorization": API_KEY},
        json={
            "audio_url": url,
            "language_code": language,
            "speaker_labels": True,
        },
    )
    resp.raise_for_status()
    return resp.json()["id"]

def poll_job(job_id, timeout=600):
    deadline = time.time() + timeout
    while time.time() < deadline:
        resp = requests.get(
            f"{BASE_URL}/transcript/{job_id}",
            headers={"authorization": API_KEY},
        )
        data = resp.json()
        if data["status"] == "completed":
            return data
        if data["status"] == "error":
            raise RuntimeError(data.get("error", "unknown"))
        time.sleep(15)
    raise TimeoutError(f"Job {job_id} did not complete in {timeout}s")

Para um lote de 1.000 arquivos, não faça polling de forma síncrona em uma única thread. Envie uma janela de trabalhos, colete os IDs e, então, faça polling de forma concorrente, ou passe a usar webhooks assim que seu endpoint estiver estável.

Paralelismo e limites de taxa

Limitando a taxa do loop de envio

Mesmo com tetos altos de concorrência, enviar todas as 1.000 requisições em 30 segundos vai disparar limites de taxa na maioria dos provedores. Um semáforo mantém você dentro dos limites:

import asyncio
import aiohttp

CONCURRENCY = 50  # Stay under provider ceiling

async def submit_all(manifest_rows):
    sem = asyncio.Semaphore(CONCURRENCY)
    async with aiohttp.ClientSession() as session:
        tasks = [submit_with_sem(sem, session, row) for row in manifest_rows]
        return await asyncio.gather(*tasks, return_exceptions=True)

Adicione uma pequena pausa entre os envios (10-50ms) se você vir respostas 429 durante a rajada inicial.

Se você precisar do trade-off entre webhook e polling detalhado para sistemas de produção, aquele post cobre a árvore de decisão.

Tratamento de falhas

Tratamento de idiomas em lotes multilíngues

Vocabulário personalizado: vale configurar primeiro

Controle de qualidade: amostre antes de dar por concluído

A tentação em um lote de 1.000 arquivos é aceitar todas as transcrições como prontas. A etapa de amostragem e revisão toma de 5 a 10 por cento do tempo do projeto e captura os problemas sistêmicos que, de outra forma, se propagariam para todos os usos posteriores das transcrições.

O que amostrar

Puxe uma amostra aleatória de 5 por cento das transcrições concluídas. Inclua pelo menos um arquivo de cada tipo principal de fonte presente no lote (ambientes de gravação diferentes, falantes diferentes, equipamentos diferentes).

Ouça segmentos de 2 minutos de cada arquivo amostrado enquanto lê a transcrição. Sinalize:

  • Identificação errada consistente de um termo recorrente (adicione-o à lista de vocabulário e reprocesse os arquivos afetados)
  • Atribuição de falante incorreta em arquivos com múltiplos falantes (verifique se a diarização estava ativada; verifique a qualidade do áudio)
  • Trechos em que a confiança caiu (geralmente correlaciona com ruído de fundo ou fala sobreposta)

Verificações pontuais em arquivos críticos

Alguns arquivos importam mais que outros. A entrevista âncora de um projeto de pesquisa. O depoimento principal de um acervo jurídico. O episódio inaugural de um podcast. Separe esses para uma revisão mais detalhada, independentemente do que a amostra indicar. Pontuações de confiança de IA não correspondem perfeitamente a "este arquivo era importante."

Limiares de confiança como sinal, não como barreira

Alguns provedores retornam pontuações de confiança no nível da palavra na resposta JSON. Marque como candidatas à revisão humana as transcrições em que a confiança média fica abaixo de cerca de 0,80, mas não as descarte automaticamente. Confiança baixa em áudio limpo geralmente significa que o vocabulário de domínio é desconhecido. Confiança baixa em áudio ruidoso geralmente significa que o áudio precisa ser regravado ou que o arquivo está perdido.

Cálculo de custos para tamanhos comuns de projeto

ProjetoHorasMelhor APICusto estimado
Entrevistas de pesquisa200 horasAssemblyAI Universal-2 + diarização~US$ 34
Catálogo antigo de podcast1.000 horasAssemblyAI Universal-2~US$ 150
Acervo jurídico500 horasDeepgram Nova-3 + keyterms~US$ 270
Migração de acervo legado5.000 horasAssemblyAI Universal-2~US$ 750

O plano Pro da CATT, a US$ 9,99/mês, funciona bem para volumes mensais recorrentes abaixo de cerca de 100 horas. Para migrações grandes pontuais, o preço por uso da API é mais flexível: você paga pelo que executa, sem compromisso mensal.

Consulte preços de transcrição ilimitada vs por uso para a análise de ponto de equilíbrio. Se você está construindo um produto que chama essas APIs em nome dos usuários, otimização de custo de chamadas à API de transcrição e cache de resultados de transcrição cobrem as duas alavancas de maior impacto.

Se você só precisa transcrever arquivos sem construir um pipeline, seja um lote pontual ou uma entrega rápida em um único projeto, o ConvertAudioToText processa fontes de áudio, vídeo e URL sem nenhuma configuração em /tools/audio-to-text.

Pós-processamento da transcrição por tipo de projeto

Uma vez que as transcrições existem, o trabalho posterior é específico de cada projeto:

Projetos de pesquisa: Modelagem de tópicos sobre os turnos de fala dos participantes, codificação temática no MAXQDA ou NVivo, extração de citações para bases de dados de citações. A saída JSON da maioria das APIs inclui marcações de tempo no nível da palavra, o que facilita reconstruir citações com marcação de tempo.

Acervos de mídia: Construção de índice de busca (Elasticsearch ou Meilisearch funcionam bem), enriquecimento de metadados, sumarização no nível do episódio via uma passada de LLM sobre cada transcrição.

Acervos jurídicos: Indexação por palavras-chave, fluxo de trabalho de revisão de privilégios, extração de citações. Vocabulário personalizado se paga muitas vezes aqui: nomes de casos e referências a leis precisam ser exatos.

Produção de conteúdo: Reaproveitamento de transcrições em artigos, newsletters e posts para redes sociais. Consulte como transcrever gravações de entrevistas para o fluxo editorial.

A ordem certa de construção

Para qualquer novo projeto em lote, esta sequência economiza mais tempo:

  1. Defina a convenção de nomenclatura e a estrutura de diretórios.
  2. Monte ou preencha o manifesto CSV.
  3. Escreva o script de envio com leitura/gravação do manifesto.
  4. Rode um piloto de 10 arquivos. Revise a saída.
  5. Corrija qualquer problema encontrado no piloto (vocabulário, configurações de idioma, problemas de formato).
  6. Rode o lote completo.
  7. Amostre e revise 5 por cento.
  8. Reprocesse a fila de falhas.
  9. Entregue ao processamento posterior.

Minha opinião: a etapa do piloto é o item mais importante desta lista. Detectar um problema de fluxo de trabalho com 10 arquivos é barato. Detectá-lo no arquivo 800, depois que a execução já custou dinheiro e tempo de verdade, é caro. Os 10 arquivos também lhe dão uma amostra real de precisão para mostrar aos stakeholders antes de se comprometer com o trabalho completo.

FAQ

Quantos arquivos posso enviar em paralelo às APIs de transcrição?

A AssemblyAI processa até 200 trabalhos simultaneamente por padrão. O endpoint pré-gravado da Deepgram permite até 50 requisições simultâneas nos planos Pay As You Go e Growth. Ambos os limites são no nível do projeto. Fale com o comercial para solicitar limites maiores para trabalho contínuo de grande volume.

Qual é a taxa de falha normal em uma primeira passada de lote?

Espere que 3 a 5 por cento dos arquivos falhem na primeira passada. Uma nova tentativa com backoff exponencial normalmente resolve 60 a 80 por cento dessas falhas. As falhas restantes geralmente têm uma causa raiz: áudio de origem corrompido, um codec não suportado ou um arquivo verdadeiramente silencioso. O manifesto permite fazer a triagem delas sem reprocessar os arquivos bem-sucedidos.

Devo usar webhooks ou polling para acompanhar o status dos trabalhos em lote?

Para lotes com menos de algumas centenas de arquivos, o polling com intervalo de 15 a 30 segundos é simples e eficaz. Para lotes na casa dos milhares, os webhooks eliminam a sobrecarga repetida de HTTP e reduzem a chance de perder um trabalho concluído. A contrapartida: webhooks exigem um endpoint público estável, o que adiciona infraestrutura. Consulte o post webhook vs polling para transcrições para a árvore de decisão.

Como lidar com um acervo com idiomas mistos?

Ou classifique previamente o idioma de cada arquivo antes do envio (uma passada leve de identificação de idioma resolve), ou use um modelo multilíngue que cubra todos os seus idiomas em uma única camada de modelo. A AssemblyAI Universal-2 cobre 99 idiomas. A Deepgram Nova-3 Multilingual cobre mais de 30. Definir o idioma explicitamente no envio é sempre mais rápido e

Try transcription free

Convert any audio or video to clean, unwatermarked text — speaker labels, timestamps, and AI summaries included. First 10 minutes free, no account.

Related Articles