【Javascript】YouTubeの字幕をテキストで取得する

Vライバーで二次創作しようとしたときとかに、設定が知りたいけど過去動画全部見てたら一ヶ月終わるだろ! 動画をテキスト変換して彼女たちの国のこと知りたい! とか思ったことはありませんか。私はあります。

更新履歴

2020-10-10 時間をhhh:mm:ss形式に整形したバージョンを追加

従来の方法で動画の文字起こしを作る

もちろん寄付ウェアのVB-CABLEとGoogle Documentで文字起こしを試みたりしました。
やってみるとわかりますが、リアルタイム書き起こしはこの間ずっとPCが占領されます。
さすがに4時間とかあるデータの書き起こしでPC使えなくなると困りますよね。

Youtubeの字幕をコピーしたい

そんななか、YouTubeでアップロードされた動画の字幕が見れることを知りました(非公開でアップロードしても取得できるそうです)。
保存ボタンの隣の[…]ボタンをクリックすると文字起こしパネルが出てくるのです。
よし、もうこれ取得しちゃおうぜ。(ドラッグ+選択+コピーするのめんどうだし)

JavaScriptはそこそこなんでもできる

web上にあるテキストはだいたいjsで取れるはずなのでとってみます。
タグ構造を見ると、どうやら ytd-transcript-body-renderer というタグの中に字幕が全部入ってるみたいなのでgetElementsByTagNameでタグを取得して1個目のデータのinnerTextを出します。
いつも同じことをやってる気がしますが大目に見て下さい。

var text = document.getElementsByTagName('ytd-transcript-body-renderer')
console.log(text[0].innerText);

取れるテキストとか

上記のスクリプトをコンソールで実行した様子です。
人名はどんな変換されるかわからないですが、アンジュとかカタカナのキャラならギリとれるかな…。とこちゃんは取れてたようです。
ここに写ってませんか、笹木さんは佐々木さんって変換されてたのでつらいところですね。

GoogleChoromeの場合、コンソールの[Copy]という文字列をクリックするとクリップボードにコピーされます。
こういう感じで取れます。4800行ぐらいありました。(読むのたいへんだ…)

00:25
ています
00:26
持った
00:28
ん
00:30
[音楽]
00:42
[音楽]

今回の検証に使用した動画です。
不思議なことに皇女がいればどの動画でも楽しく感じられます。
リゼアンWeekはこれから見ます。さんばかと笹木さんが好き。

おまけ

時間をhhh:mm:ss形式に整形したバージョンのjsを作りました。こっちのほうが見やすいとは思います。

    // 字幕取得
    let text = document.getElementsByTagName('ytd-transcript-body-renderer')[0].innerText.replaceAll(" ", "");
    let list = text.split("\n");
    let data = "";
    let cnt = 0;
    for(let i=0;i<list.length;i++){
        if(list[i] === "") continue;


        if(cnt % 2 === 0){
            // 時間
            let min = list[i].split(":")[0];
            let sec = list[i].split(":")[1];
            let hour = Math.floor(min / 60);
            min = min - hour * 60;
            data += addZero(hour) + ":" + addZero(min) + ":" + addZero(sec) + "\t";

        }else{
            // 台詞
            data += list[i] + "\n";
        }
        cnt++;
    }
    console.log(data);

    function addZero(num){
        return ("00"+num).slice( -2 );
    }

表示されるテキストはこんな感じです。

03:51:49	道国内もインドな場合のほうなの販売今ヴィラ義母いるが c なんかが持ってきて
03:51:55	くれたよ母母員がいいかなと思ってかえええええ
03:52:01	そうそうなんか色々持ってきてくれたからだお酒といった抱いて
03:52:06	なぁ
03:52:08	can
03:52:09	主のんのみ変えはこっち金でぜひ
03:52:12	何を伊勢レイクガード a
03:52:15	eeg や楽しかった本当にいい
03:52:19	青いにクラゲがに息できなかねぇ
03:52:22	張海すごいよかったね本当に尿よかったらいい
03:52:29	1ルールキャンって言ったらねほら下追うのプロだと思ってるはず
03:52:34	いやーそんなはだけだけどね
03:52:38	いいねやっぱホラゲは英領2位投稿てなきゃうぜえ
03:53:09	はい

おわり。