Pero veamos primero el ejemplo. El fragmento de vídeo elegido no podía ser otra que la escena cumbre de 300: Leónidas le hace una aragonesa al mismísimo Jerjes:
(Nota: Necesitas el Flash
Comento un poco el código, que es bastante Quick and dirty, tengan compasión, soy padre de familia...
La trascripción está embebida en el código javascript, y lo primero que habría que hacer es modificar el código para obtenerla de un servicio web; con JSON, por ejemplo, sería bastante fácil. Simplemente necesitamos almacenar, para cada línea de texto, el segundo en que empieza y el segundo en que acaba. Una forma posible sería la siguiente:
var Transcript = new Array(
{'start':0,'end':4, text:'Tienes muchos esclavos, Jerjes'},
{'start':4,'end':8, text:'pero pocos soldados. Dentro de poco temerán más'},
{'start':9, 'end':11, text:'mis lanzas'},
{'start':11,'end':22, text:'que tus latigazos
No son mis latigazos lo que temen'},
{'start':22,'end':25, text:'sino mi poder divino'}
)
Otro de los problemas del código es que depende de un timer, activado una vez por segundo, que comprueba la posición actual del vídeo para determinar si debe resaltar otra línea de texto. Una mejor manera sería detectar cuando el usuario ha movido la barra de posición (la API lo permite), calcular cuanto falta para el siguiente salto de línea y activar un timer para ese momento.
Los lectores más astutos habrán detectado otro problema. Las líneas de texto no son "naturales", unas tienen demasiado texto y otras, demasiado poco. Esta es una de las limitaciones de la API, no te posiciona exactamente en el segundo que le dices, sino el el key frame más cercano. Tuve que hacer varias pruebas de ensayo y error hasta encontrar de forma aproximada los key frames que me servían.
Para lo que tengo en mente no es demasiado problema: la transcripción sería de párrafos enteros, bastante largos (y, muy probablemente, aburridos), donde un error de segundos no sería mayor problema. Si eres el propietario del vídeo, supongo que podrás definir los key frames antes de colgarlo de YouTube, con lo cual también revolverías el problema.
Ver comentarios