Saltar al contenido principal
SubtitleMatrix

Extraer subtítulos de un vídeo

Archivos multimediaSubtítulos dentro de un vídeo

La primera ejecución descarga el motor de subtítulos: unos 31 MB, servidos por este sitio y almacenados en caché por el navegador después. El video en sí nunca sale de esta pestaña.

Esta página toma un archivo de vídeo y te devuelve las pistas de subtítulos que ya lleva dentro, un archivo por pista y con el nombre del idioma de la pista. Un archivo Matroska con una pista inglesa SDH, una pista china y una pista de imágenes PGS sale como tres archivos: un .srt, otro .srt y un .sup. El contenedor se demultiplexa en lugar de recodificarse, así que una pista de texto se copia como los bytes que ya estaban en el archivo: no se vuelve a escribir desde una pantalla ni se vuelve a cronometrar.

El trabajo ocurre en la pestaña. El vídeo lo lee una compilación de ffmpeg compilada a WebAssembly que este sitio sirve por su cuenta, y la única petición de red es la de ese motor: unos 31 MB la primera vez que usas la página, que el navegador guarda después en caché. El vídeo no se envía nunca a ningún sitio, que es la misma regla que sigue el resto de las páginas de este sitio y la razón por la que esta se puede usar con material que no puede salir del equipo.

Los subtítulos incrustados en la imagen no se pueden extraer, y ninguna herramienta puede hacerlo, porque no hay pista que leer: esas palabras son píxeles. Si el archivo no tiene ninguna pista de subtítulos, la página lo dice en lugar de producir un archivo vacío, y eso incluye el caso de los subtítulos incrustados: un vídeo con subtítulos visibles y sin pista de subtítulos se informa como un archivo sin nada que extraer.

La página enumera todas las pistas de subtítulos que encuentra antes de escribir nada: índice, códec, idioma, título y si la pista está marcada como predeterminada o forzada. Las pistas que ya viven en su propio contenedor conservan su formato —ASS sigue siendo ASS, WebVTT sigue siendo WebVTT—, porque convertirlas aquí a SRT descartaría el estilo sin avisar, y descartar el estilo sin que nadie lo pida es lo único que este sitio no hace. Una pista cuyo códec no tiene contenedor propio (la pista mov_text dentro de un MP4, por ejemplo) se recodifica a SRT, y la tarjeta del resultado lo dice en lugar de dejarla pasar como una copia.

Las pistas de mapa de bits salen como imágenes, no como texto: un flujo PGS se convierte en un .sup y un flujo de DVD en un .sub. Es deliberado: la imagen es lo que había en el archivo, y adivinar su texto es un trabajo aparte con su propia página y su propia pregunta de idioma. Lleva el .sup a la página de PGS si necesitas texto. La cancelación detiene la extracción en curso y termina el worker que la está haciendo, así que un archivo grande no mantiene un núcleo ocupado después de que hayas decidido no esperar.

Preguntas frecuentes

¿Qué contenedores de vídeo puedo soltar?

MKV, MP4, M4V, AVI, MOV, TS, WebM, WMV, FLV, MPG y OGV. La lista es en realidad una lista de demultiplexores que tiene la compilación incluida de ffmpeg, no una lista de códecs de vídeo: sea lo que sea lo que hay dentro del contenedor, las pistas de subtítulos son el mismo tipo de flujo. Un archivo con una extensión poco habitual pero un cuerpo Matroska normal suele funcionar, porque el demultiplexor lee la cabecera y no el nombre; una descarga fragmentada o incompleta a menudo no, porque no hay índice que recorrer.

¿El vídeo sale de mi equipo mientras se lee?

No. La única descarga es el propio motor ffmpeg, unos 31 MB, servido desde este sitio y guardado por el navegador después del primer uso. Tu vídeo se monta en el sistema de archivos virtual del motor dentro de la pestaña y se lee desde ahí; nunca se escribe en el cuerpo de una petición. Puedes confirmarlo en el panel Red: mientras se procesa un archivo no hay ninguna petición que lo lleve. Esa propiedad es la razón de que la página exista: la mayoría de los extractores suben primero, y el material bajo custodia legal o médica no se puede subir.

¿Por qué he obtenido un archivo .sup en lugar de un .srt?

Porque esa pista está guardada como imágenes, no como texto. Los flujos PGS (códec hdmv_pgs_subtitle) son una secuencia de imágenes, y la extracción honesta de un flujo de imágenes es un flujo de imágenes: un .sup, que es exactamente lo que esperan los reproductores y los editores de subtítulos. Convertirlo en texto significa reconocer las letras de cada imagen, que es otra página con una pregunta de idioma y un paso de revisión. El extractor nunca inventa texto que no leyó.

¿Qué hace la herramienta con una pista cuyo formato no tiene archivo propio?

Recodifica esa pista a SRT y marca el resultado como recodificado. El caso habitual es mov_text, el códec de subtítulos que vive dentro de MP4: no tiene formato de archivo propio, así que copiar el flujo tal cual produciría bytes que nada podría abrir. La recodificación no es sin pérdidas —el estilo y el posicionamiento que mov_text pueda llevar no sobreviven—, así que la tarjeta del resultado lo enumera como pérdida en lugar de presentar el archivo como una copia intacta de lo que había en el contenedor.

¿Cómo se nombran los archivos de salida cuando hay varias pistas?

Con el nombre del vídeo y el código de idioma de la pista: un archivo llamado documentary.mkv con una pista inglesa da documentary.eng.srt. Cuando dos pistas comparten idioma —una pista inglesa normal y una pista inglesa SDH, algo habitual—, la segunda pasa a documentary.eng-2.srt en lugar de sobrescribir la primera. Una pista sin etiqueta de idioma recurre a su índice de flujo, así que sigue siendo distinguible. Si obtienes más de un archivo, la página los ofrece como un único zip, porque los navegadores bloquean que una página inicie varias descargas a la vez.

¿Por qué la primera ejecución tarda más que la segunda?

La primera ejecución descarga el motor ffmpeg, unos 31 MB. La línea de progreso cubre esa descarga y después la extracción. El navegador guarda el motor en caché, así que las ejecuciones posteriores en la misma página empiezan casi de inmediato; lo mismo ocurre tras una recarga si no se ha borrado la caché. El motor se sirve en cuatro piezas porque la plataforma de alojamiento rechaza archivos individuales de más de 25 MiB, y la página las ensambla en memoria antes de empezar: ese ensamblaje forma parte de la misma espera del primer uso.

¿Puedo cancelar una ejecución que está tardando demasiado?

Sí. El botón de cancelar detiene la extracción en curso y termina el worker que la está haciendo, así que un archivo grande no mantiene un núcleo ocupado después de que hayas decidido no esperar. Cancelar no es un error: el elemento vuelve a un estado desde el que puedes reintentar y la siguiente ejecución arranca un worker nuevo. No se ofrece ninguna parte parcial como descarga, porque un archivo de subtítulos a medio escribir que parece completo es peor que no tener archivo.

Herramientas relacionadas