Respuesta directa — ¿Cómo automatizar la transcripción de archivos en un Mac? Existen tres rutas. Montar un script de shell alrededor de whisper.cpp y ffmpeg, envolverlo en un Atajo y mantenerlo tú mismo. Enviar archivos a una API de transcripción en la nube y aceptar que el audio sale de tu Mac. O llamar a una API HTTP local dentro de una app de transcripción, que mantiene cada archivo en el equipo y no necesita ningún script que mantener.
Si quieres automatizar la transcripción en un Mac, la parte difícil casi nunca es el reconocimiento de voz — los modelos locales llevan años siendo suficientemente buenos. Es la fontanería: el disparador, la conversión de formato, la cola, la exportación y lo que se rompe después de una actualización de Homebrew.
Esta guía compara las tres rutas — scripts DIY, Atajos de macOS y una API de transcripción local en tu equipo — con el código que realmente ejecutarías en cada una.
¿Qué implica realmente automatizar la transcripción en un Mac?
Tres capas, y solo una de ellas es reconocimiento de voz. Confundirlas es la razón por la que la mayoría de los intentos de automatización se atascan a mitad de camino.
- El disparador — una Acción Rápida de Finder, una carpeta vigilada, una tarea cron o un nodo en un orquestador.
- El motor — el modelo que convierte el audio en texto, más toda la preparación que exige.
- La salida — un archivo, un portapapeles, una fila de base de datos, una pista de subtítulos, una nota en Markdown.
Una API en la nube reduce las tres capas a una sola llamada HTTP, al precio de subir el audio. Un script DIY te da control total y las tres capas que mantener. Una API local mantiene el motor y el audio en tu Mac mientras sigue reduciendo la llamada a una sola línea.
¿Pueden los Atajos de macOS transcribir archivos por sí solos?
No, no con un motor local. Atajos es excelente en disparadores y fontanería — Apple describe un atajo como «una forma rápida de completar una o varias tareas con tus apps» — pero no incluye ninguna acción de transcripción offline de propósito general que puedas apuntar a un MP4 cualquiera.
Los proyectos de la comunidad muestran la solución. Los repositorios compartidos de transcripción de audio con atajos de mac funcionan todos de la misma manera: el Atajo aporta el disparador y la ruta del archivo, y luego una acción Ejecutar Script de Shell entrega el trabajo a un motor externo.
Uno envuelve un script de zsh alrededor de la herramienta de línea de comandos de MacWhisper, recurriendo a whisper.cpp de Homebrew como alternativa. Otro importa un .shortcut que llama a un script de shell que combina whisper.cpp con ffmpeg. Ambos demuestran lo mismo: Atajos es el disparador, nunca el motor.
¿Qué implica la ruta DIY con whisper.cpp?
Configuración y mantenimiento. El motor es gratuito y excelente; el mantenimiento es el precio a pagar, y no es cero.
Una configuración mínima de script de automatización de transcripción en mac tiene este aspecto:
# 1. Install the engine and the converter
brew install ffmpeg
brew install whisper-cpp
# 2. Fetch a model file by hand (e.g. ggml-large-v3-turbo.bin)
# 3. Convert first — whisper.cpp's CLI reads 16-bit WAV only
ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav
# 4. Then transcribe
whisper-cli -m ~/.cache/whisper.cpp/models/ggml-large-v3-turbo.bin -f output.wav
El paso 3 no es opcional. El README oficial de whisper.cpp es explícito: «el ejemplo whisper-cli actualmente solo funciona con archivos WAV de 16 bits, así que asegúrate de convertir tu entrada antes de ejecutar la herramienta», y publica el comando de ffmpeg mostrado arriba.
Esa restricción es donde se rompen la mayoría de las cadenas de automatización de whisper.cpp en mac: cada nuevo formato, entrevista en estéreo y contenedor de vídeo debe convertirse primero, y el fallo es silencioso hasta que lees una transcripción vacía.
Añade las demás piezas móviles — archivos de modelo renombrados, una actualización de Homebrew, sin cola de trabajos, sin progreso, sin historial — y el script de una tarde se convierte en una pequeña herramienta interna que ahora es responsabilidad tuya. Nuestra guía de instalación de whisper.cpp cubre esa ruta en detalle.
¿Qué es una API de transcripción local y por qué cambia el flujo de trabajo?
Una API de transcripción local es un servidor HTTP que se ejecuta dentro de una app de escritorio en tu propio equipo, de modo que otros programas pueden enviarle un archivo y recibir el texto de vuelta sin que ningún audio salga del Mac. La misma forma de solicitud que una API en la nube, sin ninguna subida.
Weesper Transcribe incluye una como función Pro opcional. Se vincula a la dirección de loopback 127.0.0.1 — inaccesible desde tu red — en un puerto configurable (8765 por defecto), está desactivada por defecto, y cada endpoint excepto la comprobación de estado requiere un token Authorization: Bearer que se muestra en Ajustes → Automatización.
Dos detalles de diseño importan para la automatización:
- Quien llama sube los bytes de audio, no una ruta de archivo. La compilación de la App Store está en sandbox y no puede leer rutas arbitrarias de otro proceso, así que los bytes viajan por loopback.
- Síncrono y asíncrono en un solo endpoint. Un clip corto bloquea hasta terminar; una grabación larga devuelve un identificador de trabajo de inmediato y tú consultas el progreso.
Los endpoints
| Endpoint | Autenticación | Qué hace |
|---|---|---|
GET /v1/health | No | Comprobación de actividad — estado y versión |
GET /v1/models | Sí | Lista los ids de modelos y cuáles están instalados |
POST /v1/transcribe | Sí | Envía bytes de audio, recibe texto y segmentos con marca de tiempo |
GET /v1/jobs/<id> | Sí | Estado, progreso, y luego texto y ruta de exportación |
Las opciones viajan como parámetros de consulta, y todo lo que omitas recurre a los ajustes guardados de la app: model, language, task (transcribe o translate), format, name, export, async.
Una llamada, de principio a fin
TOKEN=… # copied from Settings → Automation
# Synchronous: transcribe and write an SRT into the auto-export folder
curl -s -X POST "http://127.0.0.1:8765/v1/transcribe?format=srt&name=meeting" \
-H "Authorization: Bearer $TOKEN" \
--data-binary @meeting.m4a | jq .text
# Asynchronous: long file, poll for the result
JOB=$(curl -s -X POST "http://127.0.0.1:8765/v1/transcribe?async=true&name=lecture" \
-H "Authorization: Bearer $TOKEN" --data-binary @lecture.mp4 | jq -r .job_id)
curl -s "http://127.0.0.1:8765/v1/jobs/$JOB" -H "Authorization: Bearer $TOKEN" | jq
Sin paso de conversión, sin gestión de modelos, sin cola que programar. La respuesta lleva el texto y los segmentos con marca de tiempo, y la app renderiza un archivo en el formato que pediste — uno de nueve, incluidos SRT y VTT, cuando los subtítulos son el entregable.
¿Cómo se comparan las tres rutas?
Elige la ruta según lo que quieras optimizar: control, privacidad o piezas móviles que quieras tener bajo tu responsabilidad.
| Criterio | Scripts DIY (whisper.cpp) | API local (Weesper Transcribe) | API de transcripción en la nube |
|---|---|---|---|
| El audio sale de tu Mac | ❌ Nunca | ❌ Nunca | ✅ Cada archivo se sube |
| Esfuerzo de configuración | Alto — Homebrew, modelos, conversión | Bajo — activar, copiar token | Bajo — clave de API |
| Conversión de formato | Manual (ffmpeg, WAV de 16 bits) | Gestionada por la app | Gestionada por el servicio |
| Cola de trabajos y progreso | Lo construyes tú | Incluido, síncrono o asíncrono | Incluido |
| Funciona offline | ✅ | ✅ | ❌ |
| Coste recurrente | Ninguno | Mejora Pro de pago único | Por minuto o por puesto |
| Quién lo mantiene | Tú | La app | El proveedor |
| Historial y búsqueda | Lo construyes tú | Incluido, por palabra clave y semántico | Alojado por el proveedor |
En resumen: el DIY gana en control y solo cuesta tu tiempo, la nube gana en escala y pierde en confidencialidad, y una API local es el término medio cuando el audio no debe salir del equipo.
Tres recetas de automatización que merece la pena copiar
Empieza por el disparador que ya usas. El paso de transcripción es una sola línea en cada caso.
- Acción Rápida de Finder — crea un Atajo que reciba archivos como entrada, añade una acción Ejecutar Script de Shell con la llamada
curlde arriba y--data-binary @"$1", y luego haz clic derecho en cualquier grabación para transcribirla. Guarda el token en el script o en un elemento del Llavero (Keychain), nunca en un parámetro de URL. - Carpeta vigilada — apunta una Acción de Carpeta o un pequeño bucle de
fswatcha tu directorio de grabaciones y lanza la misma llamada por cada archivo nuevo. Defineexport=truey la transcripción llega a tu carpeta de exportación. - Paso de orquestador — en n8n, un nodo Execute Command invoca
curl. Su documentación es explícita al decir que el nodo ejecuta comandos «en la máquina host que ejecuta n8n», «no está disponible en n8n Cloud», y está desactivado por defecto desde n8n 2.0. Un paso de transcripción local con n8n necesita, por tanto, una instancia autoalojada en el mismo Mac — que es precisamente el sentido de una API de loopback.
Para un flujo de automatización de transcripción por lotes, puede que no necesites ningún orquestador: pon una carpeta en cola dentro de la app y usa la API solo para lo que tus propias herramientas manejen.
¿Qué ruta deberías elegir?
Elige según la restricción que no vaya a cambiar.
- Elige scripts DIY si quieres control total sobre el modelo y no te importa ser responsable de un pipeline de conversión. Lo más barato en dinero, lo más caro en atención.
- Elige una API local si el audio es confidencial — entrevistas con clientes, grabaciones médicas, trabajo aún no publicado — y quieres automatización sin mantenimiento.
- Elige una API en la nube si transcribes a una escala que ningún portátil puede absorber y el material no es sensible.
¿Todavía estás sopesando apps en lugar de rutas? Nuestra comparativa entre TranscribeNext y Weesper Transcribe cubre el lado de la captura de reuniones de esa decisión.
Preguntas frecuentes
¿Cómo puedo automatizar la transcripción en un Mac sin escribir scripts?
Usa una app que exponga una API de transcripción local y llámala desde lo que ya gestiona tu trabajo: un Atajo, una Acción de Carpeta, una tarea programada o un flujo de n8n. Weesper Transcribe incluye un servidor HTTP opcional vinculado a 127.0.0.1 y protegido por un token bearer. Una sola llamada curl envía los bytes de audio y devuelve el texto, además de un archivo renderizado en tu carpeta de auto-exportación.
¿Pueden los Atajos de macOS transcribir un archivo de audio por sí solos?
No, para archivos arbitrarios con un motor local. Atajos es muy bueno en el disparador y la fontanería: una Acción Rápida en Finder, una Acción de Carpeta, una entrada en la hoja de compartir. La transcripción tiene que venir de algún sitio, por eso los atajos de la comunidad en GitHub envuelven una acción Ejecutar Script de Shell alrededor de whisper.cpp o una herramienta de línea de comandos de terceros.
¿Cuánto cuesta realmente la ruta de automatización DIY con whisper.cpp?
Configuración y mantenimiento, no dinero. Los scripts de la comunidad publicados instalan ffmpeg y whisper.cpp mediante Homebrew, descargan archivos de modelo a mano y convierten cada entrada primero, porque la herramienta de línea de comandos de whisper.cpp solo funciona con archivos WAV de 16 bits. Una actualización de Homebrew, un archivo de modelo renombrado o un formato de entrada no contemplado romperán la cadena en silencio.
¿Es seguro dejar activada una API de transcripción local?
Depende de cómo esté vinculada y autenticada. La API de Weesper Transcribe está desactivada por defecto, escucha solo en 127.0.0.1, por lo que es inaccesible desde tu red, y requiere un token bearer en cada endpoint excepto la comprobación de estado. Las solicitudes que llevan una cabecera Origin de navegador son rechazadas, así que una página web no puede llamarla a tus espaldas.
¿Puedo ejecutar una API de transcripción local desde n8n u otra herramienta de automatización?
Sí, cuando la herramienta se ejecuta en el mismo Mac. La documentación de n8n indica que su nodo Execute Command ejecuta comandos de shell en la máquina host que ejecuta n8n y que no está disponible en n8n Cloud — así que una instancia autoalojada puede invocar curl, mientras que una instancia en la nube no puede alcanzar 127.0.0.1 en tu portátil.
Conclusión
Automatizar la transcripción en un Mac ha sido posible durante años, pero solo mediante scripts que tenías que construir y mantener con vida. Los proyectos de la comunidad demuestran la demanda y exponen el coste: dependencias de Homebrew, archivos de modelo manuales, un paso de conversión antes de cada archivo.
Una API de loopback traslada ese trabajo dentro de la app — la misma llamada de una línea que un servicio en la nube, la misma superficie de automatización para Atajos, vigilantes de carpetas y orquestadores autoalojados, y el audio nunca sale del equipo.
¿Listo para convertir la transcripción en un paso de tu pipeline? Descubre cómo Weesper Transcribe gestiona lotes, exportaciones y la API de automatización local, o consíguela en la Mac App Store — descarga gratuita, macOS 13 o posterior, mejora Pro de pago único, sin suscripción. Las preguntas de configuración se responden en la documentación de soporte.