web-dev-qa-db-ja.com

YouTubeビデオからクローズドキャプションのトランスクリプトを抽出する方法

YouTubeビデオからクローズドキャプションのトランスクリプトを抽出することはできますか?

YouTubeには200以上のウェブキャストがあり、それぞれ1時間以上です。 YouTubeはすべての動画のキャプションをクローズしましたが、ユーザーにはそれを取得する方法がないようです。

このブログでURLを試しましたが、動画では機能しません。

http://googlesystem.blogspot.com/2010/10/download-youtube-captions.html

44
Minghui Yu

次のドキュメントは、チャンネルの所有者のみが標準のYouTubeインターフェースを介してこれを行うことができると述べています: https://developers.google.com/youtube /2.0/developers_guide_protocol_captions?hl=en

安価な修正:「インタラクティブなトランススクリプト」ボタンをクリックして、この方法でコンテンツをコピーできます。もちろん、この方法でミリ秒を失います。

非常に安価な修正:共有YouTubeアカウント-複数の人がキャプションファイルを編集およびアップロードできるようにします。

困難なソリューション:youtube APIを使用すると、HTTP経由でキャプションファイルをダウンロードおよびアップロードできます...任意のユーザーまたは特定のユーザーにアップロードまたはダウンロードするためのブラウザーユーザーインターフェイスを提供するyoutube APIアプリケーションを作成できます。

これはJava http://apiblog.youtube.com/2011/01/youtube-captions-uploader-web-app.html のサンプルプロジェクトです

みんなのための実際のアップロードの非常に簡単な例を示します: http://yt-captions-uploader.appspot.com/

15
Peter Buchmann

YouTubeビデオのトランスクリプトを取得する方法は次のとおりです(利用可能な場合)。

  • YouTubeにアクセスして、選択したビデオを開きます。
  • [共有]ボタンの横にある[その他の操作]ボタン(3つの水平ドット)をクリックします。
  • 「トランスクリプトを開く」をクリックします

構文は少し間抜けかもしれませんが、これはかなり良い解決策です。

ソース: http://ccm.net/faq/40644-youtube-how-to-get-the-transcript-of-a-video

32
Will

にアクセスして、YouTubeのクローズドキャプションファイルのタイムコード化されたxmlファイルを表示/コピー/ダウンロードできます。

http://video.google.com/timedtext?lang=[LANGUAGE]&v=[YOUTUBE VIDEO IDENTIFIER]

たとえば、http://video.google.com/timedtext?lang=pt&v=WSVKbw7LC2w

注:このメソッドは、言語が正しく取得されていても、自動生成されたクローズドキャプションをダウンロードしません(自動生成された言語用の特別なコードがあるかもしれません)。

15
tony gil

別のオプションはyoutube-dlを使用することです:

youtube-dl --skip-download --write-auto-sub $youtube_url

デフォルトの形式はvttで、他の利用可能な形式はttml--sub-format ttml)です。

--write-sub
       Write subtitle file

--write-auto-sub
       Write automatically generated subtitle file (YouTube only)

--all-subs
       Download all the available subtitles of the video

--list-subs
       List all available subtitles for the video

--sub-format FORMAT
       Subtitle format, accepts formats preference, for example: "srt" or "ass/srt/best"

--sub-lang LANGS
       Languages of the subtitles to download (optional) separated by commas, use --list-subs for available language tags

ffmpegを使用して、字幕ファイルを別の形式に変換できます。

ffmpeg -i input.vtt output.srt

VTT字幕は次のようになります。

WEBVTT
Kind: captions
Language: en

00:00:01.429 --> 00:00:04.249 align:start position:0%

ladies<00:00:02.429><c> and</c><00:00:02.580><c> gentlemen</c><c.colorE5E5E5><00:00:02.879><c> I'd</c></c><c.colorCCCCCC><00:00:03.870><c> like</c></c><c.colorE5E5E5><00:00:04.020><c> to</c><00:00:04.110><c> thank</c></c>

00:00:04.249 --> 00:00:04.259 align:start position:0%
ladies and gentlemen<c.colorE5E5E5> I'd</c><c.colorCCCCCC> like</c><c.colorE5E5E5> to thank
 </c>

00:00:04.259 --> 00:00:05.930 align:start position:0%
ladies and gentlemen<c.colorE5E5E5> I'd</c><c.colorCCCCCC> like</c><c.colorE5E5E5> to thank
you<00:00:04.440><c> for</c><00:00:04.620><c> coming</c><00:00:05.069><c> tonight</c><00:00:05.190><c> especially</c></c><c.colorCCCCCC><00:00:05.609><c> at</c></c>

00:00:05.930 --> 00:00:05.940 align:start position:0%
you<c.colorE5E5E5> for coming tonight especially</c><c.colorCCCCCC> at
 </c>

00:00:05.940 --> 00:00:07.730 align:start position:0%
you<c.colorE5E5E5> for coming tonight especially</c><c.colorCCCCCC> at
such<00:00:06.180><c> short</c><00:00:06.690><c> notice</c></c>

00:00:07.730 --> 00:00:07.740 align:start position:0%
such short notice


00:00:07.740 --> 00:00:09.620 align:start position:0%
such short notice
I'm<00:00:08.370><c> sure</c><c.colorE5E5E5><00:00:08.580><c> mr.</c><00:00:08.820><c> Irving</c><00:00:09.000><c> will</c><00:00:09.120><c> fill</c><00:00:09.300><c> you</c><00:00:09.389><c> in</c><00:00:09.420><c> on</c></c>

00:00:09.620 --> 00:00:09.630 align:start position:0%
I'm sure<c.colorE5E5E5> mr. Irving will fill you in on
 </c>

00:00:09.630 --> 00:00:11.030 align:start position:0%
I'm sure<c.colorE5E5E5> mr. Irving will fill you in on
the<00:00:09.750><c> circumstances</c><00:00:10.440><c> that's</c><00:00:10.620><c> brought</c><00:00:10.920><c> us</c></c>

00:00:11.030 --> 00:00:11.040 align:start position:0%
<c.colorE5E5E5>the circumstances that's brought us
 </c>

ファイルの上部にある部分とタグのない同じ字幕を次に示します。

00:00:01.429 --> 00:00:04.249 align:start position:0%

ladies and gentlemen I'd like to thank

00:00:04.249 --> 00:00:04.259 align:start position:0%
ladies and gentlemen I'd like to thank


00:00:04.259 --> 00:00:05.930 align:start position:0%
ladies and gentlemen I'd like to thank
you for coming tonight especially at

00:00:05.930 --> 00:00:05.940 align:start position:0%
you for coming tonight especially at


00:00:05.940 --> 00:00:07.730 align:start position:0%
you for coming tonight especially at
such short notice

00:00:07.730 --> 00:00:07.740 align:start position:0%
such short notice


00:00:07.740 --> 00:00:09.620 align:start position:0%
such short notice
I'm sure mr. Irving will fill you in on

00:00:09.620 --> 00:00:09.630 align:start position:0%
I'm sure mr. Irving will fill you in on


00:00:09.630 --> 00:00:11.030 align:start position:0%
I'm sure mr. Irving will fill you in on
the circumstances that's brought us

各字幕テキストが3回繰り返されていることがわかります。 8行ごとに新しい字幕テキストがあります(3、11、19、および27)。

これにより、VTT字幕がよりシンプルな形式に変換されます。

sed '1,/^$/d' *.vtt| # remove the part at the top
sed 's/<[^>]*>//g'| # remove tags
awk -F. 'NR%8==1{printf"%s ",$1}NR%8==3' # print each new subtitle text and its start time without milliseconds

これは上記のコマンドの出力のようです:

00:00:01 ladies and gentlemen I'd like to thank
00:00:04 you for coming tonight especially at
00:00:05 such short notice
00:00:07 I'm sure mr. Irving will fill you in on
00:00:09 the circumstances that's brought us

これは、簡略化された形式でビデオのクローズドキャプションを印刷します。

cap()(cd /tmp;rm -f *.vtt;youtube-dl --skip-download --write-auto-sub "$1";sed '1,/^$/d' *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",$1}NR%8==3'|tee cap)

13
nisetama

(必須は「おそらくこれはyoutube.comの内部インターフェイスであり、いつでも壊れる可能性があります」)

これを行う別のツールにリンクする代わりに、「これを行う方法」の質問への回答があります

fiddler を使用してyoutube.com HTTPトラフィックを検査しましたが、XMLとしてクローズドキャプション情報を含む/api/timedtextからの応答があります。

このような応答のようです:

    <p t="0" d="5430" w="1">
        <s p="2" ac="136">we&#39;ve</s>
        <s t="780" ac="252"> got</s>
    </p>
    <p t="2280" d="7170" w="1">
        <s ac="243">we&#39;re</s>
        <s t="810" ac="233"> going</s>
    </p>

つまり、0はWord we'veであり、0+780はWord gotであり、2280+810はWord goingなどです。 。この時間はミリ秒単位であるため、時間3090では、&t=3をURLに追加します。

任意のツールを使用してXMLを読みやすいものにまとめることができますが、ここに私の「 Power BI Desktop 」というスクリプトで「特権」などの単語を検索します。

let
    Source = Xml.Tables(File.Contents("C:\Download\body.xml")),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Attribute:format", Int64.Type}}),
    body = #"Changed Type"{0}[body],
    p = body{0}[p],
    #"Changed Type1" = Table.TransformColumnTypes(p,{{"Attribute:t", Int64.Type}, {"Attribute:d", Int64.Type}, {"Attribute:w", Int64.Type}, {"Attribute:a", Int64.Type}, {"Attribute:p", Int64.Type}}),
    #"Expanded s" = Table.ExpandTableColumn(#"Changed Type1", "s", {"Attribute:ac", "Attribute:p", "Attribute:t", "Element:Text"}, {"s.Attribute:ac", "s.Attribute:p", "s.Attribute:t", "s.Element:Text"}),
    #"Changed Type2" = Table.TransformColumnTypes(#"Expanded s",{{"s.Attribute:t", Int64.Type}}),
    #"Removed Other Columns" = Table.SelectColumns(#"Changed Type2",{"s.Attribute:t", "s.Element:Text", "Attribute:t"}),
    #"Replaced Value" = Table.ReplaceValue(#"Removed Other Columns",null,0,Replacer.ReplaceValue,{"s.Attribute:t"}),
    #"Filtered Rows" = Table.SelectRows(#"Replaced Value", each [#"s.Element:Text"] <> null),
    #"Added Custom" = Table.AddColumn(#"Filtered Rows", "Time", each [#"Attribute:t"] + [#"s.Attribute:t"]),
    #"Filtered Rows1" = Table.SelectRows(#"Added Custom", each ([#"s.Element:Text"] = " privilege" or [#"s.Element:Text"] = " privileged" or [#"s.Element:Text"] = " privileges" or [#"s.Element:Text"] = "privilege" or [#"s.Element:Text"] = "privileges"))
in
    #"Filtered Rows1"
4
Carl Walsh

YouTubeからストリーミング字幕をダウンロードできます KeepSubs DownSub

自動トランスクリプトまたは作成者が提供するクローズキャプションから選択できます。また、Google翻訳を使用して英語の字幕を他の言語に自動的に翻訳することもできます。

3
Palimondo

投票の上下にあるOpen Transcriptドロップダウンから...を選択し、リンクを共有します。

これにより、右側にTranscriptスクロールdivが開きます。

その後、Copyを使用できます。 Select Allは使用できませんが、一番上の行をクリックし、スクロールサムを使用して一番下までスクロールし、最後の行をShiftキーを押しながらクリックする必要があることに注意してください。

通常のWebページ検索を使用して、このテキスト内を検索することもできます。

2
PeterVermont

YouTubeトランスクリプトAPI という無料のpythonツールがあります

スクリプトで、またはコマンドラインツールとして使用できます。

pip install youtube_transcript_api
0
Justin Meiners

ビデオの冒頭でトランスクリプトを開き、00:00のマーカーで左クリックしてドラッグし、先頭の数行でShiftキーを押して、手動で簡単に完了しました。

その後、ビデオを最後近くまで進めました。ビデオが停止したら、Shiftキーをもう一度押しながら、最後の文の最後をクリックしました。 CTRL-Cを使用して、テキストをクリップボードにコピーし、エディターに貼り付けました。

できた!

警告:RDP-Windowsがクリップボードを共有していないこと、またはTeamviewerなどのソフトウェアが同時に実行されていないことを確認してください。この手順では、大量のテキストがコピーされるバッファーがオーバーフローします。

0
Carey G. Butler