Как извлечь транскрипт с субтитрами из видео на YouTube? - PullRequest
42 голосов
/ 08 марта 2012

Можно ли извлечь стенограмму с субтитрами из видео YouTube?

У нас более 200 веб-трансляций на YouTube, и каждая из них имеет продолжительность не менее одного часа.YouTube закрыл заголовок для всех видео, но, похоже, пользователи не могут его получить.

Я пробовал URL-адрес в этом блоге, но он не работает с нашими видео.

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

Ответы [ 8 ]

30 голосов
/ 01 февраля 2016

Вот как получить стенограмму видео с YouTube (если доступно):

  • Перейдите на YouTube и откройте видео по вашему выбору.
  • Нажмите кнопку «Дополнительные действия» (3 горизонтальные точки), расположенную рядом с кнопкой «Поделиться».
  • Нажмите «Открыть стенограмму»

Хотя синтаксис можетбудь немного глупым, это довольно хорошее решение.

Источник: http://ccm.net/faq/40644-youtube-how-to-get-the-transcript-of-a-video

16 голосов
/ 13 июня 2012

В следующем документе сказано, что только владелец канала может сделать это через стандартный интерфейс YouTube: https://developers.google.com/youtube/2.0/developers_guide_protocol_captions?hl=en

Дешевое исправление: Вы можете нажать на кнопку «интерактивный транскрипт» и скопировать содержимое таким образом. Конечно, вы теряете миллисекунды таким образом.

Чрезвычайно дешевое исправление: Общий аккаунт YouTube - чтобы несколько человек могли редактировать и загружать файлы подписей.

Сложное решение: API youtube позволяет загружать и загружать файлы титров через HTTP ... Вы можете написать приложение API YouTube для предоставления пользовательского интерфейса браузера для загрузки или скачивания для ЛЮБОГО пользователя или отдельных пользователей.

Вот пример проекта для этого в Java http://apiblog.youtube.com/2011/01/youtube-captions-uploader-web-app.html

Вот очень простой пример рабочей загрузки для всех: http://yt -captions-uploader.appspot.com /

15 голосов
/ 27 апреля 2017

Вы можете просматривать / копировать / загружать временный кодированный XML-файл файла субтитров YouTube, открыв

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

Например http://video.google.com/timedtext?lang=pt&v=WSVKbw7LC2w

ПРИМЕЧАНИЕ: этот метод не загружает автоматически сгенерированные субтитры, даже если вы правильно выбрали язык (возможно, есть специальный код для автоматически сгенерированных языков).

12 голосов
/ 22 февраля 2019

Другой вариант - использовать 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
Style:
::cue(c.colorCCCCCC) { color: rgb(204,204,204);
 }
::cue(c.colorE5E5E5) { color: rgb(229,229,229);
 }
##

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-й, 11-й, 19-й и 27-й) появляется новый текст субтитров.

Преобразует субтитры VTT в более простой формат:

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

4 голосов
/ 17 октября 2016

(Обязательно, «это, вероятно, внутренний интерфейс youtube.com и может сломаться в любое время»)

Вместо ссылки на другой инструмент, который делает это, вот ответ на вопрос «как это сделать»

Я использовал fiddler для проверки HTTP-трафика youtube.com, и есть ответ от /api/timedtext, который содержит информацию о закрытой подписи в виде XML.

Кажется, что ответ такой:

    <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 - это слово we've, а во время 0+780 - это слово got, а во время 2280+810 - это слово 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"
2 голосов
/ 14 ноября 2017

Выберите Open Transcript из выпадающего списка ... справа от голоса вверх / вниз и поделитесь ссылками.

Откроется Transcript прокрутка с правой стороны.

Затем вы можете использовать Copy. Обратите внимание, что вы не можете использовать Select All, но вам нужно щелкнуть верхнюю строку, затем прокрутить вниз, используя большой палец прокрутки, а затем нажать Shift и щелкнуть последнюю строку.

Обратите внимание, что вы также можете искать в этом тексте, используя обычный поиск по веб-странице.

2 голосов
/ 20 апреля 2015

С YouTube можно загрузить потоковые субтитры с помощью KeepSubs DownSub .

Вы можете выбрать из Автоматической расшифровки или предоставленных автором титров. Он также предлагает возможность автоматического перевода английских субтитров на другие языки с помощью Google Translate.

0 голосов
/ 15 июня 2018

Я просто сделал это легко вручную, открыв стенограмму в начале видео, щелкнув левой кнопкой мыши и перетащив маркер времени 00:00 с нажатой клавишей Shift на несколько строк в начале.

Затем я продвинул видео ближе к концу. Когда видео остановилось, я щелкнул конец последнего предложения, удерживая клавишу Shift еще раз. С помощью CTRL-C я скопировал текст в буфер обмена и вставил его в редактор.

Готово! * * 1005

Предупреждение: убедитесь, что RDP-Windows не использует общий буфер обмена или программное обеспечение, такое как Teamviewer, запущено одновременно, так как эта процедура переполнит их буферы, когда копируется большое количество текста.

...