De SRT a texto: obtener una transcripción limpia a partir de subtítulos
Publicado el 5/8/2026 · 13 min de lectura · Herramientas para desarrolladores
Daniel Okonkwo — Desarrollador front-end y redactor de Tecnología en OneKitly
Rendimiento web · Formatos de archivo
Verificado con 3 fuentes
Este conversor quita exactamente dos cosas: el número del subtítulo y la línea de tiempos. Todo lo que hay entre la línea de tiempos y el separador en blanco pasa intacto, lo que es una decisión deliberada y también lo que más gente entiende al revés. Dale un archivo de subtítulos y las etiquetas de cursiva sobreviven como <i>…</i>, las de color como <font color="#ffff00">, la orden de posición como {\an8}, las descripciones sonoras como [GAVIOTAS], los guiones de diálogo como un guion seguido de espacio, y en un archivo WebVTT las etiquetas de voz sobreviven como <v Roger Bingham>, junto con las de clase y las marcas en línea <00:00:07.500> usadas para resaltar palabra a palabra. Lo que sí gestiona por ti, del lado WebVTT, es la estructura alrededor de los subtítulos: el encabezado WEBVTT, los bloques de comentario NOTE, los bloques STYLE, los bloques REGION, los identificadores y la lista de ajustes tras la flecha se descartan todos. Lo segundo que hay que saber es qué hace la opción de fusión. «Unir cada subtítulo en una sola línea» junta las líneas dentro de un subtítulo; nunca junta una frase repartida en dos subtítulos, y nada en el archivo lo permitiría: un corte de subtítulo decide cuánto texto cabe en pantalla, no dónde acaba la frase. Una línea «Lo del puerto» seguida de un subtítulo «es que nunca llegó a helarse» sale en dos líneas en los dos modos. Los subtítulos rodantes que repiten una línea tampoco se depuran. Cuenta con una pasada de buscar y reemplazar para el marcado y una relectura para las uniones.
Quitar los números y las marcas de tiempo es la mitad fácil. La que decide si la transcripción se lee son las etiquetas de cursiva, los guiones de diálogo, las descripciones sonoras y las frases partidas en dos subtítulos, y este conversor te las deja todas.
La mitad fácil: números, tiempos, líneas en blanco
Un archivo SubRip son cuatro cosas repetidas: un contador, una línea de tiempos, una o más líneas de texto y una línea en blanco que cierra el bloque. Tres de esas cuatro son andamiaje. Quítalas y tienes una transcripción: por ahí empieza todo conversor de subtítulos a texto y ahí acierta todo el mundo. Este lee cada bloque, avanza hasta encontrar una línea con la flecha y conserva todo lo que sigue hasta la línea en blanco. El contador se descarta esté o no en orden, así que un archivo con números duplicados o desordenados se convierte sin problema.
Una consecuencia que conviene conocer: un subtítulo sin texto cuenta igualmente como subtítulo. Algunos codificadores emiten un bloque vacío para sacar un rótulo de pantalla; el conversor encuentra su línea de tiempos, conserva la nada que sigue y la transcripción se abre con dos líneas en blanco antes de la primera frase real. Inofensivo, pero parece un fallo de tu exportación y no una rareza de tu origen, así que conviene reconocerlo.
La mitad difícil: todo lo que el conversor deja dentro
El texto de subtítulos no es texto plano. El programa SubRip original admitía un pequeño juego de formato heredado del HTML —negrita, cursiva, subrayado y color— y esas etiquetas viajan con el archivo. Los fansubs y los rips añaden más: {\an8} para subir un rótulo a la parte alta del cuadro cuando chocaría con un texto incrustado, y descripciones sonoras entre corchetes como [GAVIOTAS] o [MÚSICA], propias del subtitulado para personas sordas. Dos hablantes en un mismo subtítulo se marcan por convención con un guion y un espacio al principio de cada línea. Nada de eso se quita aquí, y nada debería quitarse sin una decisión tuya: que una transcripción conserve sus descripciones sonoras depende por completo de para qué sea.
WebVTT trae su propio vocabulario, y el trato que le da el conversor se parte limpiamente en dos. La estructura alrededor de los subtítulos sí se gestiona: la línea de encabezado WEBVTT, los bloques de comentario NOTE, los bloques STYLE con CSS, los bloques REGION que definen zonas de desplazamiento, el identificador opcional de la línea de encima de los tiempos y la lista de ajustes que puede seguir a la flecha —alineación, posición, línea, región— se eliminan todos, porque nunca están dentro del cuerpo del subtítulo. El marcado dentro del cuerpo no se trata en absoluto. Una etiqueta de voz, que la especificación define como una etiqueta de apertura v con una anotación que nombra al hablante, llega a tu transcripción como el texto literal <v Roger Bingham>. Las etiquetas de clase llegan como <c.yellow>…</c>. El resaltado palabra a palabra llega como marcas desnudas del tipo <00:00:07.500> plantadas en medio de una frase.
Limpiar eso es un trabajo de buscar y reemplazar y lleva un minuto, pero hazlo en el orden correcto. Quita primero las etiquetas emparejadas, porque borrar solo los signos de menor y mayor dejaría detrás texto de atributo huérfano. Decide después qué hacer con los corchetes: consérvalos para una transcripción de accesibilidad, quítalos para una fuente de traducción. Decide por último sobre los guiones, que llevan información real en un subtítulo de dos voces y son puro ruido en uno de una sola. Solo después de eso merece la pena leer buscando el sentido.
Una frase, dos subtítulos: la unión que ninguna herramienta puede hacer por ti
Los subtítulos se cortan donde se acaba la pantalla, no donde se acaba la frase. Una misma oración se reparte a menudo en dos subtítulos, y en la transcripción eso da dos líneas que se leen como fragmentos. El conversor ofrece una opción de fusión, y conviene ser preciso sobre qué fusiona: la casilla une las líneas dentro de un subtítulo, de modo que un rótulo de dos líneas pasa a una. No une, ni puede unir, de un subtítulo a otro. Probado con un archivo cuyo primer subtítulo dice «Lo del puerto» y el segundo «es que nunca llegó a helarse», los dos modos devuelven dos líneas separadas.
No es tanto un defecto como un límite de la entrada. Nada en un archivo SubRip marca dónde acaba una frase; la única señal disponible es la puntuación y las mayúsculas del propio texto, y ambas son poco fiables de una lengua a otra. La heurística que funciona bastante bien a mano es sencilla: une un subtítulo al anterior cuando ese anterior no termina en punto, interrogación, exclamación o comilla de cierre, y cuando el siguiente no empieza por mayúscula ni por guion de diálogo. Aplicada por una máquina, esa regla destroza los sustantivos alemanes, las abreviaturas y los puntos suspensivos; aplicada por un lector que conoce la lengua, cuesta unos minutos en una transcripción de largometraje.
El otro desorden recurrente viene del subtitulado en directo. Los subtítulos de difusión suelen rodar: una línea aparece abajo y luego sube cuando llega la siguiente, y el codificador escribe los dos estados como subtítulos distintos, de modo que la misma frase figura dos o tres veces seguidas en el archivo. El conversor no depura duplicados —no tiene por qué, ya que una réplica repetida de verdad también es posible—, así que una transcripción de un directo puede salir casi el doble de larga de lo debido. Arreglarlo exige una relectura, y es el mejor argumento para pedir a quien te da el archivo la versión que aparece de golpe en vez de la versión rodante.
SRT o VTT: el mismo conversor dos veces
Hay dos conversores en este sitio, uno para SubRip y otro para WebVTT, y en la práctica se comportan igual. Los dos leen bloques, los dos ignoran lo que no tiene línea de tiempos, los dos descartan los bloques NOTE y STYLE, los dos aceptan una coma o un punto antes de los milisegundos, y los dos aceptan una marca con o sin campo de horas. La única diferencia formal es que el de WebVTT reconoce y salta por su nombre el bloque de encabezado WEBVTT, y el de SubRip lo descarta igualmente, porque un bloque de encabezado no contiene línea de tiempos y por tanto nunca llega a ser un subtítulo. Probados uno junto a otro sobre el mismo archivo WebVTT, los dos producen una salida idéntica byte a byte.
Eso es cómodo más que descuidado: puedes pegar cualquiera de los dos formatos en cualquiera de las dos páginas y obtener la misma transcripción, que es lo que querías. También significa que ninguna de las dos páginas te dirá que tu archivo está mal formado. Si en una línea de tiempos falta la flecha o está mal escrita, todo ese bloque desaparece en silencio de la salida en vez de provocar un error, y el único síntoma es un recuento de subtítulos menor del esperado. El recuento aparece bajo el cuadro de entrada; compáralo con el último número de tu archivo antes de fiarte del resultado.
| Elemento | Cómo aparece en el archivo | Qué hace el conversor | Qué te queda a ti |
|---|---|---|---|
| Número y línea de tiempos | 1 / 00:00:01,000 --> 00:00:04,000 | Se quitan | Nada |
| Encabezado WebVTT, bloques NOTE, STYLE, REGION | WEBVTT / NOTE Transcrito el 11-02-2026 | Se quitan | Nada |
| Identificador y ajustes de subtítulo | hello-1 / align:start position:10% | Se quitan | Nada |
| Etiquetas de cursiva, negrita y color | <i>…</i>, <b>…</b>, <font color="#ffff00">…</font> | Se conservan tal cual | Quita las etiquetas emparejadas antes que los signos |
| Orden de posición y descripciones sonoras | {\an8}, [GAVIOTAS], [MÚSICA] | Se conservan tal cual | Borra la orden; decide sobre los corchetes |
| Guiones de diálogo y etiquetas de voz | - ¿Lo viste? / <v Roger Bingham> | Se conservan tal cual | Conviértelos en las etiquetas de hablante que quieras |
| Una frase repartida en dos subtítulos | El subtítulo 1 corta a media oración, el 2 empieza en minúscula | Dos líneas separadas, en los dos modos | Une a mano: sin puntuación al final, sin mayúscula al principio |
Preguntas frecuentes
- ¿Quita las etiquetas de cursiva, los guiones de diálogo y los rótulos [MÚSICA]?
- No. Quita el número del subtítulo y la línea de tiempos, y deja pasar el resto exactamente como está escrito. Probado con un archivo que reúne todos los casos habituales, la salida sigue conteniendo <i>…</i>, <b>…</b>, <font color="#ffff00">…</font>, la orden de posición de tipo ASS {\an8}, la descripción sonora [GAVIOTAS], los guiones de dos hablantes al principio de cada línea y —con entrada WebVTT— la etiqueta de voz <v Roger Bingham>, las de clase como <c.yellow>…</c> y las marcas en línea como <00:00:07.500>. Es una decisión defendible, porque que una transcripción conserve sus descripciones sonoras depende de para qué sea: un registro de accesibilidad las quiere, una fuente de traducción no. Pero implica que la conversión es un paso de dos. Reserva luego una pasada de buscar y reemplazar, y quita pares de etiquetas completos y no solo los signos, o te quedarás con texto de atributo huérfano como color="#ffff00" en medio de tu prosa.
- Una frase se reparte en dos subtítulos. ¿Cómo la paso a una sola línea?
- No con la casilla de fusión: esa une las líneas dentro de un subtítulo, no dos subtítulos entre sí, y el rótulo se presta a confusión. Verificado con un archivo donde el subtítulo 1 corta a media oración y el 2 la continúa: tanto el modo por bloques como el fusionado devuelven dos líneas separadas. La unión tiene que ser tuya, porque nada en el archivo la señala. La regla que funciona es negativa por ambos lados: une un subtítulo al anterior cuando ese anterior no termina en punto, interrogación, exclamación, dos puntos o comilla de cierre, y cuando el actual no empieza por mayúscula ni por guion de diálogo. Hazlo en relectura manual y no en script: abreviaturas, puntos suspensivos y, en alemán, sustantivos en mayúscula la rompen lo bastante a menudo como para que una pasada automática cueste más de reparar de lo que ahorra.
- ¿Qué diferencia hay entre el conversor de SRT y el de VTT?
- En comportamiento observable, ninguna. Son la misma rutina con un indicador, y ese indicador solo hace que la versión WebVTT reconozca por su nombre el bloque de encabezado WEBVTT, que la versión SubRip descarta igualmente porque ese bloque no tiene línea de tiempos y por tanto nunca llega a ser un subtítulo. Las dos descartan los bloques NOTE y STYLE, las dos aceptan una coma o un punto antes de los milisegundos, las dos aceptan una marca con o sin campo de horas, y las dos ignoran lo que sigue a la flecha en una línea de tiempos. Con el mismo archivo WebVTT, las dos páginas devuelven texto idéntico. Usa la página que corresponda a tu archivo, por tranquilidad mental, pero no esperes que la página VTT limpie las etiquetas de voz ni que la página SRT rechace un .vtt: no pasa ninguna de las dos cosas. Lo único que hay que vigilar en ambas es el recuento de subtítulos bajo el cuadro de entrada. Una línea de tiempos mal formada hace desaparecer todo su bloque sin error, y un recuento menor que el último número de tu archivo es la única pista.
- ¿Por qué mi transcripción repite la misma línea dos o tres veces?
- Porque el origen es subtitulado rodante. En directo, una línea aparece en la parte baja de una ventana de dos o tres líneas y luego sube al llegar la siguiente, y el codificador registra cada estado de la ventana como un subtítulo propio. La misma frase figura por tanto en subtítulos consecutivos, a veces tres veces, y el archivo es un registro fiel de lo que había en pantalla en cada momento más que de lo que se dijo. El conversor no depura duplicados, y no debería adivinar: una réplica repetida de verdad por efecto tiene exactamente el mismo aspecto en el archivo. Quitar las repeticiones es una relectura —ordenar las líneas para encontrarlas destruye la secuencia, así que hazlo en orden. Si puedes influir en el origen, pide subtítulos que aparezcan de golpe: cada frase se escribe una vez y la transcripción sale limpia.
- Quiero el texto pero también los tiempos. ¿Qué debo usar?
- Este conversor no, que quita los tiempos por diseño y no ofrece forma de conservarlos. Usa en su lugar el conversor de SRT a CSV: escribe una fila por subtítulo con índice, inicio, fin y texto, de modo que los tiempos ocupan sus propias columnas y el texto sigue siendo legible y buscable. Esa forma es además la que quieres si la transcripción va a ser editada o traducida por otra persona, porque mantiene cada línea atada al momento al que pertenece y puede volver a convertirse en un archivo de subtítulos después. El texto plano es la salida correcta cuando el destino es prosa —un resumen, un índice de búsqueda, un documento— y la equivocada en cuanto alguien aguas abajo necesite saber cuándo se dijo algo.
Artículos que podrían interesarte
Todas las guías →Herramientas relacionadas
SubRip no tiene especificación. La Biblioteca del Congreso lo describe como parcialmente documentado y mal normalizado, así que lo que cuenta como archivo .srt válido lo decide el reproductor, el codificador o la plataforma que lo lee, y dos de ellos acabarán discrepando. Todo lo que se describe aquí se comprobó contra la salida real de la herramienta, no contra una norma, porque este formato no tiene ninguna. WebVTT es distinto —tiene una especificación publicada por el W3C— pero sigue siendo un Candidate Recommendation Draft y no una recomendación terminada. Guarda el archivo original, prueba el convertido en el reproductor o el gestor de subida que de verdad vayas a usar antes de tirar nada, y trata cualquier afirmación sobre lo que hacen «todos los reproductores», incluidas las de esta página, como algo que verificar en el tuyo.
Fuentes
- W3C — WebVTT: The Web Video Text Tracks Format, Candidate Recommendation Draft of 20 May 2026 — defines the WEBVTT header, NOTE comment blocks, STYLE blocks, REGION definition blocks, the optional cue identifier, the cue settings list after the arrow, and the cue voice span whose start tag v carries an annotation naming the speaker
- Library of Congress — Sustainability of Digital Formats, FDD000569, SubRip Subtitle format (SRT): describes the four components of a cue — counter, start and end time separated by two hyphens and a right angle bracket, one or more lines of text, blank line — and records that the SubRip software supported a limited set of text formatting derived from HTML tags including bold, italic, underline and colour
- Matroska — Subtitles technical page: when SRT is muxed into Matroska the cue text is converted to UTF-8 as S_TEXT/UTF8 and placed in the block, and because there are no general settings for SRT the CodecPrivate is left blank — the container carries the text and the timing, and nothing else
¿Has detectado un error en este artículo?