Cómo funciona
Cómo tu vídeo se convierte en subtítulos sin salir de tu dispositivo
Subtitle Generator ejecuta un modelo de reconocimiento de voz dentro de la pestaña de tu navegador. Aquí tienes cada paso del archivo a los subtítulos, qué descarga y guarda tu navegador, y qué hemos medido y qué no.
Cinco pasos, todos dentro de la pestaña
1. Tu navegador abre el archivo
Eliges un archivo de vídeo o audio y el navegador le da a la página ese único archivo. La página se lo pasa al motor dentro de la pestaña. No se sube nada.
2. El sonido se lee por partes
Donde tu navegador puede, un lector multimedia en un Web Worker lee el sonido de 30 en 30 segundos con los decodificadores de tu navegador y lo pasa a 16 kHz mono, la forma que usa el modelo.
3. Ventanas cortadas en silencios
El sonido se agrupa en ventanas de unos 3 minutos. Cada corte cae en el medio segundo más silencioso cerca de los 3 minutos, así que rara vez parte una palabra.
4. El modelo escribe cada ventana
Un detector de voz marca los tramos con habla, y el modelo de reconocimiento de voz los escribe, con un inicio y un final para cada palabra.
5. Las palabras se vuelven subtítulos
Las palabras se reparten en subtítulos que dé tiempo a leer, los subtítulos aparecen en la página y tú los editas. El archivo SRT o VTT se escribe al pulsar descargar.
El modelo: Whisper, en dos tamaños
Las palabras salen de Whisper, un modelo de reconocimiento de voz que OpenAI publicó en 2022 con sus pesos bajo la licencia MIT. Funciona a través de whisper.cpp, una versión de código abierto en C++, que compilamos a WebAssembly para que pueda ejecutarse en una página web. Eliges entre dos tamaños:
- El modelo pequeño (el predeterminado) es Whisper base, guardado con sus pesos redondeados a 5 bits: una descarga de 59,7 MB.
- El modelo grande es Whisper small, guardado con pesos de 8 bits: una descarga de 264,5 MB que necesita más memoria.
En el artículo de OpenAI, los modelos Whisper más grandes cometían menos errores de media, pero todavía no hemos medido cómo se comparan estos dos en este motor, así que la página los llama «pequeño» y «grande» en vez de prometer que uno es más preciso. Antes del modelo, un pequeño detector de voz, Silero VAD, marca dónde se habla, para que el modelo dedique su tiempo a la voz. Si dejas el idioma en automático, el modelo lo identifica en la primera ventana con voz y la página mantiene ese idioma para el resto del archivo.
Cada ventana se escribe con las últimas palabras de la anterior como contexto (unos 200 caracteres), así que una frase que cruza un corte conserva su redacción y su puntuación. En cuanto termina una ventana, sus subtítulos aparecen en la página y puedes editarlos mientras se escribe la siguiente. Crea subtítulos de tu vídeo para verlo.
Cómo las palabras se vuelven subtítulos
El modelo entrega segmentos de texto con un inicio y un final para cada palabra. Un segmento puede ser una frase larga, así que la página lo corta en subtítulos que dé tiempo a leer:
- Como máximo dos líneas de 42 columnas por subtítulo; un carácter ancho, como en chino o japonés, cuenta como dos columnas. Las escrituras sin espacios se dividen en palabras con el segmentador de palabras de tu navegador.
- Como máximo 7 segundos en pantalla, y al menos 1 segundo cuando el hueco hasta el siguiente lo permite.
- Los cortes caen entre palabras: primero al final de una frase, después en una coma o una pausa de medio segundo o más, y si no, donde las dos partes quedan parejas. Un signo de cierre se queda con la palabra anterior.
- El corte se cronometra con los tiempos de las palabras. Si el modelo no los dio, el tiempo se reparte según el texto.
- Los subtítulos nunca se solapan, y ninguno termina después que el archivo.
Los tiempos son la estimación del propio modelo de dónde empieza y acaba cada palabra, así que un subtítulo puede aparecer un poco antes o un poco tarde. Todavía no hemos medido cuánto en este motor. Si un subtítulo se desvía, puedes corregirlo a mano: mueve su inicio o su final 0,1 segundos, divídelo o únelo con el siguiente.
Qué versión del motor se ejecuta
El motor existe en tres versiones, y la página elige una cuando añades tu primer archivo:
- WebGPU, que se prueba primero cuando tu navegador ofrece un adaptador gráfico que pasa la comprobación de la página. Si falla al cargar o al escribir una ventana, la página cambia a una versión para el procesador y vuelve a escribir esa ventana.
- WebAssembly en varios hilos, un hilo por cada procesador lógico que indica tu navegador. Los hilos necesitan una página aislada entre orígenes, y por eso el sitio envía las cabeceras COOP y COEP.
- WebAssembly en un hilo, el último recurso para un navegador que no puede usar hilos, y la versión que se usa si tu navegador indica dos procesadores lógicos o menos.
La línea bajo la vista previa dice qué versión se usó, por ejemplo «WebAssembly en varios hilos». Todavía no hemos medido la versión WebGPU en una tarjeta gráfica real, así que el sitio no afirma nada sobre su velocidad. Sea cual sea la versión, tu dispositivo hace el trabajo: la línea de estado muestra una estimación del tiempo que falta, medida en tu dispositivo sobre la marcha, en vez de prometer una velocidad.
Qué descarga tu navegador y qué guarda
Todo llega de este sitio. Los modelos se dividen en partes de 20 MiB como máximo, porque el alojamiento sirve archivos estáticos de hasta 25 MiB, y cada parte se comprueba con su huella SHA-256 antes de usarse, así que una descarga dañada se rechaza en lugar de producir subtítulos erróneos. Los tamaños son los de los archivos publicados, en megabytes de un millón de bytes:
| Archivo | Tamaño | Se guarda en |
|---|---|---|
| El motor, versión WebAssembly de varios hilos (si no se usa WebGPU y tu navegador indica más de dos procesadores lógicos) | 1,6 MB | La caché normal del navegador |
| El motor, versión de un hilo (si no hay hilos disponibles o tu navegador indica dos procesadores lógicos o menos) | 1,5 MB | La caché normal del navegador |
| El motor, versión WebGPU (solo si la página encuentra una GPU utilizable) | 3,4 MB | La caché normal del navegador |
| El modelo pequeño, Whisper base (el predeterminado) | 59,7 MB, en 3 partes | Cache Storage, tras comprobar cada parte con SHA-256 |
| El modelo grande, Whisper small (solo si lo eliges) | 264,5 MB, en 13 partes | Cache Storage, tras comprobar cada parte con SHA-256 |
| El detector de voz, Silero VAD | 0,9 MB, en 1 parte | Cache Storage, tras comprobarlo con SHA-256 |
| El lector multimedia (parte de los scripts de la página) | 0,3 MB | La caché normal del navegador |
El motor, el modelo y el detector solo se descargan cuando añades un archivo, no al abrir la página. Tu archivo, su sonido y tus subtítulos no se guardan nunca: viven en la pestaña abierta y desaparecen al cerrarla. Para eliminar el modelo guardado, borra los datos de este sitio en tu navegador. La prueba de red paso a paso muestra cómo ver todo esto en las herramientas para desarrolladores de tu navegador.
Cómo lo probamos
Una prueba automática de navegador se ejecuta con cada cambio del sitio. Carga una copia compilada del sitio en Chromium, el motor de Chrome y Edge, con las cabeceras de seguridad del propio sitio, y comprueba, entre otras cosas, que:
- una frase en inglés de 3,5 segundos del corpus LibriSpeech, "Concorde returned to its place amidst the tents.", sale como subtítulos con dos palabras mal como mucho, con el modelo pequeño, desde un archivo WAV, un vídeo MP4 y un archivo WebM;
- tras una edición, un desplazamiento de 0,1 segundos y una división, los archivos SRT y VTT se leen de vuelta exactamente como los subtítulos de la página, y el lector de subtítulos del propio Chromium carga el VTT;
- en un archivo de 60 segundos con voz cada 10 segundos, los subtítulos aparecen ventana a ventana y cada frase empieza en su marca;
- Cancelar detiene el proceso, y el siguiente archivo reutiliza el modelo guardado, sin una nueva descarga;
- un clip en silencio no da subtítulos, una parte dañada de un archivo conserva los subtítulos anteriores y un archivo que no es multimedia se rechaza;
- cada solicitud va a este sitio, como GET o HEAD sin cuerpo.
Esa prueba usa una frase breve de una sola persona, en un solo idioma. Demuestra que las piezas funcionan juntas; no mide la precisión de los subtítulos.
Límites que conviene conocer
- La precisión y los tiempos aún no están medidos en este motor, así que ninguna página da una cifra. La música, el ruido y las personas que hablan a la vez provocan más errores.
- Sin nombres de quien habla, sin descripción de sonidos, sin traducción. Los subtítulos son las palabras dichas, en el idioma en que se dicen.
- Los archivos largos tardan. Donde tu navegador puede, la página lee por partes y nunca tiene todo el sonido del archivo a la vez, pero cada minuto de audio es trabajo para tu procesador. El archivo más largo que hemos procesado hasta ahora dura 12 minutos.
- Algunos archivos se leen enteros. Cuando tu navegador no puede decodificar el sonido por partes, la página lo decodifica de una vez y se detiene en 500 MB o 1 hora.
- No está probado en teléfonos. El modelo grande puede necesitar más memoria de la que un teléfono tiene libre; la página avisa cuando el navegador informa de que se ha quedado sin ella.
Los componentes de código abierto y sus licencias están en la página de créditos de código abierto.
Pruébalo con tu propio vídeo
Funciona en tu navegador. Tu archivo nunca sale de tu dispositivo.