Youtubeの字幕機能を活用して,音声DBを作った話

はじめに

  • Youtubeの字幕機能を使って,動画のセリフと音声が紐付いたDBをつくった
  • ややグレー
  • サイトはこちら http://vtuber-db.site

使い方

http://vtuber-db.site

  • 日本語字幕がついているYoutube動画のURLを貼る f:id:danmakubi:20180331143650p:plain

  • 保存したいセリフを指定 f:id:danmakubi:20180331143823p:plain

  • 作成 f:id:danmakubi:20180331143925p:plain

処理の流れ

  • 貼られたURL(https://www.youtube.com/watch?v=03H1qSot9_s)の動画ID(&v=xxxxxxx)を使って字幕を取得
  • 字幕のURLはこんなかんじ http://video.google.com/timedtext?lang=ja&v=#{video_id}
  • lang=jaで字幕の言語を指定
  • ちなみにhttp://video.google.com/timedtext?type=list&v=#{video_id}とすると,どの言語の字幕があるかというリストを返します

  • 字幕はXML形式で取得できる f:id:danmakubi:20180331144745p:plain

  • これが字幕の最小単位

<text start="0" dur="3">10分ちょっとで分かる月ノ美兎</text>
  • 各字幕は,動画中の開始時間(start="0")と,再生時間(dur="3"※終了時間ではない)を持つので,これを使って動画を切り取る

  • Youtube動画URLから,実際に動画が置かれているCDNのURLを取得するのにyoutube-dlを使う

  • 動画を切り取るにはffmpegを使う
$ youtube-dl --get-url #{動画URL}
$ ffmpeg -y -ss #{開始時間} -t #{再生時間} -i '#{CDNのURL}' #{output_filepath}
  • 細かい説明は省いていますがだいたいこんなかんじ