yt-dlp 字幕対トランスクリプト API: どちらを使用するか

yt-dlpは基本的にあらゆるYouTubeビデオの字幕をダウンロードできます。メディアダウンロードのために使用した場合、おそらく既にフラグを発見しています。それは正当に素晴らしいツールです―私はそれをどこにでもインストールしたままにしておきます。しかし、「字幕をダウンロードできます」と「サービスで文字起こしを取得するための正しい方法」は異なる主張であり、その混同で燃やされてきました。各アプローチは実際のように見えます。誰も警告しないクリーンアップステップを含み、ここにあります。
yt-dlp方法、終わりから終わり
ビデオをダウンロードせずに自動生成された英語の字幕をつかみます:
yt-dlp --write-auto-sub --sub-lang en --skip-download \
-o "%(id)s" "https://www.youtube.com/watch?v=VIDEO_ID"
(代わりに人間がアップロードしたトラック用に--write-subを使用するか、両方のフラグを使用)。これはVIDEO_ID.en.vttファイルを落とします。開いて、なぜあなたが完了していないかを見てください:
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
自動字幕は「ローリング」字幕です―各キューは前の行を繰り返すため、素朴なストリッピングはすべての文を2回与えます。この道路を下に行く人は誰でも、このクリーンアップのいくつかのバージョンを書くことになります:
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)
コマンド、サブプロセス処理、ファイルI/O、重複排除―プレーンテキストを持つ前に40行のグルーを呼び出します。
yt-dlpが正しい答えである場所
- バルクオフラインアーカイブ。 チャネルURLを指し、すべてのビデオを歩行し、字幕を含み、再開可能で無料。ホーム接続で個人のアーカイブを構築するために、それに勝つものはありません。
- 字幕ファイル自体が必要です。 srt/vttのタイミングが配信可能な場合―ビデオエディターにフィード、正確なキュータイミングを保存―yt-dlpは生のアーティファクトを与えます。
- メディアを既にダウンロードしています。 既にWhisperトランスクリプションのためにオーディオを引っ張る?
--write-auto-subを追加するのは1つのフラグです。 - ゼロ予算、個人スケール。 住宅用IPで人間のスピードで、それはちょうど機能します。
サーバーで痛む場所
yt-dlpがバックエンドに移動する瞬間、3つの別々のメンテナンス負担が表示されます:
- バイナリトレッドミル。 YouTubeは定期的にその内部を変更し、yt-dlpは定期的に修正を出荷します―これは機能ですが、本番依存関係が頻繁に更新する必要があるか、抽出が失敗し始めることを意味します。
- IPブロック。 AWS/GCP/Herokoアドレスから、「ボットではないことを確認するためにサインイン」エラーが予期されます。これはcloud で youtube-transcript-api をブロックする同じ壁です―ツールを切り替えることはIP評判を切り替えません。
- グルーコード。 サブプロセス管理、一時ファイル、上記のvtt クリーンアップ、英語以外のトラック、終了コードとstderrパースを介して見つからない字幕検出。
API方法
上記の全体的なパイプラインのホストエンドポイントバージョン:
curl -s "https://youtube2text.org/api/transcribe?url=VIDEO_ID" \
-H "x-api-key: yt_YOUR_KEY"
JSON を返します―{"result": {"videoId", "title", "pubDate", "content", ...}}―既に重複排除されたプレーンテキスト、構造化エラー付き(字幕が存在しない場合TRANSCRIPT_UNAVAILABLE、stderrアーケオロジーの代わりに)。共有デモキーは1つの呼び出し離れています(curl -s https://youtube2text.org/api/demo-key、月5ビデオあたりIP)。完全なクイックスタートはcurlでトランスクリプトを抽出です。
正直な脚注
両方のアプローチは同じ場所から同じ字幕を取得し、両方ともYouTubeが自動化されたトラフィックを望まないことに対処する必要があります。yt-dlpはそれをあなたの問題にします―ラップトップで問題ありません。サーバーのプロキシプロジェクト。ホストされたAPIはそれをプロバイダーの問題にします: youtube2text.orgはサーバー側で回転住宅用プロキシ経由でフェッチをルーティングします。データセンターIPから簡単に複製することはできない正確な部分。あなたはトランスクリプトを支払っていません。それを操作しないかのために支払っています。
私の分割: アーカイブと自分のマシンのワンオフのためのyt-dlp、無人で実行される何かのためのAPI。その状況に合致する場合、キーはyoutube2text.org/app/keysにあります―Googleサインイン、無料5/月ティア、$5.99から支払われました。