MAGAZINE

ルーターマガジン

クローリング/スクレイピング

jqコマンドだけでYouTubeの動画の字幕を整形する

2024.11.21
Pocket

動画要約っていうか字幕スクレイピング&要約ですよね

生成AIを使ったYouTube動画要約ツールをみかけますが、実態としては動画本体を解釈しているのではなくYouTubeの字幕を要約しているだけというケースもあります。

じゃぁ彼らがやってるようにまずは字幕だけを取り出してみましょう。

YouTubeの字幕はTimed textという形式となっております。devtoolsのネットワークタブではこういう感じで見れます。ダブルクリックするとダウンロードできます。

例えば首相官邸の動画の字幕は次のように見つけます。 https://www.youtube.com/watch?v=3f-0QwCSOaY&t=109s

ネットワークタブからTimed textのファイルを見つけ選択するとファイルとしてダウンロードできます。

字幕ファイルのフォーマットは次のようなjsonファイルです。

セリフが文字単位で細かく指定されているため、単語単位で検索する際には不便です。 ある程度まとめましょう。

簡単なJSON加工であれば、jqコマンドが使えます。今回はjqでどこまでできるか試してみましょう。

ということで以下完成形です。

cat timedtext.json | jq -r '
  .events[] 
  | select(.segs)
  | select(.segs | map(.utf8) | join("") | test("\\S"))
  | [(.tStartMs | tostring), (.segs | map(.utf8) | join("") | gsub("\\s+"; ""))]
  | join("\t")
'

このフィルタを使ってタブ区切りにすると以下のようなファイルになります。(エクセルで開いています)

jq フィルタの解説

  • events配下の配列を取りなさい
  • さらに.segsというキーがある配列だけ残しなさい
  • さらに実際の文字をJOINした結果で空文字列にならない配列だけ残しなさい
  • 開始時刻(ミリセカンド)とutf8というキーにバラバラに入ってる文字を文字列にJOINした結果を配列にしなさい
  • その配列をタブ区切りでJOINしなさい

タブ区切りにしているのでエクセルなどで取り込めます。 ミリセカンドで開始時刻が入っておりますが、YouTubeの場合開始時刻をクエリストリングにいれることでその位置にジャンプできますね。

ここまでやりましたが、じゃぁこれをChromeの機能拡張として使えば便利じゃない?って思われるかも知れません。

実はあります。 https://chromewebstore.google.com/detail/youtube-subtitle-download/dpmmcccjdcgdjnlnicicdbnlmohhpagf?hl=ja 試しに使ってみました。見事にきれいに字幕だけとりだせています。おそらく裏では同じことをしているはずです。

またYouTubeだけではなく、GoogleDriveも自動字幕はつける機能があります。 GoogleDriveの自動字幕機能は2024年7月時点ではまだ英語だけですが、社内動画も自動字幕ができれば、自動議事録生成に一歩近づきます。

Pocket

CONTACT

お問い合わせ・ご依頼はこちらから