DEV Community

Cover image for Apakah subtitle otomatis YouTube cukup akurat untuk dikutip?

Apakah subtitle otomatis YouTube cukup akurat untuk dikutip?

Sebagian besar video YouTube punya transkrip, dan pada kebanyakan video transkrip itu ditulis oleh pengenalan suara. Untuk sekadar mengikuti isi video, itu cukup. Untuk kutipan di makalah, berita, atau catatan hukum, pertanyaannya adalah seberapa jauh teks otomatis itu dari yang sebenarnya diucapkan, dan apakah stempel waktunya menunjuk detik yang benar. Satu video yang punya kedua jenis subtitle memberi jawaban langsung.

Videonya adalah unggahan NASA dari pidato Presiden Kennedy di Rice University tahun 1962 (WZyRbnpGyzQ, 18 menit). Video ini punya dua trek bahasa Inggris: satu ditulis oleh manusia dan satu dibuat oleh YouTube. Keduanya bisa didaftar dan diunduh dengan paket 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

Setiap entri adalah satu baris teks dengan waktu mulai dan durasi dalam detik.

Seberapa jauh kedua trek berbeda

Dibandingkan kata per kata (huruf kecil, tanda baca dibuang, disejajarkan dengan difflib.SequenceMatcher milik Python), kedua trek cocok pada sekitar 95% isi pidato:

Ditulis manusia Dibuat otomatis
Baris 183 332
Kata 2,233 2,211
Tanda baca 255 4
Kata yang berbeda sekitar 143 (6%)

Enam persen terdengar kecil sampai kita melihat kata-kata mana yang salah. Pengenalan suara bagus pada kata umum dan buruk pada nama, angka, dan istilah teknis, yaitu bagian yang biasanya menjadi inti sebuah kutipan:

Ditulis manusia Dibuat otomatis
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

Ada juga bagian yang hilang. Sekitar menit 4:47, trek otomatis melompat dari "both must be" langsung ke "determined and cannot be deterred". 28 kata di antaranya, "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", sama sekali tidak ada. Tidak ada tanda apa pun di trek otomatis yang menandai celah itu.

Apa yang terjadi pada kalimat terkenalnya

Kalimat yang dikutip orang dari pidato ini ada di 9:18. Di trek manusia, kalimat itu satu baris, lengkap dengan tanda baca dan satu waktu mulai:

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

Di trek otomatis, kalimat itu tersebar di tiga baris yang saling tumpang tindih, dan kata pertamanya milik baris sebelumnya:

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

Subtitle otomatis dibuat untuk tampilan bergulir, beberapa kata sekali tampil, sehingga barisnya mengikuti waktu ucapan, bukan kalimat. Untuk mengutip, ada dua akibatnya. Menyalin baris di 9:18 menghasilkan potongan yang dimulai di tengah kalimat, dan waktu mulai baris yang memuat "not" adalah 9:15, tiga detik sebelum kutipannya. Keduanya tidak salah sebagai subtitle; keduanya salah sebagai sitasi.

Dalam kasus ini tata bahasanya selamat, "they are", berbeda dari versi yang diingat kebanyakan orang ("because it is hard"). Tetapi "we are willing" menjadi "we're willing" beberapa baris kemudian, dan kutipan yang diambil dari trek otomatis akan menaruh kontraksi di mulut Kennedy yang tidak pernah ia ucapkan.

Memilih trek, dan tautannya

Alat transkrip di aplikasi desktop osFoundry, yang mengambil subtitle dari komputer tempat aplikasi berjalan, membuat pilihan itu dalam beberapa baris Rust. YouTube menandai trek otomatis dengan kind: "asr", dan aplikasi mengambil trek bahasa Inggris buatan manusia dulu, lalu trek bahasa Inggris apa pun, lalu trek manusia apa pun, lalu apa saja yang ada:

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

Trek tulisan manusia di tampilan transkrip aplikasi: 183 baris, dengan kutipan di barisnya sendiri pada 9:18

Saat sebuah baris disimpan sebagai referensi, waktu mulainya menjadi parameter t pada tautan. Waktunya dibulatkan ke bawah, sehingga video mulai sepersekian detik sebelum kata-katanya, bukan setelah kata pertama:

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

Untuk baris 9:18 hasilnya &t=558s, untuk baris yang mulai di detik 558.9.

Kalau hanya ada trek otomatis

Banyak video hanya punya trek otomatis. Dalam kasus itu, trek tersebut berfungsi sebagai indeks pencarian, bukan sumber: pakai untuk menemukan kira-kira di mana sesuatu diucapkan, putar bagian itu, dan tulis kutipan dari audionya. Periksa nama dan angka dengan sumber lain, dan siap-siap menemukan bagian yang hilang tanpa penanda. Tautan sampai ke detiknya tetap layak disimpan, karena memungkinkan pembaca melakukan pemeriksaan yang sama dalam beberapa detik.

Aplikasi desktop yang dipakai di sini gratis di halaman unduhan osFoundry.

Top comments (0)