Quitar el BOM de subtítulos
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.
La marca de orden de bytes es un carácter, U+FEFF, situado delante de todo lo demás en un archivo. Muchas herramientas la escriben y muchas no la esperan, y las que no la esperan la muestran como un bloque corto de símbolos pegado al inicio del primer bloque. Esta página la quita y deja todo lo demás exactamente como lo encontró.
Quitarla importa sobre todo donde el archivo deja de ser algo que una persona lee y pasa a ser algo que un programa analiza: cadenas de compilación de subtítulos, guiones que leen la primera línea de un archivo y formatos cuya especificación dice que los bytes iniciales son el primer carácter del primer bloque. Importa también cuando se concatenan archivos, porque una marca en medio de un archivo unido es un carácter en medio de un bloque. Y importa para la entrega: si la especificación a la que entregas dice UTF-8 sin marca, una marca es una diferencia que el comprobador encontrará.
Lo que la página no hará es decidir nada más por ti. Los números de bloque, los códigos de tiempo, el texto de los bloques y los finales de línea vuelven todos como entraron, incluido CRLF, y un archivo que no tenía marca vuelve byte por byte en lugar de reescribirse en algo equivalente. Quitar una marca no es lo mismo que cambiar la codificación de caracteres de un archivo, y las dos cosas se confunden a menudo: esta página cambia el primer carácter del archivo y nada de cómo se codifica el resto.
Hay un caso en el que el título de esta página y lo que ocurre de verdad se separan, y conviene saberlo antes de ejecutarla. Un archivo UTF-16 necesita su marca: sin ella no hay forma de distinguir los dos órdenes de bytes, así que un archivo UTF-16 escrito sin marca no se puede volver a leer. Pasa uno por esta página y el archivo descargado seguirá llevando marca, porque la alternativa sería un archivo que nadie puede abrir. Si tu archivo es UTF-16 y la marca tiene que desaparecer, lo que quieres es otra codificación y no la misma sin marca, y la página que convierte codificaciones está enlazada más abajo.
La marca se quita del archivo que descargas, así que los dos paneles pueden verse idénticos aquí: un carácter de ancho cero tiene exactamente el aspecto de un carácter invisible. Comprueba el resultado en el indicador de codificación de tu editor o en un visor hexadecimal: un archivo sin marca empieza por el primer byte de su primer bloque. Se aceptan los doce formatos que maneja este sitio, desde SRT hasta una transcripción en texto plano, y no se sube nada: el archivo se lee, se cambia y se escribe dentro de tu navegador.
Ejemplos
Un archivo con marca, con la marca quitada
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.
La entrada empieza por U+FEFF y la salida no: los dos archivos difieren exactamente en ese carácter, que es toda la operación. Los archivos en este estado suelen venir de un programa de subtítulos de Windows, y la razón de querer la marca fuera es un paso de compilación o un analizador estricto que mira los bytes iniciales en lugar de los bloques.
Un archivo de Windows, con la marca quitada y los retornos conservados
Entrada
1
00:00:01,000 --> 00:00:02,000
Marked and Windows.
Resultado
1
00:00:01,000 --> 00:00:02,000
Marked and Windows.
Solo se va la marca. Cada retorno de carro es del propio archivo y esta página no opina sobre ellos: quien quiera cambiar las dos cosas quiere la página de finales de línea, y mantenerlas separadas es lo que hace que cada una sea segura sobre un archivo que no has abierto. El texto esperado conserva sus CRLF exactamente como lo hacía la entrada.
Un archivo sin marca, devuelto byte por byte
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.
No había nada que quitar, así que el archivo vuelve sin cambios, incluida la ausencia de marca. Este es el caso que atrapa a una implementación que escribe una marca primero y la quita después, o que normaliza el archivo de paso: la lectura honesta de «no había nada que hacer» es la propia entrada, byte por byte, y no una versión ordenada de ella.
Preguntas frecuentes
¿Cómo sé si mi archivo de subtítulos tiene una marca de orden de bytes?
Ábrelo en un editor que muestre la codificación del archivo; un archivo UTF-8 con marca suele aparecer como UTF-8 con BOM o UTF-8 BOM en lugar de UTF-8 sin más. Si no, mira los primeros bytes en un visor hexadecimal: un archivo que empieza por EF BB BF lleva una, y uno que empieza por el primer carácter del bloque no. El bloque de símbolos al inicio de la primera línea es lo mismo visto por un programa que leyó la marca como tres caracteres normales.
¿Por qué la marca sigue en un archivo de subtítulos UTF-16 después de quitarla?
Porque un archivo UTF-16 necesita una. UTF-16 guarda cada carácter como dos bytes y los dos órdenes de bytes se parecen desde fuera, así que la marca es lo que dice a un lector en qué orden está: un archivo UTF-16 sin marca no se puede volver a leer, ni por este sitio ni por nada más. La página en la que estás la conserva por esa razón. Para obtener un archivo sin ninguna marca, cambia su codificación a UTF-8 o Windows-1252, donde la marca es opcional.
¿Esta página daña un archivo de subtítulos que nunca tuvo marca?
No. La salida de ese caso es la entrada, byte por byte, y no se informa de nada para él. Pasar la página por un archivo cuyo estado no conoces es seguro por construcción por la misma razón: sin marca que quitar no hay nada que escribir, y con una hay el menor cambio posible. Una pasada que no encontró nada que hacer no es una pasada que hizo algo.
¿Puede un archivo de subtítulos tener más de una marca de orden de bytes?
Sí, y ocurre siempre que una herramienta añade una marca sin comprobar antes si ya la hay: la segunda marca produce un archivo que se ve completamente normal en un editor a la vez que difiere de un archivo normal en sus bytes iniciales. Esta página las quita todas en lugar de una, así que un archivo con doble marca se limpia en una sola pasada y ejecutar la página otra vez no cambia nada más.
¿Quitar una marca cambia la codificación de mi archivo de subtítulos?
No en el sentido que la gente suele darle. El texto del archivo sigue siendo los mismos caracteres y el resto sigue codificado igual; lo que cambia es que un lector ya no tiene los bytes iniciales del archivo diciéndole la codificación. Un archivo UTF-8 sin marca es UTF-8 normal, que es lo que la mayoría de herramientas supone de todos modos. Cambiar la codificación en sí es otra página, enlazada desde aquí.
¿Volverá la marca cuando descargue el archivo de subtítulos?
No. La descarga es el momento en que se escribe el archivo, y una pasada de esta página lo escribe sin marca, así que lo que obtienes es lo que describen los dos paneles. La codificación con la que se escribe un archivo se conserva de cómo se leyó, con una excepción: un archivo que llega como UTF-16 se vuelve a escribir como UTF-16 y conserva su marca, porque esa marca es estructural y no decorativa.