FFmpeg 8.0 agrega soporte para Whisper
(code.ffmpeg.org)- La versión 8.0 de FFmpeg agrega oficialmente soporte para el modelo de reconocimiento de voz Whisper
- Whisper es un modelo de reconocimiento de voz de código abierto desarrollado por OpenAI, usado para convertir automáticamente voz en texto en varios idiomas
- Con la incorporación de esta función, aumenta la posibilidad de automatizar directamente flujos de trabajo de conversión de voz a texto en tareas de procesamiento de video y audio
- Para desarrolladores y el campo de la automatización de medios, se refuerzan considerablemente la utilidad y eficiencia de FFmpeg
- Al integrar funciones modernas de reconocimiento de voz, se reduce la carga de depender de herramientas externas adicionales o de procesos de integración complejos
Resumen del soporte de Whisper en FFmpeg 8.0
- La versión 8.0 de FFmpeg ofrece la capacidad de convertir automáticamente datos de voz en texto en varios idiomas al agregar soporte para el modelo de reconocimiento de voz Whisper
- Whisper utiliza un algoritmo basado en aprendizaje profundo creado por OpenAI, lo que garantiza un rendimiento de conversión de voz a texto con alta precisión
- Los usuarios actuales de FFmpeg obtienen la comodidad de poder generar subtítulos o extraer el contenido hablado de archivos de video y audio mediante la función integrada de soporte para Whisper, sin pasar por herramientas externas
Principales ventajas de la integración de Whisper
- Gracias a la integración de Whisper, es posible implementar flujos de trabajo de reconocimiento de voz eficientes y altamente escalables dentro de pipelines de procesamiento y automatización de medios basados en FFmpeg
- Al estar integrado el algoritmo de reconocimiento de voz, los desarrolladores tienen la ventaja de obtener resultados de transcripción de voz a texto con comandos simples sin la carga de realizar integraciones adicionales complejas ni escribir scripts por separado
Importancia industrial de la combinación FFmpeg y Whisper
- En áreas como la gestión de grandes activos multimedia, la generación de subtítulos y el archivado de datos de video, la combinación FFmpeg + Whisper tiene la fortaleza de lograr al mismo tiempo eficiencia de costos y automatización
- Antes era necesario integrar una herramienta de reconocimiento de voz de código abierto por separado con FFmpeg, pero ahora se espera simplificar el flujo de trabajo y mejorar la velocidad de procesamiento al hacerlo directamente dentro de FFmpeg
Detalles técnicos
- Se agregó a FFmpeg un filtro de audio basado en la biblioteca Whisper.cpp para realizar reconocimiento automático de voz (ASR) directamente dentro de FFmpeg
- Puede activarse con la opción
--enable-whisper, y es obligatorio especificar la ruta del modelo (model) - Opciones principales: configuración de idioma (language), uso de GPU (use_gpu), tamaño de cola (queue), formato de salida (format: text/srt/json), modelo y umbral de VAD (detección de actividad de voz), entre otras
- Si el valor de queue es pequeño, mejora la capacidad en tiempo real pero baja la precisión y aumenta la carga de CPU; si es grande, sube la precisión pero aumenta la latencia
- Con la opción destination es posible guardar los resultados en un archivo de salida, una URL o metadatos, y también se admite el protocolo AVIO
- Se incluyen escenarios de ejemplo como generación de subtítulos SRT, envío HTTP en formato JSON y transcripción en tiempo real desde micrófono (usando VAD)
- Ejemplo de generación de archivo de subtítulos SRT
ffmpeg -i input.mp4 -vn \ -af "whisper=model=../whisper.cpp/models/ggml-base.en.bin:language=en:queue=3:destination=output.srt:format=srt" \ -f null -
- Ejemplo de generación de archivo de subtítulos SRT
1 comentarios
Opiniones de Hacker News
Quisiera recomendar Subtitle Edit (y también está bien apoyar económicamente a su desarrollador). Subtitle Edit es una buena interfaz para experimentar con Whisper. Si antes usaste Aegisub, Subtitle Edit bien podría llamarse Aegisub 2.0.
HOWTO: arrastra un archivo de video o audio a la ventana de la derecha y luego ve a Video > Audio to text (Whisper). Yo normalmente obtuve el mejor rendimiento con Faster-Whisper-XXL. Si es posible, recomiendo usar large-v2 (large-v3 incluso tiene algunas regresiones). No es perfecto, pero se puede corregir bastante bien con funciones como Tools > Fix common errors de Subtitle Edit.
Si tienes una tarjeta gráfica Nvidia reciente, necesitas ingresar
--compute_type float32para que funcione correctamente. Si da error, quizá necesites reinstalar la librería torch desde un índice específico, como en el siguiente comando: Si logran resolver este tipo de error, sería útil que dejen en los comentarios qué problema era y cómo lo solucionaron; eso puede ayudar a otras personas también (y sirve para búsquedas web).Sitio oficial de Subtitle Edit
Página para apoyar al desarrollador de Subtitle Edit
Releases de la última versión de Subtitle Edit
Puedes habilitar la selección automática de backend con este comando:
uv pip install torch torchvision torchaudio --torch-backend=autoEnlace con la guía detallada
Los paquetes relacionados con torch se descargan desde el índice de torch, y el resto desde PyPI, así que no hay que preocuparse por conflictos.
Incluso en videos técnicos producidos de forma profesional he visto que meten subtítulos innecesarios que no se pueden quitar. No son videos de gatitos; ya es demasiado.
Con transcripción local se puede hacer traducción automática y también se evita la experiencia incómoda de tener que mostrar subtítulos encima de otros subtítulos ya incrustados.
Por ejemplo, en casos como “I scream” y “Ice cream”, donde la pronunciación es parecida pero el significado es totalmente distinto, quisiera saber si puede cambiar el texto anterior basándose en información que aparece después en el contexto largo.
Creo que esta forma de trabajar es una condición necesaria para lograr tanto tiempo real como precisión. De hecho, vi que en la transcripción de Android el texto se va ajustando sobre la marcha mientras uno habla.
"How to wreck a nice beach you sing calm incense"
Enlace al paper
Me pregunto si las personas con discapacidad auditiva congénita estudian aparte cómo entender o crear juegos de palabras sonoros (juegos lingüísticos, ritmo, etc.).
Sería como trabajar con matemáticas abstractas sin una sensación empírica de referencia, aunque los matemáticos también afirman que, desde su abstracción, crean fenómenos experienciales parecidos a la música; eso también me parece interesante.
Enlace al PDF
No conozco bien la arquitectura de Whisper, pero en general los modelos ASR hacen que el decodificador también tenga en cuenta sonidos posteriores al bloque actual para entender el contexto. Por eso usan un modelo de lenguaje para ajustar la salida hacia formas gramaticalmente naturales como “I like ice cream”.
Run Whisper audio transcriptions with one FFmpeg command
Antes se añadió un filtro sr (super resolution), pero ya tiene tiempo y hasta conseguir los pesos es complicado; además se agregó soporte para varias librerías de ML (como libtorch), pero tampoco es fácil empezar.
Preferiría que hubiera modelos listos para usar agrupados en una carpeta
models, para poder aplicar rápidamente distintos modelos de upscale, reducción de ruido, upscale temporal y más.Hoy en día, la mayor parte de la investigación en filtros de audio y video se basa en ML, y probablemente los nuevos códecs también lo serán.
Referencia en Wikipedia sobre Whisper
Lista completa de modelos Whisper
Tengo una película japonesa muy antigua, pero no existe una traducción al inglés, así que no la he podido ver.
Antes busqué un traductor en Fiverr, y según la tarifa oficial costaba miles de dólares; negociando bajó a cientos, pero al final dejó de responder.
La calidad depende del dialecto y de la calidad del audio, y el modelo "large-v3" da los mejores resultados.
Puedes usar la integración con ffmpeg con un comando como este:
ffmpeg -i movie.mp4 -af whisper=model=large-v3:task=translate output.srtIncluso el modelo “English” en realidad soporta varios idiomas y puede traducir directamente al inglés.
También puedes transcribir primero en japonés y luego usar otro traductor para pasarlo al inglés. En diálogos semánticamente complejos, ese método a veces da mejores resultados.
Ejemplo:
traducción directa: japonés → inglés: Enlace de referencia de whisper-standalone-win
A menudo inventaba contenido que no estaba en el audio, y si en el video se mezclaban varios idiomas, se confundía por completo.
No entiende nada de contexto, así que aparecen con frecuencia errores como los que se ven en traducciones automáticas tipo YouTube.
El mejor rendimiento se logra usando el modelo más grande, aunque la velocidad depende del hardware.
Otra opción es usar un flujo como VideoToTextAI, que extrae subtítulos, los traduce a más de 100 idiomas y los guarda como archivo SRT.
Muchas veces agrega al azar frases que no existen.
Puede servir para clasificación de clases, pero se queda corto para transcripción de subtítulos.
Estaría bien que funcionara directamente en Mac sin tener que buscar modelos por cuenta propia.
Documentación de SpeechTranscriber
Documentación de SpeechAnalyzer
Reseña práctica y comparación con Whisper
O sea:
1. clonar el git de whisper.cpp
2. instalar las dependencias de esa librería
3. compilar con éxito
4. descargar el modelo real
Solo después de eso se puede usar el filtro
-af "whisper=model...Si no haces ese trabajo previo, falla, y para principiantes eso va a ser muy frustrante.
Creo que sería más eficiente hacer el avfilter de Whisper de forma nativa y dejar solo la descarga del modelo; así tendría mucha más adopción entre usuarios reales.
Hay que considerar la velocidad a la que cambia el proyecto whisper-cpp.
Igual que con otros filtros (como vmaf), cuando se requieren compilaciones de dependencias y descarga de modelos, probablemente pronto aparecerán binarios precompilados orientados a principiantes (además de que whisper-cpp tiene licencia MIT).
Hay errores y alucinaciones, pero funciona suficientemente bien para lo que quiero.
En una situación así, el reconocimiento de hablantes sería especialmente importante.