HomeBlogTranscribePlansAPI Keys

yt-dlp Napisy vs Transkrypcja API: Którego Użyć

Widok podzielony polecenia pobierania napisów yt-dlp obok czystej odpowiedzi API transkrypcji JSON

yt-dlp może pobierać napisy dla prawie każdego wideo YouTube, a jeśli używałeś go do pobierania mediów prawdopodobnie już odkryłeś flagi. To naprawdę świetne narzędzie — trzymam go zainstalowanego wszędzie. Ale "możesz pobierać napisy" i "to prawy sposób, aby uzyskać transkrypcje w usłudze" są różnymi twierdzeniami, i byłem spalony przez mylenie ich. Tutaj jest co każdy dostęp wygląda, w tym krok czyszczenia nikt cię nie ostrzega.

Sposób yt-dlp, end do końca

Pobieranie autogenerowanych angielskich napisów bez pobierania wideo:

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

(Użyj --write-sub zamiast dla ścieżek przesłanych przez człowieka, lub obie flagi razem.) To upuszcza plik VIDEO_ID.en.vtt. Otwórz to i zobaczysz dlaczego skończyłeś:

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

Napisy auto to "toczące się" napisy — każda wskazówka powtarza poprzednią linię, więc naiwne rozbieranie daje Ci każde zdanie dwa razy. Wszyscy, którzy idą drogą kończy się pisaniem niektórych wersji tego czyszczenia:

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)

Polecenie, obsługa podprocesu, plik I/O, dedupe — zadzwoń na to 40 linii kleju, zanim będziesz mieć zwykły tekst.

Gdzie yt-dlp jest prawą odpowiedzią

Gdzie boli na serwerze

Trzy oddzielne obciążenia konserwacji pojawiają się w momencie yt-dlp przenosi do backendu:

Sposób API

Wersja hostowanego punktu końcowego całego rurociągu powyżej:

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

Zwraca JSON — {"result": {"videoId", "title", "pubDate", "content", ...}} — już deduplicated zwykły tekst, z ustrukturyzowanymi błędami (TRANSCRIPT_UNAVAILABLE, gdy napisy nie istnieją, zamiast archeologii stderr). Wspólny klucz demo to jeden rozmowa (curl -s https://youtube2text.org/api/demo-key, 5 filmów/miesiąc na IP); pełny quickstart jest w ekstrakcja transkrypcji za pomocą curl.

Szczera przypiska

Oba dostępy pobierają te same napisy z tego samego miejsca, a obaj muszą radzić sobie z YouTube nie chcą zautomatyzowanego ruchu. yt-dlp robi to Twojego problemu — w porządku na laptopie, projekt proxy na serwerze. Hostowany API czyni to problemem dostawcy: youtube2text.org trasuje pobiera przez obracające się proxy mieszkalne po stronie serwera, które to dokładnie kawałek, którego nie możesz łatwo replikować z adresu centrum danych. Nie płacisz za transkrypcję; płacisz, aby nie obsługiwać to.

Mój podział: yt-dlp dla archiwów i jedno-offsów na mojej własnej maszynie, API na cokolwiek, co uruchamia bezobsługowo. Jeśli to pasuje do Twojej sytuacji, klucze są na youtube2text.org/app/keys — logowanie Google, bezpłatny 5/miesiąc poziom, płatny od 5,99 USD.