faster-whisper: un motor de transcripción Whisper más rápido

faster-whisper reimplementa la inferencia de Whisper con CTranslate2, haciendo que la transcripción local y del lado del servidor sea más rápida y eficiente en memoria.

faster-whisper es una implementación de inferencia de Whisper mantenida por SYSTRAN. Usa CTranslate2 como backend, mantiene un flujo cercano a Whisper y hace que la velocidad de inferencia, el uso de memoria y la flexibilidad de despliegue sean más adecuados para trabajo de ingeniería.

Si has usado openai/whisper, puedes pensar en faster-whisper como una alternativa más orientada a producción. La interfaz sigue girando alrededor de cargar un modelo, transcribir audio y leer resultados segmentados, pero la capa de ejecución es más rápida y más fácil de ajustar para CPU, GPU, cuantización y batching.

Qué problema resuelve

Whisper funciona bien, pero la implementación original suele encontrar varios problemas cuando se despliega directamente:

  1. El audio largo puede tardar bastante en transcribirse.
  2. El uso de memoria GPU puede ser alto.
  3. La ejecución en CPU funciona, pero la velocidad puede no ser ideal.
  4. El throughput no siempre es fácil de escalar al procesar grandes lotes de audio o video.

faster-whisper optimiza principalmente estos puntos. Su README indica que, con la misma precisión, puede ser hasta 4 veces más rápido que openai/whisper usando menos memoria. Con cuantización de 8 bits, la velocidad puede mejorar aún más.

Instalación

En un entorno Python normal, instálalo directamente:

1
pip install faster-whisper

Si quieres usar GPU, asegúrate de que las versiones locales de CUDA, cuDNN y CTranslate2 sean compatibles. Este es el punto más fácil para tropezar: el código puede estar bien, pero la inferencia puede fallar al cargar el modelo o ejecutar la primera solicitud si el driver GPU y el runtime CUDA no coinciden.

Uso básico

El ejemplo mínimo es directo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from faster_whisper import WhisperModel

model_size = "large-v3"

model = WhisperModel(model_size, device="cuda", compute_type="float16")

segments, info = model.transcribe("audio.mp3", beam_size=5)

print("Detected language '%s' with probability %f" % (info.language, info.language_probability))

for segment in segments:
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))

Los parámetros clave son:

Parámetro Propósito
model_size Selecciona el tamaño del modelo Whisper, como small, medium o large-v3
device Dispositivo de inferencia, normalmente cuda o cpu
compute_type Precisión de cálculo, como float16, int8_float16 o int8
beam_size Anchura de búsqueda de decodificación; valores mayores suelen ser más estables pero más lentos

Si tu objetivo es una transcripción local rápida, empieza probando medium o large-v3. Si la memoria GPU es limitada, considera la cuantización.

Elegir CPU o GPU

Con una GPU NVIDIA, prefiere:

1
model = WhisperModel("large-v3", device="cuda", compute_type="float16")

Si la memoria GPU no alcanza, cambia a:

1
model = WhisperModel("large-v3", device="cuda", compute_type="int8_float16")

Sin GPU, ejecútalo en CPU:

1
model = WhisperModel("small", device="cpu", compute_type="int8")

El modo CPU encaja mejor con tareas ligeras, trabajos en segundo plano poco frecuentes o servidores sin tarjeta gráfica. Para mucho audio largo, la GPU sigue siendo la mejor opción.

Transcripción por lotes

faster-whisper también ofrece transcripción por lotes. El batching es útil para muchos audios cortos o cuando necesitas mayor throughput de GPU:

1
2
3
4
5
6
7
8
from faster_whisper import WhisperModel, BatchedInferencePipeline

model = WhisperModel("turbo", device="cuda", compute_type="float16")
batched_model = BatchedInferencePipeline(model=model)
segments, info = batched_model.transcribe("audio.mp3", batch_size=16)

for segment in segments:
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))

Un batch_size mayor no siempre es mejor. Mejora el throughput, pero también aumenta la presión sobre la memoria GPU. En la práctica, prueba valores como 4, 8 y 16 paso a paso hasta encontrar un punto estable para tu máquina.

VAD y marcas de tiempo por palabra

La transcripción de voz suele tener que lidiar con silencios largos, ruido de fondo y alineación de subtítulos. faster-whisper incluye parámetros prácticos que se pueden activar directamente durante la transcripción.

Activar VAD:

1
segments, info = model.transcribe("audio.mp3", vad_filter=True)

Obtener marcas de tiempo por palabra:

1
2
3
4
5
segments, info = model.transcribe("audio.mp3", word_timestamps=True)

for segment in segments:
    for word in segment.words:
        print("[%.2fs -> %.2fs] %s" % (word.start, word.end, word.word))

VAD es útil para grabaciones de reuniones, podcasts y repeticiones de directos con secciones largas de silencio. Las marcas de tiempo por palabra son útiles para subtítulos, revisión de transcripciones y resaltado de palabras en reproductores.

Elegir un modelo

La elección del modelo depende sobre todo de precisión, velocidad y recursos de la máquina.

Escenario Recomendación
Pruebas rápidas small o medium
Contenido chino priorizando calidad large-v3
Memoria GPU ajustada int8_float16 o un modelo más pequeño
Tareas en segundo plano con CPU Modelo pequeño más int8
Muchos audios cortos Probar BatchedInferencePipeline

Para voz en chino, empieza con large-v3 si la calidad importa. Si la máquina va demasiado justa, reduce el tamaño del modelo o usa cuantización. No mires solo la velocidad al principio: si baja la calidad de transcripción, el tiempo extra de revisión manual puede anular el tiempo de inferencia ahorrado.

Casos de uso adecuados

faster-whisper encaja bien para:

  1. Generar subtítulos de video.
  2. Transcribir podcasts, reuniones y grabaciones de cursos.
  3. Crear flujos locales de transcripción para Bilibili, YouTube y videos similares.
  4. Archivar y buscar contenido de audio por lotes.
  5. Enviar contenido hablado a RAG, bases de conocimiento o sistemas de búsqueda.

No resuelve directamente tareas de nivel superior como diarización de hablantes, resumen o segmentación por capítulos, pero puede servir como una capa de transcripción estable. Puedes añadir pyannote para diarización y un LLM para resumen y limpieza estructurada.

Sugerencias de despliegue

Para uso real, depura en este orden:

  1. Usa un clip de audio de 1 a 3 minutos para confirmar que el entorno corre correctamente.
  2. Prueba la precisión con muestras que coincidan con tu idioma y calidad de audio objetivo.
  3. Revisa el uso de memoria GPU antes de decidir si activar cuantización.
  4. Divide primero el audio largo, para que una tarea fallida no obligue a repetirlo todo.
  5. Guarda salidas TXT y SRT para facilitar la revisión posterior.

Para tareas del lado del servidor, carga el modelo durante el inicio del servicio en vez de recargarlo por cada solicitud. Cargar el modelo toma tiempo, y recargarlo con frecuencia también puede volver menos estable la gestión de memoria GPU.

OpenAI Whisper: alcance del modelo y límites prácticos

openai/whisper es un proyecto de reconocimiento de voz de código abierto OpenAI. La dirección de la tesis es Reconocimiento robusto del habla mediante supervisión débil a gran escala. Permite a muchas personas obtener, por primera vez con un umbral bajo, capacidades de transliteración de voz multilingüe que se pueden ejecutar localmente.

Aunque hoy en día existen más rápido: Whisper, Whisper.cpp, varios ASR en la nube y modelos de voz de nueva generación, el Whisper original sigue siendo el punto de partida para comprender el ecosistema ASR de código abierto.

¿Para qué es adecuado?

Los usos comunes de Whisper incluyen:

  • Audio a texto;
  • Generación de subtítulos de vídeo;
  • Transcripción de podcasts;
  • Actas de reuniones;
  • Reconocimiento de voz multilingüe;
  • Traducción de voz al inglés;
  • Borrador de subtítulos y recuperación de contenidos.

Sus ventajas son robustez, multilenguaje, código abierto y madurez ecológica. Muchas herramientas posteriores están optimizadas en torno al modelo o interfaz de Whisper.

Usa límites

Whisper no es un dictador universal:

  • El ruido, los acentos y la superposición de varias personas afectarán los resultados;
  • Los términos y nombres profesionales requieren posprocesamiento;
  • El audio largo debe segmentarse;
  • Es posible que las marcas de tiempo no siempre sean perfectas;
  • La velocidad de inferencia y el uso de recursos de la versión original pueden no ser adecuados para la producción;
  • Preste atención al procesamiento y almacenamiento local de audio privado.

Si necesita servicios de producción de alto rendimiento, es posible que desee considerar implementaciones más rápidas de Whisper, Whisper.cpp, por lotes, de cuantificación y de GPU.

¿Para quién es adecuado?

Adecuado:

  • Herramientas de subtítulos y transliteración;
  • Procesar podcasts, cursos y grabaciones de conferencias;
  • Estudiar modelos ASR;
  • Crear un servicio local de voz a texto;
  • Organizar contenidos multilingües.

Si sólo transcribes ocasionalmente una pieza de audio, un servicio alojado puede ser menos problemático; Si le importa la privacidad y el costo, una implementación local es más atractiva.

Fuentes de referencia

Desplegar faster-whisper en un NAS

El escenario más adecuado para implementar Whisper en NAS no es buscar “subtítulos de conferencias en tiempo real”, sino colocar videos caseros, entrevistas, grabaciones de cursos, podcasts y archivos de conferencias en un directorio privado para generar transcripciones y subtítulos SRT a pedido o en lotes.

Para la mayoría de los NAS, se recomienda comenzar con faster-whisper. Utiliza el motor de inferencia CTranslate2, puede usar CPU o GPU CUDA y admite cuantificación, filtrado de silencio VAD y marca de tiempo a nivel de palabra. Primero utilice un modelo pequeño para ejecutar el proceso y luego decida si desea actualizar el modelo en función de la precisión y el tiempo de espera.

Hablemos primero de la conclusión.

La ruta más segura hacia el reconocimiento de voz local de NAS es:

1
2
3
4
5
6
准备输入 / 输出目录
-> 安装 ffmpeg 与 faster-whisper
-> 用短音频跑 small 或 base
-> 检查 TXT 和 SRT
-> 开启 VAD 过滤
-> 再做批量任务、GPU 加速或 Docker 封装

Los NAS sin gráficos discretos también pueden transcribir, pero deben tratarse como una tarea fuera de línea. Si desea transcribir vídeos largos con frecuencia, grabar a varias personas o buscar una respuesta más rápida, la función de la GPU suele ser más obvia que simplemente aumentar la capacidad del disco duro.

Cómo elegir un modelo

Whisper viene en modelos de diferentes tamaños. Los modelos más grandes generalmente son mejores para manejar acentos, ruido y contexto complejo, pero tienen inferencias más lentas y mayores requisitos de memoria.

Modelo Sugerencias sobre NAS Adecuado para la escena
tiny / base Proceso de prueba, NAS de bajo consumo Audio corto claro, vista previa rápida
small El punto de partida para la mayoría de los NAS domésticos Conferencias generales de chino, cursos y subtítulos de vídeos.
medium La CPU NAS suele ser más lenta; inténtalo de nuevo si tienes una GPU Audio con más ruido y jerga
large-v3 / turbo Más adecuado para hosts GPU con suficiente memoria de vídeo Transcripción sin conexión de alta calidad, procesamiento por lotes de audio largo

No juzgues el efecto sólo por el nombre del modelo. La claridad de la grabación, la superposición de los oradores, la música de fondo, la distancia del micrófono y los nombres propios a menudo afectan la transcripción final más que pasar de small a un modelo más grande.

Planificación de directorios: entrada, salida y caché de modelo separados

Tome el NAS de Linux como ejemplo:

1
2
3
mkdir -p ~/asr/inbox
mkdir -p ~/asr/out
mkdir -p ~/asr/models

Acuerdo sugerido:

1
2
3
~/asr/inbox/   放 MP3、M4A、WAV、MP4 等输入文件
~/asr/out/     放 TXT、SRT、JSON 等结果
~/asr/models/  放下载的模型缓存

Las tareas por lotes tienen más miedo de mezclar entradas, salidas y caché de modelos en el mismo directorio. Después de la separación, la copia de seguridad, la limpieza y el control de permisos son más fáciles.

Entorno de instalación

En un contenedor NAS o Linux tipo Debian/Ubuntu, primero instale las herramientas básicas:

1
2
sudo apt update
sudo apt install -y python3 python3-venv ffmpeg

Cree un entorno virtual independiente:

1
2
3
4
python3 -m venv ~/asr/.venv
source ~/asr/.venv/bin/activate
pip install --upgrade pip
pip install faster-whisper

ffmpeg se utiliza para leer formatos comunes de audio y video. Sin él, es posible que MP4, M4A o algunos formatos de codificación no se transcodifiquen ni se lean correctamente.

Guión de transliteración mínima

Escribe el siguiente código en ~/asr/transcribe.py:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from pathlib import Path
from faster_whisper import WhisperModel

input_file = Path("/home/USER/asr/inbox/sample.mp3")
output_dir = Path("/home/USER/asr/out")
output_dir.mkdir(parents=True, exist_ok=True)

model = WhisperModel(
    "small",
    device="cpu",
    compute_type="int8",
    download_root="/home/USER/asr/models",
)

segments, info = model.transcribe(
    str(input_file),
    language="zh",
    vad_filter=True,
    word_timestamps=True,
)

segments = list(segments)

lines = []
for segment in segments:
    text = segment.text.strip()
    lines.append(text)
    print(f"[{segment.start:.2f} -> {segment.end:.2f}] {text}")

(output_dir / f"{input_file.stem}.txt").write_text(
    "\n".join(lines), encoding="utf-8"
)

Cambie /home/USER en el código a su directorio de usuario real de Linux, luego ejecute:

1
2
source ~/asr/.venv/bin/activate
python ~/asr/transcribe.py

Cuando se ejecuta por primera vez, Fast-Whisper descargará el modelo correspondiente. Una vez que el modelo se haya descargado correctamente, se guardará en el download_root que especificó y no será necesario volver a descargarlo en el futuro.

Parámetros recomendados de CPU NAS

Cuando no hay GPU, se da prioridad al control del tamaño del modelo y la precisión del cálculo:

1
2
3
4
5
6
model = WhisperModel(
    "small",
    device="cpu",
    compute_type="int8",
    download_root="/home/USER/asr/models",
)

int8 suele ser adecuado como punto de partida para la inferencia de la CPU. Si el NAS también proporciona sincronización de archivos, indexación de fotografías, descarga o servicios multimedia, se recomienda que:

  • Comience con base o small;
  • Evite ejecutar múltiples tareas de transcripción al mismo tiempo;
  • Los vídeos largos están programados durante las horas de menor actividad;
  • Observe la memoria del sistema, la temperatura de la CPU y el intercambio;
  • No permita que el NAS realice grandes cantidades de transcodificación, verificación y transcodificación al mismo tiempo.

El objetivo de un NAS con CPU debería ser una “finalización estable” en lugar de ponerse al día con el progreso de la reproducción de audio en tiempo real.

Cómo configurar cuando hay GPU NVIDIA

Cuando su host NAS o Linux tenga una GPU NVIDIA disponible, intente:

1
2
3
4
5
6
model = WhisperModel(
    "small",
    device="cuda",
    compute_type="float16",
    download_root="/home/USER/asr/models",
)

Cuando la memoria es escasa, puedes intentar:

1
2
3
4
5
6
model = WhisperModel(
    "small",
    device="cuda",
    compute_type="int8_float16",
    download_root="/home/USER/asr/models",
)

El compute_type real disponible depende de CTranslate2, CUDA, controlador y GPU. Verifique primero con audio corto y luego procese archivos largos. Si lo coloca en Docker, primero debe confirmar que el contenedor puede ver la GPU; cuando nvidia-smi no está disponible en el contenedor, el transcriptor no recibirá aceleración CUDA.

¿Por qué se recomienda activar el filtrado VAD?

VAD (Detección de actividad de voz) omite segmentos que obviamente están mudos. Para grabaciones de conferencias, pausas largas, música de fondo o archivos con mucho espacio en blanco al principio y al final de la grabación, suele haber dos ventajas:

  • Reducir el tiempo de razonamiento sin sentido;
  • Reduzca la probabilidad de que los segmentos silenciosos sean reconocidos como texto irrelevante.

Habilitado en susurro más rápido:

1
2
3
4
segments, info = model.transcribe(
    "input.mp3",
    vad_filter=True,
)

Pero VAD no es un interruptor que “nunca falla”. Cuando la voz es muy suave, la música y las voces humanas se mezclan o la grabación del teléfono es intermitente, debe verificar aleatoriamente si el VAD ha cortado accidentalmente el contenido válido.

Generar subtítulos SRT

Cada segmento de Whisper tiene una hora de inicio y finalización. Se puede generar un SRT simple basado en el script anterior:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
def srt_time(seconds: float) -> str:
    milliseconds = round(seconds * 1000)
    hours, milliseconds = divmod(milliseconds, 3_600_000)
    minutes, milliseconds = divmod(milliseconds, 60_000)
    seconds, milliseconds = divmod(milliseconds, 1000)
    return f"{hours:02}:{minutes:02}:{seconds:02},{milliseconds:03}"

blocks = []
for index, segment in enumerate(segments, start=1):
    blocks.append(
        f"{index}\n"
        f"{srt_time(segment.start)} --> {srt_time(segment.end)}\n"
        f"{segment.text.strip()}\n"
    )

(output_dir / f"{input_file.stem}.srt").write_text(
    "\n".join(blocks), encoding="utf-8"
)

Si desea resaltar palabra por palabra o realizar una edición más detallada, puede leer la marca de tiempo a nivel de palabra después de word_timestamps=True. Sin embargo, los resultados a nivel de palabras también requieren comprobaciones manuales al azar, especialmente una mezcla de chino e inglés, nombres de personas, lugares y abreviaturas.

No ejecute transferencias por lotes completos de una sola vez

Se recomienda procesar archivos por lotes en serie o con baja concurrencia por cola:

1
2
3
for file in ~/asr/inbox/*; do
  python ~/asr/transcribe.py "$file"
done

Se debe agregar al script real la lógica para el filtrado de extensiones, el registro de éxitos/errores y la omisión de archivos completados. Lo más importante es: procesar 5 muestras primero, confirmar que el directorio de salida, el idioma, el modelo y la línea de tiempo de los subtítulos sean correctos antes de comenzar todo el lote de tareas.

La ejecución ciega y simultánea de varias tareas de transferencia large-v3 en el NAS puede provocar fácilmente que la memoria, la memoria de la GPU o la disipación de calor se conviertan en cuellos de botella. Si el servicio de transcripción también comparte recursos con álbumes de fotos, copias de seguridad y descargadores, la cola debería ser limitada.

Cómo utilizar Docker de forma estable

Muchos NAS son más adecuados para gestionar servicios con Container Manager o Docker. Se recomienda ejecutar primero la versión de Python en el host o en un contenedor de Linux normal y luego empaquetar el contenedor. Al contenerizar, al menos:

  • Monte el directorio de entrada como de solo lectura;
  • Monte el directorio de salida por separado y con capacidad de escritura;
  • Monte el directorio de caché del modelo de forma persistente;
  • Se corrigieron las versiones de susurro más rápido, CTranslate2 y Python;
  • Si utiliza una GPU, primero verifique el tiempo de ejecución del contenedor y la transferencia del dispositivo.

No monte todo el directorio compartido del NAS en el contenedor de transcodificación en modo lectura-escritura. La tarea de reconocimiento de voz solo requiere leer audio y video y escribir los resultados del texto. Cuanto menores sean los permisos, menor será el impacto de un mal funcionamiento.

Límites de precisión y privacidad

La ventaja de la implementación local es que no es necesario cargar el audio en un servicio de terceros, pero esto no significa que la salida sea naturalmente precisa. Whisper puede escuchar mal nombres, jerga, números y segmentos silenciosos, así como texto poco confiable cuando se expone a ruido o espacios en blanco largos.

El siguiente contenido debe revisarse manualmente:

  • registros médicos, legales, financieros y de seguridad;
  • Subtítulos publicados al público;
  • Citas de entrevistas y resoluciones de reuniones;
  • Nombre, monto, fecha, número de teléfono y modelo de producto.

Conservar el audio original y tratar la transcripción como un primer borrador es un proceso más seguro que “eliminar el archivo original inmediatamente después de la transcripción”.

Un conjunto de configuraciones predeterminadas adecuadas para NAS

Si no tienes una tarjeta gráfica discreta:

1
2
3
4
5
model: base 或 small
device: cpu
compute_type: int8
vad_filter: true
并发: 1

Si tienes una GPU NVIDIA disponible:

1
2
3
4
5
model: small 起步,按效果再试 medium
device: cuda
compute_type: float16 或 int8_float16
vad_filter: true
并发: 从 1 开始压测

Primero use la misma grabación real de 10 a 30 minutos para comparar la línea de tiempo de las palabras omitidas, los errores tipográficos y los subtítulos que consumen mucho tiempo antes de decidir si actualizar el modelo. No confíe únicamente en unos segundos de muestras claras para juzgar si un NAS es adecuado para la transcripción a largo plazo.

Resumir

La implementación de Whisper NAS puede comenzar con un susurro más rápido: modelo pequeño, baja concurrencia, filtrado VAD, separación de directorios de entrada y salida. CPU NAS puede manejar transcripciones fuera de línea de baja frecuencia; El GPU NAS con un entorno CUDA correcto es más adecuado para una gran cantidad de vídeos y modelos más grandes.

Lo que realmente determina la experiencia no es “Se puede instalar Whisper”, sino la calidad del audio, el tamaño del modelo, la cola de transcodificación real y de cuántos otros servicios es responsable el NAS. Primero, reproduzca una pieza de audio real y luego amplíela.

referirse a:

Resumen

El valor de faster-whisper es que convierte Whisper en un componente de transcripción más adecuado para uso sostenido. No es un modelo distinto; es un backend de inferencia y una interfaz de ingeniería más eficientes.

Para flujos personales, puede convertir rápidamente videos, reuniones y audio de cursos en texto. Para tareas de servidor, puedes ajustar rendimiento con GPU, cuantización, batching y VAD. Siempre que el entorno de la máquina esté configurado correctamente, es más adecuado que la implementación original de Whisper para trabajos estables y por lotes de speech-to-text.

Proyecto: https://github.com/SYSTRAN/faster-whisper