Así que tomé un enfoque diferente y traté de escribir un programa para ello. Utilicé Google Cloud Functions para ello y creé dos funciones. Ambas funciones miran diferentes Google Cloud Storage Buckets. Así que el flujo es como el siguiente
El usuario sube un vídeo al cubo GCS (vamos a llamarlo cubo de vídeo).
La primera función de la nube llamada extractAudio se activará y utilizará la biblioteca ffmpeg para extraer el audio del vídeo.
A continuación, convertirá el audio en un archivo flac y lo subirá a la segunda cubeta (llamémosla cubeta de audio)
Tan pronto como el audio se suba a la cubeta de audio, se activará la segunda función de la nube llamada transcribeAudio.
Entonces enviará el audio a la API de Google Cloud Speech-To-Text y esperará la respuesta.
La respuesta estará en un archivo JSON y luego se subirá a un tercer bucket de GCS (llamémoslo bucket de resultados).
Así que tienes la transcripción del vídeo en el tercer bucket de resultados, aunque en formato JSON. Definitivamente puedes escribir tu propio código para convertirlo en un formato de archivo SRT. El JSON contiene la marca de tiempo de todas las palabras habladas en el vídeo, así que puedes usarlas para marcar el tiempo de los diálogos.
El proyecto está alojado en Github y puede que quieras echarle un vistazo. Aunque estoy bastante seguro de que no lo probarás para conseguir subtítulos para una película, ya que te costará mucho usar Cloud Functions y Speech API, por no hablar del proceso de subir el vídeo.
Puedes probar a convertir el proyecto para ejecutarlo en tu máquina local, aunque el coste de Speech API seguirá vigente. Sin embargo, tienen un límite gratuito que puedes utilizar.
Tengo planes para utilizar el mismo código para que se ejecute realmente en la máquina local y obtener un archivo SRT en lugar de JSON de eso. Sólo esperando a tener algo de tiempo libre. Por si te interesa, he escrito un blog[1] sobre ello. Si quieres, puedes seguirlo para ver las actualizaciones.
Notas al pie
[1] El largo viaje de un desarrollador - Abhishek Jain - Medium