DEV Community

Cover image for ¿Son los subtítulos automáticos de YouTube lo bastante exactos para citarlos?

¿Son los subtítulos automáticos de YouTube lo bastante exactos para citarlos?

La mayoría de los vídeos de YouTube tienen transcripción, y en casi todos la escribió un reconocedor de voz. Para seguir el vídeo basta. Para una cita en un trabajo académico, una noticia o una nota legal, la pregunta es cuánto se aleja el texto automático de lo que se dijo y si sus marcas de tiempo apuntan al segundo correcto. Un vídeo que tiene los dos tipos de subtítulos da una respuesta directa.

El vídeo es la subida de la NASA del discurso del presidente Kennedy en la Universidad de Rice en 1962 (WZyRbnpGyzQ, 18 minutos). Tiene dos pistas en inglés: una escrita por una persona y otra generada por YouTube. Las dos se pueden listar y descargar con el paquete de Python youtube-transcript-api:

from youtube_transcript_api import YouTubeTranscriptApi

tracks = YouTubeTranscriptApi().list("WZyRbnpGyzQ")
for t in tracks:
    print(t.language_code, t.is_generated, t.language)
# en False English - Caption
# en True English (auto-generated)

manual = tracks.find_manually_created_transcript(["en"]).fetch().to_raw_data()
auto = tracks.find_generated_transcript(["en"]).fetch().to_raw_data()
Enter fullscreen mode Exit fullscreen mode

Cada entrada es una línea de texto con un tiempo de inicio y una duración en segundos.

Cuánto se separan las dos pistas

Comparadas palabra por palabra (en minúsculas, sin puntuación, alineadas con difflib.SequenceMatcher de Python), las dos pistas coinciden en cerca del 95 % del discurso:

Escrita por una persona Autogenerada
Líneas 183 332
Palabras 2,233 2,211
Signos de puntuación 255 4
Palabras que difieren unas 143 (6 %)

El seis por ciento suena poco hasta que se ve qué palabras son. El reconocimiento de voz va bien con las palabras comunes y mal con nombres, números y términos técnicos, justo las partes de las que suele depender una cita:

Escrita por una persona Autogenerada
President Pitzer President pit
launched John Glenn launched John gland
a Saturn C-1 booster rocket a satin C1
Cape Canaveral (second mention) canabal
we are willing to accept we're willing to accept

Además hay un hueco. Hacia el minuto 4:47 la pista automática salta de "both must be" directamente a "determined and cannot be deterred". Las 28 palabras intermedias, "enterprised and overcome with answerable courage. If this capsule history of our progress teaches us anything, it is that man, in his quest for knowledge and progress, is", no están en ella. Nada en la pista automática marca ese salto.

Qué pasa con la frase famosa

La frase que todo el mundo cita de este discurso está en el 9:18. En la pista humana es una sola línea, con puntuación y un único tiempo de inicio:

558.90  3.65  not because they are easy, but because they are hard,
Enter fullscreen mode Exit fullscreen mode

En la pista automática está repartida en tres líneas solapadas, y la primera palabra pertenece a la línea anterior:

555.64  4.80  decade and do the other things not
558.20  6.52  because they are easy but because they
560.44  7.04  are hard because that goal will serve to
Enter fullscreen mode Exit fullscreen mode

Los subtítulos automáticos están pensados para mostrarse en rodillo, unas pocas palabras cada vez, así que sus líneas siguen el ritmo del habla y no las frases. De ahí se siguen dos cosas para citar. Copiar la línea de las 9:18 da un fragmento que empieza a mitad de frase, y el tiempo de inicio de la línea que contiene "not" es 9:15, tres segundos antes de la cita. Ninguna de las dos cosas es un error como subtítulo; las dos lo son como referencia.

En este caso la gramática se salva, "they are", a diferencia de la versión que mucha gente recuerda ("because it is hard"). Pero unas líneas después "we are willing" se convirtió en "we're willing", y una cita tomada de la pista automática pondría en boca de Kennedy una contracción que no dijo.

Elegir la pista y el enlace

La herramienta de transcripciones de la aplicación de escritorio de osFoundry, que obtiene los subtítulos desde el ordenador en el que se ejecuta, hace la elección en pocas líneas de Rust. YouTube marca las pistas automáticas con kind: "asr", y la aplicación toma primero una pista humana en inglés, luego cualquier pista en inglés, luego cualquier pista humana y, si no, la que haya:

fn pick_track(tracks: &[CaptionTrack]) -> Option<&CaptionTrack> {
    tracks
        .iter()
        .find(|t| t.language_code.starts_with("en") && t.kind != "asr")
        .or_else(|| tracks.iter().find(|t| t.language_code.starts_with("en")))
        .or_else(|| tracks.iter().find(|t| t.kind != "asr"))
        .or_else(|| tracks.first())
}
Enter fullscreen mode Exit fullscreen mode

La pista escrita por una persona en la vista de transcripción de la aplicación: 183 líneas, con la cita en su propia línea en 9:18

Cuando una línea se guarda como referencia, su tiempo de inicio pasa a ser el parámetro t del enlace. El tiempo se redondea hacia abajo, de modo que el vídeo arranca una fracción de segundo antes de las palabras y no justo después de la primera:

url: `https://www.youtube.com/watch?v=${transcript.video_id}&t=${Math.floor(segment.start)}s`
Enter fullscreen mode Exit fullscreen mode

Para la línea de las 9:18 eso da &t=558s, para una línea que empieza en el segundo 558.9.

Cuando solo hay una pista automática

Muchos vídeos solo tienen la pista automática. Entonces sirve como índice de búsqueda, no como fuente: úsala para encontrar más o menos dónde se dijo algo, reproduce ese tramo y escribe la cita a partir del audio. Comprueba nombres y cifras con otra fuente y cuenta con tramos que faltan sin ninguna marca. Aun así vale la pena conservar el enlace al segundo, porque permite a un lector hacer la misma comprobación en unos segundos.

La aplicación de escritorio usada aquí es gratuita en la página de descarga de osFoundry.

Top comments (0)