HomeBlogTranscribePlansAPI Keys

yt-dlp Subtitle vs API Transkrip: Yang Mana Satu untuk Digunakan

Split view dari perintah download subtitle yt-dlp di sebelah respons API transkrip JSON yang bersih

yt-dlp dapat mengunduh subtitle untuk dasarnya video YouTube apa pun, dan jika Anda telah menggunakannya untuk download media Anda mungkin sudah menemukan flag. Ini adalah alat yang benar-benar hebat — saya simpan terinstal di mana-mana. Tetapi "dapat mengunduh subtitle" dan "adalah cara yang tepat untuk mendapatkan transkrip dalam layanan" adalah klaim berbeda, dan saya telah terbakar dengan menggabungkannya. Berikut adalah bagaimana setiap pendekatan benar-benar terlihat, termasuk langkah pembersihan yang tidak ada yang memperingatkan Anda tentang.

Cara yt-dlp, end to end

Mengambil subtitle auto-generated Bahasa Inggris tanpa mengunduh video:

yt-dlp --write-auto-sub --sub-lang en --skip-download \
  -o "%(id)s" "https://www.youtube.com/watch?v=VIDEO_ID"

(Gunakan --write-sub alih-alih untuk trek yang diunggah manusia, atau kedua flag bersama-sama.) Ini menjatuhkan file VIDEO_ID.en.vtt. Buka dan Anda akan melihat mengapa Anda tidak selesai:

WEBVTT
Kind: captions
Language: en

00:00:00.320 --> 00:00:02.879
so today we're going to look at
00:00:01.760 --> 00:00:04.560
so today we're going to look at
how youtube handles

Auto-subs adalah caption "rolling" — setiap cue mengulangi baris sebelumnya, jadi stripping naive memberikan Anda setiap kalimat dua kali. Semua orang yang turun jalan ini berakhir menulis beberapa versi pembersihan ini:

import re, pathlib

lines = []
for line in pathlib.Path("VIDEO_ID.en.vtt").read_text().splitlines():
    if "-->" in line or line.startswith(("WEBVTT", "Kind:", "Language:")) or not line.strip():
        continue
    line = re.sub(r"<[^>]+>", "", line).strip()   # strip inline timing tags
    if not lines or line != lines[-1]:            # collapse rolling duplicates
        lines.append(line)
text = " ".join(lines)

Perintah, penanganan subprocess, I/O file, dedupe — panggil 40 baris lem sebelum Anda memiliki teks biasa.

Di mana yt-dlp adalah jawaban yang benar

Di mana itu terluka di server

Tiga beban pemeliharaan terpisah muncul saat yt-dlp pindah ke backend:

Cara API

Versi endpoint yang dihosting dari seluruh pipa di atas:

curl -s "https://youtube2text.org/api/transcribe?url=VIDEO_ID" \
  -H "x-api-key: yt_YOUR_KEY"

Mengembalikan JSON — {"result": {"videoId", "title", "pubDate", "content", ...}} — sudah teks biasa yang dideduplikasi, dengan kesalahan terstruktur (TRANSCRIPT_UNAVAILABLE ketika tidak ada caption yang ada, alih-alih stderr archaeology). Kunci demo bersama adalah satu panggilan (curl -s https://youtube2text.org/api/demo-key`, 5 video/bulan per IP); quickstart lengkapnya ada dalam mengekstrak transkrip dengan curl.

Catatan kaki jujur

Kedua pendekatan mengambil caption yang sama dari tempat yang sama, dan keduanya harus menangani YouTube tidak menginginkan lalu lintas otomatis. yt-dlp membuat itu masalah Anda — baik di laptop, proyek proxy pada server. API yang dihosting membuatnya masalah penyedia: youtube2text.org mengarahkan fetch melalui proxy perumahan yang berputar di sisi server, yang tepat bagian yang tidak dapat Anda dengan mudah replikasi dari IP datacenter. Anda tidak membayar untuk transkrip; Anda membayar untuk tidak mengoperasikan itu.

Split saya: yt-dlp untuk arsip dan one-offs di mesin saya sendiri, API untuk apa pun yang berjalan tanpa diawasi. Jika itu cocok dengan situasi Anda, kunci ada di youtube2text.org/app/keys — Google sign-in, tier gratis 5/bulan, dibayar dari $5,99.