yt-dlpで字幕だけ取得して動画を要約する

yt-dlpで字幕だけ取得して動画を要約する

yt-dlp は動画を落とさずに字幕だけを取り出せます。この記事では、実際に使っているオプションの組み合わせと、vtt から本文を取り出すまでの流れ、そしてこの方法が通用しない動画について書きます。

やっていること:動画は落とさず、字幕だけ取る

動画の中身を把握したいだけなのに、数百MBの動画ファイルを落として、それをどこかに渡して、また消す——という手順は無駄が多すぎます。要約に必要なのは喋っている内容のテキストだけです。

yt-dlp には、まさにそのためのオプションの組み合わせがあります。

yt-dlp --skip-download --write-auto-subs --write-subs --sub-langs ja,en URL

--skip-download で動画本体のダウンロードを止め、--write-subs で投稿者がつけた字幕を、--write-auto-subs で自動生成字幕を取りに行きます。この2つを両方付けておくのが実運用では正解で、人手の字幕がある動画ではそれが、無い動画では自動字幕が拾えます。

ポイント

--write-subs だけだと自動字幕しかない動画で何も取れません。--write-auto-subs と併記しておけば、どちらのタイプの動画でも同じコマンドで通せます。

言語の指定

--sub-langs ja,en で取得する言語を絞れます。日本語と英語だけあれば要約用途としては足りるので、私はこの2つを固定で指定しています。指定しないと不要な言語まで拾ってしまい、あとでどのファイルを読むか選ぶ手間が増えます。

取れるのは vtt。そのままでは要約に食わせづらい

取得形式は vtt です。中身はタイムスタンプ行とテキスト行が交互に並び、さらにタグが混ざっています。これをそのまま要約に投げると、タイムスタンプの数字列が本文と混ざって扱いにくくなります。

やることは単純で、タイムスタンプ行とタグを除去すれば、残るのは本文だけです。ここは正規表現での行フィルタで済む範囲の処理で、特別なライブラリは要りません。

  1. yt-dlp に --skip-download --write-auto-subs --write-subs --sub-langs ja,en を付けて実行し、vtt を取得する
  2. vtt からタイムスタンプ行を落とす
  3. 残った行からタグを除去する
  4. 出てきた本文テキストを要約に渡す
うまくいったこと

自動字幕しか付いていない動画でも、この手順でテキストが取れました。「字幕をわざわざ付けている動画しか対象にできない」という制約は無く、対象範囲はかなり広く取れます。

通用しない動画がはっきりある

ここが一番伝えたい部分です。字幕が存在しない動画では、この方法は何も返しません。音楽のみの動画のように、そもそも字幕が生成されないものが該当します。

その場合に手元に残る手がかりは、タイトルと概要欄だけです。それだけで内容を要約したことにしてしまうと、本文を読んでいないのに読んだ顔をした要約になります。運用としては、字幕が取れなかった動画は「字幕なし」と明示して分けておくのが安全です。

  • 人手の字幕がある動画 → 取れる
  • 自動字幕しかない動画 → 取れる
  • 字幕が存在しない動画(音楽のみ等)→ 取れない。タイトルと概要欄しか残らない

自動字幕の誤変換は、消せていません

自動字幕は便利ですが、固有名詞や専門用語を誤変換することがあります。人名、製品名、業界用語のあたりが崩れると、そのまま要約に流れ込みます。

厄介なのは、誤変換した状態でも日本語として一応読めてしまう場合があることです。要約側は「おかしい」と気づかないまま、それらしい文章を出します。つまり、要約が原文と食い違う可能性は、この構成では消しきれていません。

注意

固有名詞が絡む内容——たとえば誰が何と言ったかが重要な動画——を、字幕由来の要約だけで判断するのは避けています。要約はあくまで「見るかどうかを決めるための材料」として扱い、確定情報として引用しないようにしています。

失敗したこと

字幕が取れなかった動画に対して、タイトルと概要欄だけで要約を作ってしまったことがあります。出力は形になっているぶん、あとから見て「これは本文を読んでいない要約だ」と区別がつきません。字幕の有無をフラグとして残すべきでした。

この方法の位置づけ

まとめると、この構成は「字幕がある動画を、動画本体を落とさずにテキスト化する」ところまでを確実にこなします。そこから先の精度は、自動字幕の質に引きずられます。

どのくらいの割合で誤変換が起きるのか、どんな語が特に崩れやすいのかは、私は測っていないので分かりません。分かっているのは「起きることがある」という事実だけで、その前提で使っています。

まとめ

  • --skip-download --write-auto-subs --write-subs で、動画を落とさず字幕だけ取れる
  • --sub-langs ja,en で言語を指定。形式は vtt で、タイムスタンプ行とタグを除去すれば本文になる
  • 自動字幕しかない動画でも取得できるので、対象範囲は広い
  • 字幕が無い動画(音楽のみ等)は取れず、タイトルと概要欄しか手がかりが残らない
  • 自動字幕は固有名詞・専門用語を誤変換することがあり、要約が原文と食い違う可能性は残ったまま
広告