
Transcripción por lotes para proyectos grandes: el manual de 2026
Summarize this article with:
Ejecutar transcripción por lotes a gran escala requiere un flujo de trabajo dirigido por un manifiesto, no solo un bucle for que llame a una API. Esta guía cubre el flujo completo para trabajos a escala de archivo: organización de archivos, patrones de envío a la API, concurrencia y límites de velocidad, reintentos con backoff exponencial, muestreo de control de calidad y comparación de costes entre Deepgram, AssemblyAI, AWS Transcribe y OpenAI Whisper. El principio de piloto antes del lote completo ahorra más tiempo que cualquier otro hábito.
Un archivo de 1.000 archivos no es un problema de interfaz. En cuanto un proyecto supera aproximadamente las 50 horas de audio, la pregunta deja de ser «qué herramienta uso» y pasa a ser «cómo ejecuto este flujo sin perder la pista de qué falló».

Este artículo trata sobre cómo construir ese flujo de trabajo. Cubriremos la organización de archivos, los patrones de envío a la API, el paralelismo, los límites de velocidad, la gestión de fallos, el muestreo de control de calidad, las convenciones de nombres y el cálculo de costes en las principales APIs. Los patrones aplican tanto si estás migrando el catálogo completo de un pódcast, procesando entrevistas de investigación o archivando declaraciones.
Antes de escribir una sola llamada a la API: el manifiesto
El mayor coste oculto de cualquier lote grande es el trabajo de reconstrucción: averiguar qué archivos se ejecutaron, cuáles fallaron y qué resultados corresponden a cada fuente cuando el trabajo se prolonga durante horas o días.
Un manifiesto CSV escrito antes del envío elimina ese coste. Las columnas que importan:
| Columna | Notas |
|---|---|
file_id | Slug estable, no el nombre de archivo original (los nombres de archivo varían) |
source_path | Ruta absoluta o URL de almacenamiento |
duration_sec | Rellénala si puedes; ayuda a estimar el coste |
language | Defínelo explícitamente; no confíes en la detección automática a gran escala |
status | pending / submitted / completed / failed |
job_id | Lo devuelve la API al enviar el trabajo |
output_path | Dónde se guardó la transcripción |
error | Mensaje o código de error si el estado es failed |
reviewed | Indicador de control de calidad: vacío / pass / needs-review |
Actualiza el manifiesto in situ a medida que se ejecuta el lote. Un script de Python que lee el manifiesto, omite las filas completed, envía las filas pending y consulta las filas submitted es idempotente por construcción. Puedes reiniciarlo con seguridad en cualquier momento.
Una estructura de directorios 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
...
El patrón de nombres {id}-{speaker}-{date}.{ext} permite reconstruir el manifiesto a partir del sistema de archivos si algo sale mal. Evita los espacios en los nombres de archivo: rompen las URL sin firmar en la mayoría de los sistemas de almacenamiento.
Cómo elegir la API adecuada
Para proyectos por lotes, tres factores determinan qué API elegir: el coste por minuto, el techo de solicitudes concurrentes y si necesitas diarización de hablantes o vocabulario de dominio. Así se ven los precios actuales, verificados contra las páginas de los proveedores a principios de julio de 2026.
| Proveedor | Modelo | Tarifa base | Con diarización | Límite concurrente |
|---|---|---|---|---|
| AssemblyAI | Universal-2 | $0,15/h | $0,17/h | 200 trabajos |
| AssemblyAI | Universal-3.5 Pro | $0,21/h | $0,23/h | 200 trabajos |
| Deepgram | Nova-3 Monolingual | $0,46/h | $0,58/h | 50 solicitudes |
| Deepgram | Nova-3 Multilingual | $0,55/h | $0,67/h | 50 solicitudes |
| AWS Transcribe | Standard (US East) | $0,36/h | N/D integrado | Varía según la cuenta |
| OpenAI | GPT-4o-mini-transcribe | $0,18/h | N/D | Según el nivel de límites |
AssemblyAI lidera en coste para volumen bruto de transcripción. Deepgram Nova-3 cuesta más, pero rinde muy bien con audio ruidoso de varios hablantes y ofrece prompting de términos clave para vocabulario de dominio. AWS Transcribe factura en incrementos de un segundo con un mínimo de 15 segundos por solicitud; ese mínimo infla los costes efectivos cuando tu archivo tiene muchos clips cortos.
Para un archivo de 1.000 horas usando AssemblyAI Universal-2 con diarización, espera unos $170. El mismo trabajo en Deepgram Nova-3 con diarización ronda los $580. Ambos superan la transcripción humana en audio claro por un orden de magnitud.
Consulta la comparativa de precios de transcripción 2026 y el coste de la transcripción por hora para desgloses más detallados.
Patrones de envío: URL frente a subida
Usa el envío por URL para archivos que ya están en almacenamiento en la nube. La API descarga desde una URL firmada; nunca vuelves a subir gigabytes de audio por tu conexión. La mayoría de los sistemas de almacenamiento (S3, R2, GCS) generan URL firmadas con una llamada sencilla al SDK.
Usa la subida directa multipart solo para archivos que viven en local y no se guardarán en otro sitio. A gran escala, el coste de ancho de banda y tiempo de las subidas de local a API se acumula rápido.
El bucle de envío
El patrón básico en Python, escrito para poder reiniciarse:
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 un lote de 1.000 archivos, no hagas sondeo síncrono en un solo hilo. Envía una ventana de trabajos, recoge los ID y luego consulta en paralelo, o cambia a webhooks cuando tu endpoint sea estable.
Paralelismo y límites de velocidad
Limitando el bucle de envío
Incluso con techos altos de concurrencia, enviar las 1.000 solicitudes en 30 segundos disparará los límites de velocidad en la mayoría de los proveedores. Un semáforo te mantiene dentro de los límites:
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)
Añade una pequeña pausa entre envíos (10-50 ms) si ves respuestas 429 durante la ráfaga inicial.
Si necesitas la disyuntiva entre webhook y sondeo explicada para sistemas en producción, ese artículo cubre el árbol de decisión.
Gestión de fallos
Gestión de idiomas en lotes multilingües
Vocabulario personalizado: merece la pena configurarlo primero
Control de calidad: muestrea antes de dar nada por terminado
La tentación con un lote de 1.000 archivos es dar todas las transcripciones por terminadas. El paso de muestreo y revisión ocupa entre el 5 y el 10 % del tiempo del proyecto y detecta los problemas sistémicos que, de lo contrario, se propagarían a cada uso posterior de las transcripciones.
Qué muestrear
Extrae una muestra aleatoria del 5 % de las transcripciones completadas. Incluye al menos un archivo de cada tipo de fuente principal del lote (distintos entornos de grabación, distintos hablantes, equipos diferentes).
Escucha segmentos de 2 minutos de cada archivo muestreado mientras lees la transcripción. Marca:
- Identificación errónea constante de un término recurrente (añádelo a la lista de vocabulario y vuelve a procesar los archivos afectados)
- Atribución incorrecta de hablantes en archivos con varios hablantes (comprueba si la diarización estaba activada; revisa la calidad del audio)
- Secciones donde la confianza cayó (suele correlacionarse con ruido de fondo o habla solapada)
Comprobaciones puntuales en archivos críticos
Algunos archivos importan más que otros. La entrevista principal de un proyecto de investigación. La declaración clave de un archivo jurídico. El episodio fundacional de un pódcast. Revisa esos con más detalle sin importar lo que diga la muestra. Las puntuaciones de confianza de la IA no se corresponden perfectamente con «este archivo era importante».
Umbrales de confianza como señal, no como filtro
Algunos proveedores devuelven puntuaciones de confianza a nivel de palabra en la respuesta JSON. Marca como candidatas a revisión humana las transcripciones cuya confianza media baje de unos 0,80, pero no las descartes automáticamente. Una confianza baja en audio claro suele significar que el vocabulario de dominio resulta desconocido. Una confianza baja en audio ruidoso suele significar que hay que volver a grabar el audio o que el archivo no tiene remedio.
Cálculo de costes para tamaños de proyecto habituales
| Proyecto | Horas | Mejor API | Coste estimado |
|---|---|---|---|
| Entrevistas de investigación | 200 horas | AssemblyAI Universal-2 + diarización | ~$34 |
| Catálogo histórico de pódcast | 1.000 horas | AssemblyAI Universal-2 | ~$150 |
| Archivo jurídico | 500 horas | Deepgram Nova-3 + términos clave | ~$270 |
| Migración de archivo antiguo | 5.000 horas | AssemblyAI Universal-2 | ~$750 |
El plan Pro de CATT, a $9,99/mes, funciona bien para volúmenes mensuales recurrentes de menos de unas 100 horas. Para migraciones grandes puntuales, los precios medidos de la API son más flexibles: pagas por lo que ejecutas sin compromiso mensual.
Consulta precios de transcripción ilimitada frente a medidos para el análisis del punto de equilibrio. Si estás creando un producto que llama a estas APIs en nombre de los usuarios, optimizar el coste de las llamadas a la API de transcripción y almacenar en caché los resultados de transcripción cubren las dos palancas de mayor impacto.
Si solo necesitas transcribir archivos sin construir un flujo de trabajo, un lote puntual o una entrega rápida en un único proyecto, ConvertAudioToText procesa fuentes de audio, vídeo y URL sin configuración en /tools/audio-to-text.
Procesamiento posterior según el tipo de proyecto
Una vez que existen las transcripciones, el trabajo posterior depende del tipo de proyecto:
Proyectos de investigación: Modelado de temas sobre los turnos de los participantes, codificación temática en MAXQDA o NVivo, extracción de citas para bases de datos de referencias. La salida JSON de la mayoría de las APIs incluye marcas de tiempo a nivel de palabra, lo que facilita reconstruir citas con marca de tiempo.
Archivos multimedia: Construcción de índices de búsqueda (Elasticsearch o Meilisearch funcionan bien), enriquecimiento de metadatos, resúmenes por episodio mediante una pasada de LLM sobre cada transcripción.
Archivos jurídicos: Indexación por palabras clave, flujo de revisión de privilegios, extracción de citas legales. Aquí el vocabulario personalizado se amortiza muchas veces: los nombres de casos y las referencias normativas deben ser exactos.
Producción de contenidos: Reconvertir las transcripciones en artículos, boletines y publicaciones para redes sociales. Consulta cómo transcribir grabaciones de entrevistas para el flujo editorial.
El orden de construcción correcto
Para cualquier proyecto nuevo por lotes, esta secuencia ahorra más tiempo:
- Define la convención de nombres y la estructura de directorios.
- Crea o rellena el manifiesto CSV.
- Escribe el script de envío con lectura y escritura del manifiesto.
- Ejecuta un piloto de 10 archivos. Revisa el resultado.
- Corrige los problemas detectados en el piloto (vocabulario, ajustes de idioma, problemas de formato).
- Ejecuta el lote completo.
- Muestrea y revisa el 5 %.
- Reintenta la cola de fallos.
- Entrega al procesamiento posterior.
Mi opinión: el paso del piloto es el punto más importante de esta lista. Detectar un problema del flujo con 10 archivos es barato. Detectarlo en el archivo 800, cuando la ejecución ya ha costado dinero y tiempo reales, es caro. Esos 10 archivos también te dan una muestra real de precisión para mostrar a las partes interesadas antes de comprometerte con el trabajo completo.
Preguntas frecuentes
¿Cuántos archivos puedo enviar en paralelo a las APIs de transcripción?
AssemblyAI procesa hasta 200 trabajos simultáneamente por defecto. El endpoint pregrabado de Deepgram permite hasta 50 solicitudes concurrentes en los planes Pay As You Go y Growth. Ambos límites son a nivel de proyecto. Contacta con ventas para solicitar límites mayores en trabajos sostenidos de gran volumen.
¿Cuál es una tasa de fallos normal en la primera pasada de un lote?
Espera que falle entre el 3 y el 5 % de los archivos en la primera pasada. Una pasada de reintento con backoff exponencial suele resolver entre el 60 y el 80 % de esos fallos. Los fallos restantes suelen tener una causa raíz: audio de origen corrupto, un códec no compatible o un archivo realmente silencioso. El manifiesto te permite clasificarlos sin volver a procesar los archivos exitosos.
¿Debo usar webhooks o sondeo para seguir el estado de los trabajos del lote?
Para lotes de menos de unos cientos de archivos, el sondeo con intervalos de 15-30 segundos es simple y eficaz. Para lotes de miles, los webhooks eliminan la sobrecarga HTTP repetida y reducen la posibilidad de perderse un trabajo completado. La contrapartida: los webhooks requieren un endpoint público estable, lo que añade infraestructura. Consulta el artículo webhook frente a sondeo para transcripciones para ver el árbol de decisión.
¿Cómo gestiono un archivo multilingüe?
O bien preclasifica el idioma por archivo antes del envío (una pasada ligera de identificación de idioma funciona), o usa un modelo multilingüe que maneje todos tus idiomas en un solo nivel de modelo. AssemblyAI Universal-2 cubre 99 idiomas. Deepgram Nova-3 Multilingual cubre más de 30. Definir el idioma explícitamente al enviar siempre es más rápido y preciso que la detección automática a gran escala.
¿Cuándo merece la pena configurar un vocabulario personalizado?
Cualquier archivo con terminología específica del dominio, médico, jurídico, técnico o con mucha carga de marca, se beneficia de una lista de vocabulario. Tanto Deepgram (hasta 100 términos clave por solicitud) como AssemblyAI (hasta 1.000 términos en Universal-3 Pro) admiten sugerencias de vocabulario en línea sin un paso de entrenamiento aparte. Construye la lista una vez y úsala en cada archivo del lote. La ganancia de precisión en términos conocidos es significativa.
Fuentes
- Precios de Deepgram, consultados en julio de 2026: https://deepgram.com/pricing
- Límites de velocidad de la API de Deepgram, consultados en julio de 2026: https://developers.deepgram.com/reference/api-rate-limits
- Documentación de prompting de términos clave de Deepgram, consultada en julio de 2026: https://developers.deepgram.com/docs/keyterm
- Precios de AssemblyAI, consultados en julio de 2026: https://www.assemblyai.com/pricing
- Guía de transcripción por lotes a gran escala de AssemblyAI, consultada en julio de 2026: https://www.assemblyai.com/blog/large-scale-audio-transcription
- Precios de Amazon Transcribe, consultados en julio de 2026: https://aws.amazon.com/transcribe/pricing/
- Precios de transcripción de OpenAI, consultados en julio de 2026: https://developers.openai.com/api/docs/pricing
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
How to Add Timestamps to a Transcript
Learn how to add timestamps to a transcript with an audio-to-text tool, then export timestamped SRT or VTT subtitle files for easy navigation and editing.
How to Transcribe a Conference Talk to Text
Learn how to transcribe a conference talk or keynote to text, label speakers, and export SRT, VTT, or TXT using a straightforward upload or URL workflow.