Convertir subtítulos json3 a formato srt

Introducción

A parte de mi pasión por la informática también soy un gran aficionado al cine, y siempre veo las películas en su idioma original. Generalmente no he tenido problemas para obtener los subtítulos en formato srt, no obstante, en algunas ocasiones me he encontrado con subtítulos en formato json3.

Probablemente haya herramientas libres que conviertan json3 a srt de forma simple y llana. En mi caso particular tengo instalado un editor avanzado de subtítulos: Aegisub, un excelente software que cumple muy bien su propósito, sin embargo, no tiene una herramienta que exporte o convierta un archivo de subtítulo en formato json3 a srt, —al menos la versión que utilicé en su momento (Debian 10)—.

Dicho lo anterior, cuando me topé con un subtítulo json3, para salir del percance, instalé el software SubtitleEdit. Es un programa para windows (.exe) cuya licencia es GPL y se puede ejecutar en GNU/Linux gracias a la compatibilidad con Mono.

A pesar de ser una excelente herramienta —muy completa—, era un hecho de que no iba a perdurar en mi sistema mucho tiempo, esencialmente por tres motivos:

  • Instalación de la librería Mono.
  • La gran mayoría de los subtítulos están en formato .srt, no se justifica lo anterior.
  • Aegisub es suficiente para todo lo demás.

Esto me llevó a crear un pequeño programa en python3 para solucionar, al menos de forma provisoria, el pequeño hueco que deja Aegisub. El programa en cuestión lo denominé json_to_srt, cuenta con tres versiones diferentes y una misma finalidad:

  1. json_to_srt-nox.py (no X, consola)
  2. json_to_srt-gui.py (interfaz gráfica con TKinter)
  3. json_to_srt-clipboard.py (copy/paste con TKinter)

Cualquiera de las tres versiones pretenden ser fáciles de utilizar, no requiere de paquetes extras, más allá de python3-tk para la utilización de las versiones con interfaz gráfica.

Instalación de dependencias para interfaz gráfica

Python3 generalmente viene instalado de forma predeterminada en la mayoría de los sistemas GNU/Linux, no obstante lo incluiremos en la linea de comandos:

sudo apt install python3 python3-tk

json_to_srt-nox

json_to_srt-nox.py, a nivel de código, es el más simple de los tres. Cualquier usuario no debería tener inconvenientes a la hora de convertir un subtítulo utilizando este método.

En un terminal ejecutamos:

python3 json_to_srt-nox.py

si por el contrario, se desea utilizar el clásico comando: ./json_to_srt-nox.py, será necesario darle permisos de ejecución:

sudo chmod +x json_to_srt-nox.py

Lo mismo aplica para el resto de las versiones. De esta forma, el programa también se podrá ejecutar con un simple click del ratón en el navegador de archivos.

Su utilización es relativamente simple. Una vez que hayamos descargado el correspondiente subtítulo, cuyo formato está en json3, solo resta llenar un par de campos.

El subtítulo que usé para ejemplificar pertenece a una película que escogí al azar: Love jacked. Su estructura en json3 es la siguiente:

{
  "wireMagic": "pb3",
  "pens": [ {

  } ],
  "wsWinStyles": [ {

  } ],
  "wpWinPositions": [ {

  } ],
  "events": [ {
    "tStartMs": 25417,
    "dDurationMs": 1916,
    "segs": [ {
      "utf8": "\u003ci\u003e¡Oye! ¿Adónde crees que vas?\u003c/i\u003e"
    } ]
  }, {
    "tStartMs": 27500,
    "dDurationMs": 917,
    "segs": [ {
      "utf8": "\u003ci\u003e¡Vuelve aquí!\u003c/i\u003e"
    } ]
  }, {
    "tStartMs": 29125,
    "dDurationMs": 1417,
    "segs": [ {
      "utf8": "\u003ci\u003e¡Te llevaste mi dinero!\u003c/i\u003e"
    } ]
...

La ejecución de json_to_srt-nox.py pedirá:

  • El nombre del archivo .json (si este se encuentra en la misma ubicación que nuestro programa json_to_srt-nox, no será necesario introducir la ruta)
  • El nombre del archivo srt. Usualmente, nombre de la película
  • Opción de continuar con otra conversión

Tanto en la opción de consola como las gráficas, si no se especifica un nombre de archivo para el formato srt (se deja el campo vacío), este se denominará «subtitle».

json_to_srt-gui

json_to_srt-gui.py pretende ser más amigable para aquellos usuarios que no utilizan el terminal. El programa cuenta con la funcionalidad de buscar el archivo .json a través de la ventana de diálogo.

De la interfaz gráfica se desprende:

  • Campo para el nombre del archivo .srt
  • Botón de Selección del archivo .json. Al Seleccionar/Abrir archivo se inicia la conversión, —dos acciones en un solo paso—
  • Consola en la parte inferior, donde se detalla el resultado de la conversión


json_to_srt-clipboard

Finalmente, json_to_srt-clipboard.py. Este no difiere mucho del anterior, con la salvedad de que se copia el contenido en lugar de seleccionar un archivo .json. En ocasiones podemos encontrar el subtítulo en una determinada página web en crudo (raw), por lo tanto, contemplé la idea de copiar/pegar texto.

En dicha operatoria, se crearán los respectivos archivos: .json y .srt. Muy simple, cuenta con dos campos (nombre y contenido .json). Es particularmente útil este método ya que nos permite editar el subtítulo «in situ», antes de convertirlo a srt.

A modo de ejemplo, se realizaron dos conversiones del mismo subtítulo, una de las cuales se dejó el campo vacío. Como mencioné anteriormente, se renombra a «subtitle» en caso de no recibir un nombre por parte del usuario.

Resultado final

Consideraciones finales

Si bien los tres métodos funcionan bien, es decir, cumplen con lo que prometen, a nivel de código no es precisamente un ejemplo de como se debe escribir.

Hay que considerar que no soy un programador, y como tal, seguramente he incurrido en errores que fácilmente pueden ser reconocidas por cualquier persona que domine python u otro lenguaje. Los fundamentos de la programación son para todos los lenguajes.

Algunos extractos de código en imágenes:

Al menos me hubiera gustado resolver los siguientes puntos:

  • Utilizar parámetros en las funciones para hacer el código más compacto y simple.
  • En lugar de renombrar a «subtitle» cuando se deja el campo vacío, mi intención era que tomara el nombre del archivo json. Sin embargo, no supe como obtener dicho nombre. Lo que obtenía era toda la cadena: <_io.TextIOWrapper name='love jacked.srt' mode='w' encoding='UTF-8'>, en lugar de love jacked.srt unicamente.
  • Utilizar una Clase general.

Para poder hacer pequeños programas consistentes y escalables que se acerquen más a un verdadero programa, y no ha conformarme a nivel personal con el: «simplemente funciona», es necesario aprender los fundamentos de la programación y python desde cero, algo que que relegado por diferentes motivos y siempre estoy en deuda con este maravilloso lenguaje.

Si bien, el tema de los subtítulos no es un apartado muy popular, en lo personal me ha ayudado en algunas ocasiones. He decidido compartirlo en GUTL para aquellos que pudieran tener el mismo percance y no deseen utilizar un software más complejo para realizar una simple conversión json3 a srt.

Descargas

Contenido:

json_to_srt
├── json_to_srt-clipboard.py
├── json_to_srt-clipboard.pyw
├── json_to_srt-gui.py
├── json_to_srt-gui.pyw
├── json_to_srt-nox.py
├── json_to_srt-nox.pyw
└── love jacked.json

0 directories, 7 files

Nota: Los archivos con extensión .pyw son para ser ejecutados mediante un click del ratón. Es necesario que tengan permisos de ejecución.

 

json_to_srt.zip

json_to_srt.zip English version

 


 

¿Te resultó interesante? Compártelo ...



Percaff_TI99

Publicado por Percaff_TI99

http://gutl.jovenclub.cu/ » Forma parte de GUTL desde el 10 agosto, 2013. Amante de la ciencia y tecnología en general. Usuario de GNU/Linux desde hace varios años.

Este artículo tiene un comentario

  1. El sitio tarda bastante en cargar, si algún administrador por favor lo revisa. Anteriormente se había solucionado, pero al parecer algún plugin referente al sidebar puede estar causando el problema nuevamente.

    Saludos.

    Responder

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

20 − 14 =