
Índice
Nuevo proyecto, nuevo flujo de trabajo
Para el arranque de un nuevo proyecto de subtitulado, tuvimos que establecer un nuevo flujo de trabajo para:
- recibir vídeos para subtitular
- procesar esos vídeos en un sistema de transcripción automática
- crear los subtítulos
- sincronizar los subtítulos según las especificaciones del cliente
- y finalmente devolver el archivo SRT resultante a la persona que había enviado el vídeo.
Todo ello en un plazo máximo de 48 horas.
Para llevar el control de los distintos encargos a medida que iban llegando, además de introducir los datos en nuestro sistema de gestión, también creamos una hoja de cálculo en Google Sheets, para compartir con nuestros colaboradores, en la que apuntábamos:
- la duración del vídeo
- la fecha de entrega
- la persona encargada del subtitulado
Para toda comunicación interna al equipo utilizamos, como siempre, nuestro chat interno basado en Mattermost, una alternativa a Slack de código abierto.
La principal limitación impuesta por el cliente era que cualquier persona de su plantilla (formada por decenas de editores de vídeo) pudiera subir los vídeos a transcribir a un servidor, sin necesidad de registrarse ni tener una cuenta en una app concreta.
De no haber sido por este requisito, la solución más inmediata para nosotros hubiera sido Google Drive. Sin embargo, un formulario de Google solo permite subir archivos a los que tienen una cuenta de Google.
Nuestra solución fue aprovechar una de las funciones de nuestro servidor de archivos Synology para crear una «File request». El editor de vídeo visita una página dedicada con un formulario, que le permite subir el vídeo, que se guarda en nuestro servidor.
A partir de ahí, mediante otra herramienta del sistema operativo DSM de Synology, llamada CloudStation, las carpetas que contienen los vídeos se sincronizan con Google Drive.
Para notificar al gestor del proyecto, le pedimos a nuestro informático que creara un script que, tras revisar el contenido de las carpetas cada 15 minutos, enviara un correo electrónico con la ruta y el nombre del archivo que se acababa de subir.
A continuación, el gestor del proyecto tenía que importar el vídeo a nuestro sistema de transcripción automática, Sonix.ai, para que uno de nuestros colaboradores pudiera revisarlo.
Sonix permite agrupar los vídeos de manera jerárquica, por lo que hemos replicado la estructura de carpetas ya presente en Google Drive: básicamente, una carpeta para cada idioma y unas subcarpetas, una para cada editor de vídeo, que a su vez contienen los vídeos.
¿Qué herramienta de automatización usar?
Desde el primer momento tuve claro que el flujo de trabajo se prestaba a la automatización, tanto para ahorrar tiempo como para evitar errores en la gestión del proyecto, puesto que este último implicaba la repetición de acciones mecánicas como copiar y pegar, en las que el riesgo de error humano siempre es alto.
De hecho, el flujo de trabajo que debía automatizarse a la llegada de cada vídeo nuevo era el siguiente:
- importar el vídeo de Google Drive a Sonix
- anotar los datos del vídeo (fecha, remitente, nombre del archivo, enlace en Google Drive y duración) en la Google Sheet del idioma correspondiente
- notificar a los miembros del proyecto en el canal Mattermost dedicado (un canal por idioma).
Parecía ser el proyecto perfecto para probar algunas plataformas no-code.
Nota: las plataformas de desarrollo no-code permiten a cualquiera crear aplicaciones e integraciones entre sistemas a través de una interfaz gráfica y la configuración de unos pocos parámetros, para evitar la programación propiamente dicha, es decir, la escritura de código.
He hecho las primeras pruebas de automatización con Zapier, que permite conectar Sonix directamente a Google Drive gracias a una «recipe» predeterminada: para cada nuevo archivo subido a Drive, Zapier transmite la información a Sonix, que recupera el archivo y realiza la transcripción automática.
Esta integración es muy conveniente y funciona a la perfección, pero tiene una limitación importante: la API de Google Drive no permite monitorizar una carpeta junto con todas sus subcarpetas. Por tanto, la monitorización no es recursiva. Esto significa que hay que crear un «zap» para cada subcarpeta, ya que el zap creado para la carpeta principal no puede controlar todas las subcarpetas.
Nota: Zapier llama “zap” a una secuencia de integraciones. Como se especifica en su página web, «un zap es un flujo de trabajo automatizado que enlaza aplicaciones y servicios entre sí. Cada zap consta de un evento desencadenante (trigger) y una o varias acciones. Cuando se activa un zap, este ejecutará las distintas acciones programadas cada vez que se produzca el evento desencadenante».
Esta limitación tiene tres inconvenientes:
- El proyecto involucra a decenas de editores de vídeo, por lo que hay decenas de subcarpetas: crear un zap para cada carpeta implica un trabajo manual, lo que anula nuestro esfuerzo de automatización.
- El coste de la suscripción a Zapier varía en función del número de zaps. Debido al aumento de carpetas, pronto superaríamos los límites de los planes más baratos.
- Tampoco estaba claro si sería posible integrar fácilmente con Zapier los otros dos sistemas implicados en la gestión, Google Sheets y Mattermost, otros ingredientes indispensables para nuestra gestión.
Una vez descartado Zapier, evaluamos algunas alternativas:
- n8n
- Integromat (que desde entonces ha cambiado su nombre a Make y
- Pabbly Connect.
n8n es muy potente, pero también es el más complicado de los tres. Tras instalarlo en nuestro servidor, empezamos a estudiarlo y pronto nos dimos cuenta de que era demasiado engorroso para nuestros fines.
Integromat parecía ser un buen candidato, pero lo descartamos porque recibimos una respuesta bastante fría (y tardía) por parte del servicio de asistencia cuando expusimos nuestras necesidades.
En cambio, el soporte de Pabbly me respondió detalladamente, así que me dí de alta y comencé mis experimentos, siguiendo las instrucciones recibidas.
Nota: el primer paso de todas las automatizaciones es establecer un punto de partida, el evento desencadenante o trigger. Es decir, hay que responder a la pregunta: «¿Qué evento debe iniciar el flujo de trabajo?»
Esta pregunta resultó ser una de las más difíciles de responder, porque los datos iniciales que se pueden obtener y utilizar para los pasos posteriores dependen del desencadenante.
Desarrollo de la integración en Pabbly Connect
En Pabbly Connect, los triggers disponibles con Google Drive se reducían a dos posibilidades: al subir un nuevo archivo (a cualquier carpeta), o encontrar los últimos archivos añadidos con una búsqueda recursiva a intervalos establecidos, pero solo en carpetas que contienen vídeos.
Tuve que descartar inmediatamente la opción de monitorizar los nuevos archivos subidos desde todas las carpetas de Drive, es decir, el primer elemento que aparece en la lista “Recientes”, porque Pabbly Connect comprueba los nuevos archivos cada 5 minutos (la configuración no se puede cambiar). Si hubiera llegado más de un archivo en esos cinco minutos, habría detectado solo el más reciente, ignorando el siguiente.
La búsqueda recursiva, en cambio, presuponía pedir a Drive que liste las subcarpetas y el contenido de cada una. Entonces Pabbly tenía que comparar la hora de subida con la hora actual y continuar solo si encontraba un archivo subido en los últimos 15 minutos.
Repitiendo el flujo de trabajo cada 15 minutos, el sistema sería capaz de detectar los archivos subidos precisamente en ese intervalo de tiempo.
De este modo, tenía la certeza de que no perdería ningún archivo, aunque llegaran varios en 15 minutos. Sin embargo, también tuve que descartar esta opción porque tenía un impacto demasiado grande en el número de tareas consumidas, que en Pabbly no son ilimitadas. Aunque redujéramos la frecuencia a cada 30 minutos, seguiríamos corriendo el riesgo de superar el numero máximo de tareas incluidas en nuestra suscripción mensual.
A estas alturas, tuve que considerar otras soluciones, ya que la búsqueda recursiva consumía demasiados recursos.
Nuestro flujo de trabajo solo tenía que empezar con la llegada de un archivo, y no tenía sentido supervisar las carpetas de Drive las 24 horas si solo íbamos a recibir una docena de archivos al día.
Si quería prescindir de Google Drive, tenía que utilizar la llegada del correo electrónico de notificación dirigido al gestor de proyecto como evento desencadenante.
En este caso, sin embargo, el problema era la necesidad de separar las distintas líneas de texto del correo electrónico y extraer de cada una los datos que necesitábamos:
- el nombre del archivo
- el nombre de la carpeta donde se alojaba, que era a su vez la dirección de correo electrónico del destinatario de los subtítulos
- y, por último, el idioma del vídeo, ya que recibimos vídeos en italiano, español y portugués
Todos estos datos se pueden obtener mediante la función de Pabbly Connect que extrae el texto mediante una expresión regular. De hecho, tenía que pasar de esto:
< /volume1/video/Company_ES/enrique.blanco@company.com/@eaDir/video1.mp4/SYNOVIDEO_VIDEO_SCREENSHOT.jpg
< /volume1/video/Company_ES/enrique.blanco@company.com/video1.mp4
< /volume1/video/Company_IT/mario.rossi@company.com/@eaDir/video2.mp4/SYNOVIDEO_VIDEO_SCREENSHOT.jpg
< /volume1/video/Company_IT/mario.rossi@company.com/video2.mp4
< /volume1/video/Company_PT/joao.verdes@company.com/@eaDir/video3.mp4/SYNOVIDEO_VIDEO_SCREENSHOT.jpg
< /volume1/video/Company_PT/joao.verdes@company.com/video3.mp4
a esto:
ES
enrique.blanco@company.com
video1.mp4
IT
mario.rossi@company.com
video2.mp4
PT
joao.verdes@company.com
video3.mp4
Al principio, la complejidad de la regex incluso me había hecho desistir de utilizar el correo electrónico de trigger. Sin embargo, cuando el método con Google Drive resultó ser un callejón sin salida, me arremangué y con algo de paciencia y tenacidad conseguí crear una expresión regular que funcionara en todos los casos.
El resto del flujo de trabajo ya estaba bastante bien establecido y gracias a la opción de reiteración de Pabbly Connect (Iterator), los pasos se repetían para cada entrada.
En resumen, este es el flujo de trabajo resultante:
- El sistema recibe el correo electrónico a una dirección dedicada creada por Pabbly Connect y se inicia el flujo de trabajo.
- Una regex separa el cuerpo del correo electrónico en tantas líneas como vídeos se hayan cargado y el sistema repite los siguientes pasos (de 3 a 10) para cada vídeo.
- Mediante otra regex extrae los datos que me interesan: idioma del vídeo, dirección de correo electrónico del remitente y nombre del archivo.
- Envía un correo electrónico de confirmación automático a la persona que sube el vídeo.
- Busca el archivo en Google Drive utilizando el nombre del archivo como clave de búsqueda.
- Drive responde con los demás datos útiles del vídeo, en particular la fecha de subida.
- Pide a Sonix, a través de su API, la lista de carpetas existentes:
- si la carpeta del remitente aún no existe, la crea y le asigna el mismo nombre que la carpeta del vídeo y procede al paso siguiente.
- si la carpeta del remitente ya existe, procede al paso siguiente.
- Sube el vídeo a la carpeta correspondiente en Sonix.
- Añade una linea con los datos del vídeo a la hoja compartida de Google del idioma del vídeo.
- Envía un mensaje en Mattermost a través de un bot, para avisar a los colaboradores de que un nuevo vídeo ya está disponible.
Conclusiones
Durante un tiempo tuve que afinar más el flujo de trabajo para dar cabida a algunas excepciones, que no voy a mencionar aquí. De principio a fin, esta automatización no-code me llevó un total de dos semanas de trabajo, lo que no es poca cosa. Sin embargo, en perspectiva, si el proyecto de transcripción dura al menos unos meses, estoy seguro de que nos ahorrará mucho tiempo y muchos errores potenciales.
El error humano es, de hecho, un problema que no debe subestimarse, ya que un error al teclear los datos o un copiado y pegado torpe pueden suponer grandes problemas.
Después de estos primeros experimentos no-code, la conclusión es que estas herramientas son muy potentes y flexibles, pero todavía no son la solución «configúralo y olvídate» que prometen.
Los dos obstáculos que encontré fueron la identificación del trigger y la creación de la regex, que en general no es en absoluto sencilla y en nuestro caso era aún más compleja, porque debía tener en cuenta varias combinaciones de caracteres en la dirección de correo electrónico, el nombre y la ruta del archivo.
A esto se suma el hecho de que cada sistema tiene sus limitaciones de diseño y tampoco está libre de errores internos, que en el caso de Pabbly Connect fueron varios. Sin embargo, el soporte técnico siempre estuvo presente y nos ayudó con la resolución de muchos de los problemas reportados a través del foro oficial con bastante rapidez.
El problema fundamental es que los distintos enlaces en principio deberían funcionar, pero en la práctica es muy probable que tu caso de uso específico nunca haya sido probado porque es totalmente nuevo. Esto significa que los desarrolladores nunca se han enfrentado a un determinado fallo, porque nadie ha utilizado el sistema de esa manera antes.
Por ejemplo, en el experimento con la búsqueda recursiva en Google Drive, noté e informé al soporte que al listar el contenido de las carpetas, Drive detectaba también a los archivos en la papelera, como si aún estuvieran en la carpeta.
Sin embargo, el potencial está ahí, porque es obviamente una forma de acercar al usuario común al desarrollo de aplicaciones, pero el resultado de mi experiencia es que el no-code todavía no es una solución al alcance de cualquiera.
Si quiere explorar las posibilidades de la automatización en tu trabajo diario, podemos ayudarte. Contacta con nosotros sin compromiso.