自動生成されたYouTube文字起こしのダウンロード


25

動画をダウンロードせずに、自動生成されたYouTube文字起こしをダウンロードする方法はありますか?

TEDトークをチェックアウトしたいのですが、帯域幅が限られているため、自動トランスクリプト(字幕またはクローズドキャプションとも呼ばれる)をエクスポートしたいと思います。


自動的に文字起こしされた字幕付きの動画でこれを行う方法を知っている人はいますか?
ケンワーナー

関連する(非自動生成字幕):webapps.stackexchange.com/questions/25072/...
機械カタツムリ

また、ここで答えた:stackoverflow.com/questions/9611397/...
ブリキ男

これに関するニュースはありますか?
レオ

回答:


8

ブラウザーのスクリプトデバッガーの「ネットワークインスペクター」機能を使用して、文字起こし字幕を有効にした後、timedtextページへの2番目のリクエストを見つけ、そのリクエストをすべてアドレスバーにコピーして、ネイティブYouTube xml形式でダウンロードします。

SRTバージョンを取得するには、そのXMLのページのデバッガコンソールでこのコードを実行します。

function makeTimeline (time) {
    var string, time_array = [], milliseconds = Math.round(time % 1 * 1000).toString();

    while (3 > milliseconds.length) {
        milliseconds = '0' + milliseconds;
    }

    time_array.push(Math.floor(time / (60 * 60)));
    time_array.push(Math.floor((time - (time_array[0] * 60 * 60)) / 60));
    time_array.push(Math.floor(time - ((time_array[1] * 60) + (time_array[0] * 60 * 60))));

    for (var i = 0, il = time_array.length; i < il; i++) {
        string = '' + time_array[i];
        if (1 === string.length) {
            time_array[i] = '0' + string;
        }
    }
    return time_array.join(':') + ',' + milliseconds;
};

function returnSRT (data) {
    var caption, previous_start, start, end, temp, captions = data.getElementsByTagName('text'), srt_output = '';

    for (var i = 0, il = captions.length; i < il; i++) {
        caption = captions[i];
        start = +caption.getAttribute('start');

        if (0 <= previous_start) {
            temp = captions[i - 1].textContent.replace(/</g, '&lt;').replace(/>/g, '&gt;');
            srt_output += i + '\n' + makeTimeline(previous_start) + ' --> ' + makeTimeline(start) + '\n' + temp + '\n\n';
            previous_start = -1;
        }

        if ( end = +caption.getAttribute('dur'))
            end = start + end;
        else {
            if (captions[i + 1]) {
                previous_start = start;
                continue;
            }
        }

        temp = caption.textContent.replace(/</g, '&lt;').replace(/>/g, '&gt;');
        srt_output += i + '\n' + makeTimeline(start) + ' --> ' + makeTimeline(end) + '\n' + temp + '\n\n';
    };
    return srt_output;
}

returnSRT(document.documentElement)

また、スクリプトのブックマークレットバージョンもここにあります。

javascript:(function(){function%20makeTimeline(time)%7Bvar%20string%2Ctime_array%3D%5B%5D%2Cmilliseconds%3DMath.round(time%251*1000).toString()%3Bwhile(3%3Emilliseconds.length)%7Bmilliseconds%3D'0'%2Bmilliseconds%3B%7Dtime_array.push(Math.floor(time%2F(60*60)))%3Btime_array.push(Math.floor((time-(time_array%5B0%5D*60*60))%2F60))%3Btime_array.push(Math.floor(time-((time_array%5B1%5D*60)%2B(time_array%5B0%5D*60*60))))%3Bfor(var%20i%3D0%2Cil%3Dtime_array.length%3Bi%3Cil%3Bi%2B%2B)%7Bstring%3D''%2Btime_array%5Bi%5D%3Bif(1%3D%3D%3Dstring.length)%7Btime_array%5Bi%5D%3D'0'%2Bstring%3B%7D%7Dreturn%20time_array.join('%3A')%2B'%2C'%2Bmilliseconds%3B%7D%3Bfunction%20returnSRT(data)%7Bvar%20caption%2Cprevious_start%2Cstart%2Cend%2Ctemp%2Ccaptions%3Ddata.getElementsByTagName('text')%2Csrt_output%3D''%3Bfor(var%20i%3D0%2Cil%3Dcaptions.length%3Bi%3Cil%3Bi%2B%2B)%7Bcaption%3Dcaptions%5Bi%5D%3Bstart%3D%2Bcaption.getAttribute('start')%3Bif(0%3C%3Dprevious_start)%7Btemp%3Dcaptions%5Bi-1%5D.textContent.replace(%2F%3C%2Fg%2C'%26lt%3B').replace(%2F%3E%2Fg%2C'%26gt%3B')%3Bsrt_output%2B%3Di%2B'%5Cn'%2BmakeTimeline(previous_start)%2B'%20--%3E%20'%2BmakeTimeline(start)%2B'%5Cn'%2Btemp%2B'%5Cn%5Cn'%3Bprevious_start%3D-1%3B%7Dif(end%3D%2Bcaption.getAttribute('dur'))end%3Dstart%2Bend%3Belse%7Bif(captions%5Bi%2B1%5D)%7Bprevious_start%3Dstart%3Bcontinue%3B%7D%7Dtemp%3Dcaption.textContent.replace(%2F%3C%2Fg%2C'%26lt%3B').replace(%2F%3E%2Fg%2C'%26gt%3B')%3Bsrt_output%2B%3Di%2B'%5Cn'%2BmakeTimeline(start)%2B'%20--%3E%20'%2BmakeTimeline(end)%2B'%5Cn'%2Btemp%2B'%5Cn%5Cn'%3B%7D%3Breturn%20srt_output%3B%7Dwindow.location.href%3D'data%3Atext%2Fplain%3Bbase64%2C'%2Bbtoa(returnSRT(document.documentElement))})();

6

YouTube動画から字幕を抽出する方法はいくつかあります -

この汎用URLで言語とVideoIdを指定することにより 、選択したビデオの希望する言語の字幕を含むファイルをhttp://www.youtube.com/api/timedtext?lang={LANG}&v={VIDEOID}取得でき.xmlます。

そのファイル内のタグを取り除き、プレーンテキストのトランスクリプトを取得するには、次のようにします。

  • Microsoft Excelを開く
  • コピーして1つのセル内に字幕を貼り付けます
  • Ctrl+を押すH
  • [置換]タブで、[検索対象]テキストボックスに<*>と入力し、[置換]テキストボックスを空白のままにして、[OK]をクリックしますReplace All。検索式は、元のテキスト内のすべてのタグを削除します。

また、Googleビデオからワンクリックで利用可能なすべてのサブをダウンロードし、.srtVLC Media Playerなどのメディアプレーヤーで使用できるようにフォーマットに変換するGoogle2SRTと呼ばれるオープンソースツールがあります。

更新:Ted.comは、そのサイトで講演の転写を提供するようになりました。


汎用URLは機能していないようです。私は入りますhttp://video.google.com/timedtext?lang=english&v=b11AXknrsEIが、うまくいきません。また、開発者ツールにアクセスしても役に立ちません。そこには大量のリソースがあり、それらのどれも時限テキストと言いません。
61897 14

気にせず、私は開発ツールでそれを見つけました。それでも一般的なURLを取得することはできません。それが最も簡単なことです。
61897 14

youtube.com/api/timedtext?lang= {LANG}&v = {VIDEOID}を試してください
mvark

私は何か間違ったことをしているに違いない。このビデオでは、これを入力しますが、空白のページが読み込まれます。私は変更しようとしているenglisheneng、それは同じことを行います。
61897 14年

字幕は、キャプションが手動で転写された場合、つまり自動生成されない場合にのみ取得できるようです。共有した動画リンクには自動キャプションのみがあります。
mvark 14年



0

自分のビデオの場合は、ビデオマネージャーから字幕をダウンロードできます。に行きます:

ビデオマネージャー>>編集(目的のビデオ)>>キャプション>>(ダウンロードするトラックをクリック)>>アクション(ドロップダウンボックス)

執筆時点では、次の3つのファイルタイプを使用できます。

  • .vtt
  • .srt
  • .sbv

これらはアプリケーションごとに用途が異なりますが、非常によく似ています。SRTはおそらく最も一般的です。

それ以外の場合、ビデオでない場合、最良の方法(唯一の方法)は、開発者ツールからxmlファイルを取得することです。

この例でGoogle Chromeを使用して、ビデオに移動し、次の手順に従います。

  1. ビデオを一時停止します。広告がある場合は、再生されるのを待ちます。
  2. キーボードでF12を押します。これにより、開発者ツールが開きます。ビデオがアクティブにならないように、ページ内の空きスペースをクリックする必要がある場合があります。
  3. 開発者ツールの[ネットワーク]タブをクリックします。
  4. ビデオのすぐ下にあるトランスクリプトアイコンをクリックします。開発者ツールの[ネットワーク]タブに2つのアイテムが表示されます。
  5. 両方の項目には、タイトルtimedtext?と変数の束が付いています。通常、2番目は必要なものです。次のように始まります。
    <transcript> <text start="4.14" dur="3.049">my name is doctor john rush</text> <text start="7.189" dur="3.731">I'm the CEO and president</text>

このxmlファイルは、Webページでトランスクリプトを使用する場合に便利です。それ以外は、SRTファイルを使用するのと同じ方法で使用できるとは思わない。プログラミングが得意であれば、SRTに変換するプログラムを簡単に作成できます。別の目的でデータを抽出する独自のC#プログラムを作成し、2時間もかかりませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.