Saltar al contenido principal
SubtitleMatrix

Añadir BOM a los subtítulos

Texto y estiloCorregir codificación y BOM
O pega el texto de los subtítulos

Opciones

Una BOM son tres bytes al principio del archivo que declaran en qué codificación está. Es invisible en todos los editores y reproductores, no ocupa espacio en pantalla y nada de los subtítulos cambia al añadirla o quitarla. Dos tipos de herramienta se preocupan por ella: los programas de Windows que escriben subtítulos, que la ponen por defecto, y los analizadores estrictos de las cadenas de compilación, que rechazan un archivo que empieza por ella. Esta página abre el recuadro en el estado que nombra su título, así que puedes cambiarlo si tu archivo resulta ser del otro tipo. Un archivo en UTF-16 siempre lleva BOM, porque así sabe el lector cuál de los dos órdenes de bytes está viendo; pedir que se quite en ese caso la deja en su sitio.

La velocidad de fotogramas con la que se cuentan los tiempos. En las páginas de formato es lo que necesita MicroDVD, porque guarda los tiempos como números de fotograma. En las páginas de velocidad de fotogramas es la velocidad con la que se cronometró el archivo (la versión para la que se hicieron los subtítulos), y el segundo recuadro de la página toma la velocidad del video con el que vas a usarlos. 23,976, 24, 25, 29,97, 30, 50, 59,94 y 60 son las habituales. Equivocarla desplaza toda la línea de tiempo, y en las páginas de velocidad de fotogramas la desplaza por una proporción en lugar de por una cantidad fija.

Una marca de orden de bytes es un carácter —U+FEFF— situado delante de todo lo demás en el archivo. En UTF-8 son tres bytes, EF BB BF, y es lo primero que ve un lector. Nada en la salida de esta página se ve distinto: los mismos bloques, los mismos códigos de tiempo, los mismos finales de línea, y una marca delante del primero.

La razón de quererla ahí es que la marca es la forma que tiene un archivo de decir «soy UTF-8» sin decirlo. Un programa que abre un archivo de subtítulos tiene que adivinar en qué codificación está, y muchísimos —reproductores antiguos de Windows, herramientas de autoría de discos, guiones que leen la primera línea— lo deciden mirando los primeros bytes en lugar de intentar analizar el archivo entero. Dales la marca y un nombre acentuado, una comilla tipográfica o una letra griega salen como tales. Quítala y el mismo archivo puede leerse con la página de códigos local del sistema, donde esos caracteres se convierten en otra cosa.

La otra dirección es la que la gente suele encontrar primero: un archivo que tiene marca, abierto por una herramienta que no la espera. Esa herramienta lee los tres bytes como tres caracteres y los muestra al principio de la primera línea, y de ahí viene el pequeño bloque de símbolos en la parte superior del archivo de subtítulos de alguien. Si es eso lo que estás viendo, esta es la página equivocada: hay que quitar la marca y no añadirla, y la página que hace eso está enlazada más abajo.

Lo que la página no hará es reformatear tu archivo de paso. No toca los finales de línea CRLF, los números de bloque, los tiempos ni el texto de ningún bloque, y no decide la codificación de tu archivo por ti: un archivo que no es UTF-8 es otro problema, y también hay una página para eso. Lo que hace es añadir un carácter al principio, y si el carácter ya está deja el archivo en paz en lugar de añadir un segundo, así que ejecutar la página dos veces da el mismo archivo que ejecutarla una.

La marca se añade al archivo que descargas. Los dos paneles de esta página pueden por tanto ser idénticos a la vista —un carácter invisible tiene exactamente el aspecto de un carácter invisible— y la forma honesta de comprobar el resultado es mirar los tres primeros bytes en un visor hexadecimal o la codificación del archivo en la barra de estado de tu editor. Los doce formatos de subtítulos que maneja este sitio pueden llevar marca, porque una marca es una propiedad de los bytes iniciales del archivo y no sabe nada de bloques. No se sube nada en ningún momento: el archivo se lee, se cambia y se escribe dentro de tu navegador.

Ejemplos

Un archivo de subtítulos ASCII, con una marca delante

Entrada

1
00:00:01,000 --> 00:00:02,000
The room is dark.

2
00:00:03,000 --> 00:00:04,000
A cold night.

Resultado

1
00:00:01,000 --> 00:00:02,000
The room is dark.

2
00:00:03,000 --> 00:00:04,000
A cold night.

El texto esperado empieza con un carácter invisible: U+FEFF, los tres bytes EF BB BF, antes del 1 del primer número de bloque. Los dos paneles te parecerán iguales y eso no es un fallo de representación: la diferencia entre estos archivos mide tres bytes y ninguno tiene forma. Descarga el resultado y ábrelo en un editor que muestre la codificación, o mira los primeros bytes en un visor hexadecimal, y es lo primero que ves.

Un archivo de Windows, con la marca añadida y los retornos conservados

Entrada

1
00:00:01,000 --> 00:00:02,000
The room is dark.

Resultado

1
00:00:01,000 --> 00:00:02,000
The room is dark.

Las dos cosas que escribe una herramienta de subtítulos de Windows son una marca y finales de línea CRLF, y por eso se confunden, pero son separadas, y esta página escribe solo la primera. Cada retorno de carro del archivo esperado es del propio archivo de entrada, y la marca se añade delante. Una página que reescribiera también los finales de línea reformatearía en silencio todos los archivos que se le dieran, que es justo el tipo de cambio que nadie nota hasta que a una herramienta de más abajo le importa.

Un archivo que ya lleva marca

Entrada

1
00:00:01,000 --> 00:00:02,000
Already marked.

Resultado

1
00:00:01,000 --> 00:00:02,000
Already marked.

La entrada ya tiene marca, así que la salida es la entrada byte por byte: el archivo conserva exactamente una. La versión ingenua de esta página, que pega una marca sin quitar antes lo que hay, produce un archivo con dos, y una marca duplicada es invisible en todos los editores a la vez que es un archivo distinto para todo lo que lea los bytes iniciales. Ejecutar la página sobre un archivo que ya está marcado debería ser algo que puedas hacer sin pensarlo.

Preguntas frecuentes

¿Qué cambia exactamente añadir una marca de orden de bytes a un archivo de subtítulos?

Un carácter al principio del archivo: U+FEFF, escrito como los tres bytes EF BB BF en UTF-8. No se añade, se quita ni se edita ningún bloque, no se mueve ningún código de tiempo, los números de bloque y los finales de línea salen como entraron, y el texto de cada línea queda intacto. Si comparas los dos archivos, la única línea que difiere es la primera, y difiere en tres bytes al inicio.

¿Por qué los dos paneles de esta página de BOM se ven idénticos?

Porque el carácter que se añade no tiene forma. U+FEFF es un espacio de ancho cero sin separación, así que un panel que represente el texto como lo haría tu reproductor muestra lo mismo antes y después. El cambio es real y está en el archivo que descargas: la diferencia son los tres primeros bytes. El indicador de codificación de tu editor, o un visor hexadecimal que muestre EF BB BF al principio, es donde hay que buscarlo y no en el texto.

¿Es seguro ejecutar dos veces la herramienta de añadir BOM al mismo archivo?

Sí. La página quita cualquier marca presente antes de escribir la suya, así que un archivo que ya lleva una vuelve sin cambios y uno que no la lleva recibe exactamente una. Dos pasadas dan el mismo archivo que una. Eso significa también que un archivo que ha pasado por esta página y luego por una herramienta que añadió una segunda marca se puede limpiar enviándolo una vez, porque solo sobrevive una.

¿Se conserva la marca si después convierto el archivo de subtítulos a otro formato?

No con las páginas de conversión de este sitio, que escriben UTF-8 limpio sin marca, así que una marca añadida aquí no pasa a través de un cambio de formato. Ordena el trabajo en consecuencia: convierte primero y añade la marca como último paso antes de la entrega. Es además el orden más sensato en general, ya que la marca es una propiedad del archivo terminado y no del contenido de los subtítulos.

¿Añadir una marca a un archivo de subtítulos cambia sus finales de línea?

No. Una marca UTF-8 es un carácter colocado antes del primer byte del archivo y no tiene efecto sobre lo que viene después. Un archivo de Windows lleno de CRLF sigue lleno de CRLF, un archivo de Unix sigue en LF, y un archivo con finales mezclados sale con la misma mezcla con la que llegó. Cambiar los finales de línea es otra página, y es mala idea que una sola página haga las dos cosas en silencio.

¿A qué formatos de subtítulos se les puede poner una marca de orden de bytes?

A los doce que maneja este sitio: SRT, WebVTT, ASS, SSA, SBV, SAMI, LRC, MicroDVD, TTML, JSON y CSV. La marca tiene que ver con los bytes iniciales del archivo y no con el formato de subtítulos, así que no hay nada específico del formato que acertar: incluso una transcripción en texto plano, que no tiene ninguna línea temporal, puede llevarla.

Herramientas relacionadas