Imagen subtítulos
|

Cómo sincronizar subtítulos desplazados

¿No os ha pasado que, después de encontrar los subtítulos de una película, resulta que están desincronizados? Pues a mí más de una vez. Por lo general sigo buscando y probando hasta que doy con los que se ajustan al vídeo en cuestión. Esta vez no ha sido así. Seguramente debido a que El Principito de 1974 ya tiene sus años y no abunda la oferta de transcripciones.

Los subtítulos que descargué parecían encajar con los diálogos de la película, solo que empezaban con 7 segundos de antelación. Para quien no lo sepa los ficheros de subtítulos de tipo SRT, son ficheros de texto plano que cuentan con una lista de entradas numeradas, con su estampillas de tiempo y el texto del audio, a veces entre marcado HTML con el fin de enfatizarlo. Éstas son los subtítulos de las primeras escenas de El Principito.

1
00:00:32,159 --> 00:00:34,992
EL PEQUEÑO PRÍNCIPE

2
00:03:01,800 --> 00:03:05,395
Un día, cuando tenía seis años,
vi un dibujo magnífico

3
00:03:05,600 --> 00:03:08,319
en un libro sobre el bosque primitivo.

4
00:03:08,520 --> 00:03:12,308
Era de una boa constrictor
tragándose un animal.

5
00:03:12,520 --> 00:03:15,830
Intento esbozarlo para que lo vean.

6
00:03:16,040 --> 00:03:17,917
Debajo decía:

7
00:03:18,120 --> 00:03:23,240
«Las boas se tragan
su presa sin masticarla».

En teoría el problema se solucionaría añadiendo 7 segundos a cada estampilla de tiempo. Pregunté a ChatGPT si no le importaría hacerlo por mí. Primero hice una prueba con una decena de items

I’ll paste you the content of an srt file. I want you to add 7 seconds to every timestamp of the following block of subtitles:

Para mi sorpresa, comprendió bien la tarea: ahora los subtítulos se mostraban en el momento adecuado.

El fichero srt entero cuenta con más de 900 entradas, demasiado texto para pegar en una sola pregunta al chat de GPT. Probé primero a trocearlo en bloques de 300. Seguía siendo demasiado, 200 también. Con 100 empezó a procesar, pero cuando llevaba unos diez corregidos, añadió un «y así para el resto…». Esta vez le pido de manera explícita que corrija cada una de las estampillas de tiempo. ¡Sin problema! responde entusiasmado. Pero se detiene al cabo de una treintena de entradas, tras lo cual se activa el botón «continue generating…». Sobre el que tendré que hacer click dos veces más. En total le ha llevado unos cinco minutos finalizar la tarea, mucho más que cuando le pido que genere código o complete una historia. Es curioso, da la sensación de que este tipo de tarea más rutinaria y precisa le demanda más recursos.

Vuelvo a probar el fichero generado. Los subtítulos aparecen sincronizados con las voces de los actores, sin embargo hay algo que no me cuadra. No coincide el contenido del audio con el escrito por GPT. En general los subtítulos no tienen porque ser una mera transcripción del audio, pero en este caso claramente los subtítulos estaban contando otra historia. Los comparo con los originales y, en efecto, ChatGPT se ha tomado la licencia de rescribir el clásico del cine.

Esta solución no vale. No solo tarda mucho en ajustar las estampillas, además modifica el texto a su antojo. Probé a corregirlos con una aplicación de escritorio para Linux, Subtitle Editor. La instalación no puede ser más sencilla sudo apt-get install subtitleeditor y la interfaz gráfica resulta intuitiva. Basta abrir un fichero srt para que en la ventana superior se muestre la película y en la inferior los subtítulos. Permite adelantar las estampillas, pero por lo que vi solo de una en una. Es posible que pueda hacerlo en lote, pero no investigo más. Ya llevo demasiado tiempo invertido en esto.

¿Y si lo hago con un script? ¡Cómo no había caído antes! Es lo que tendría que haberle preguntado desde un principio a ChatGPT:

I need you create a bash script that accepts as an input an srt file and adds a number of seconds to each timestamp, then creates a new fixed file.
Dos segundos después tenía mi script funcional: Y así de fácil de ejecutar: ./fix_timestamps.sh input.srt 7 (tras hacer un chmod +x al fichero sh).

Publicaciones Similares

  • |

    Las chispas de GPT-4

    La semana pasada investigadores de Microsoft publicaron un artículo en arXiv titulado «Chispas de inteligencia artificial general: primeros experimentos con GPT-4». En él sostenían que GPT-4 mostró signos tempranos de AGI, lo que significa que posee capacidades iguales o superiores al nivel humano. Luego, si lees el artículo científico, resulta que el título es un…

  • CPU vs. GPU

    Esta mañana me ha venido a la cabeza el siguiente par de binomios: GPU/emoción, CPU/razón, así, sin venir a cuento. No recuerdo haberme planteado nunca semejante emparejamiento o leído nada relacionado. Acababa de salir de la cama, solo se me ocurre que la idea pudiera haber originado en algún sueño olvidado. De lo que estoy…

  • |

    Cómo ampliar el espacio en disco en 1and1

    Escenario Hemos contratado un servidor dedicado en 1and1 (ubuntu 14.04) y al acceder por ssh constatamos que no disponemos de todo el espacio en disco disponible: $ df -hFilesystem Size Used Avail Use% Mounted onudev 3.9G 4.0K 3.9G 1% /devtmpfs 798M 592K 797M 1% /run/dev/md1 4.0G 990M 3.0G 25% /none 4.0K 0 4.0K 0% /sys/fs/cgroupnone 5.0M 0 5.0M 0% /run/locknone 3.9G 0 3.9G 0% /run/shmnone 100M 0 100M 0% /run/user/dev/mapper/vg00-usr 4.8G 1.3G 3.3G 28% /usr/dev/mapper/vg00-var 4.8G 812M 3.8G 18% /var/dev/mapper/vg00-home 4.8G 10M 4.6G 1% /home Objetivo Aumentar el espacio disponible para dar cabida a nuestros recursos. Solución Nota: sólo aplicable a sistemas linux Primer paso Comprobamos el espacio en disco real: ~$ sudo fdisk -lDisk /dev/sda: 240.1 GB, 240057409536 bytes255 heads, 63 sectors/track, 29185 cylinders, total 468862128 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 4096 bytesI/O size (minimum/optimal): 4096 bytes / 4096 bytesDisk identifier: 0x24e3fc12   Device Boot      Start         End      Blocks   Id  System/dev/sda1            2048     8390655     4194304   fd  Linux raid autodetect/dev/sda2         8390656    12584959     2097152   82  Linux swap / Solaris/dev/sda3        12584960   468862127   228138584   fd  Linux raid autodetect Segundo…

  • Configuración Jackrabbit + tomcat + aws s3

    El fin de este tutorial es configurar un servidor jackrabbit que utilice como almacenamiento el servicio S3 de Amazon AWS. Esta fuera del alcance del mismo la configuración del servicio S3 o como emplear el servidor jackrabbit en una aplicación. Apache Jackrabbit es un repositorio de contenido conforme con las especificaciones del API JCR. Ofrece…

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *