Как извлечь транскрипт с субтитрами из видео на YouTube?
Можно ли извлечь транскрипт с субтитрами из видео Youtube?
У нас есть более 200 веб-трансляций на YouTube, и каждый из них не менее одного часа. Youtube закрыл заголовок для всех видео, но, похоже, пользователи не могут его получить.
Я попробовал URL в этом блоге, но он не работает с нашими видео.
http://googlesystem.blogspot.com/2010/10/download-youtube-captions.html
Спасибо
7 ответов
В следующем документе говорится, что только владелец канала может сделать это через стандартный интерфейс 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/
Вот как получить стенограмму видео на YouTube (если доступно):
- Перейдите на YouTube и откройте видео по вашему выбору.
- Нажмите кнопку "Дополнительные действия" (3 горизонтальные точки), расположенную рядом с кнопкой "Поделиться".
- Нажмите "Открыть стенограмму"
Хотя синтаксис может быть немного глупым, это довольно хорошее решение.
Источник: http://ccm.net/faq/40644-youtube-how-to-get-the-transcript-of-a-video
Другой вариант заключается в использовании 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
Вы можете просматривать / копировать / скачивать временный кодированный XML-файл с субтитрами YouTube, открыв
http://video.google.com/timedtext?lang=[LANGUAGE]&v=[YOUTUBE VIDEO IDENTIFIER]
Например http://video.google.com/timedtext?lang=pt&v=WSVKbw7LC2w
ПРИМЕЧАНИЕ: этот метод не загружает автоматически сгенерированные субтитры, даже если вы правильно понимаете язык (возможно, есть специальный код для автоматически сгенерированных языков).
Существует бесплатный инструмент для Python под названием YouTube Transcript API.
Вы можете использовать его в скриптах или как инструмент командной строки:
pip install youtube_transcript_api
(Обязательно, "это, вероятно, внутренний интерфейс youtube.com и может сломаться в любое время")
Вместо ссылки на другой инструмент, который делает это, вот ответ на вопрос "как это сделать"
Я использовал fiddler для проверки HTTP-трафика youtube.com, и есть ответ от /api/timedtext
которая содержит информацию о закрытой подписи в виде XML.
Кажется, что ответ такой:
<p t="0" d="5430" w="1">
<s p="2" ac="136">we've</s>
<s t="780" ac="252"> got</s>
</p>
<p t="2280" d="7170" w="1">
<s ac="243">we'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"
С видео YouTube, обновленным по состоянию на июнь 2020 года, все очень просто
- выберите 3 точки рядом с кнопками "Нравится" / "Не нравится", чтобы открыть дополнительные параметры меню
- выберите "добавить переводы"
- выбрать язык
- при необходимости нажмите автогенерировать
- щелкните Действия> Загрузить
Вы получите и.sbv файл
Выберите Open Transcript
от ...
выпадающий справа от голоса вверх / вниз и делиться ссылками.
Это откроет Transcript
прокрутка div на правой стороне.
Вы можете использовать Copy
, Обратите внимание, что вы не можете использовать Select All
но нужно щелкнуть верхнюю строку, затем прокрутить вниз, используя большой палец прокрутки, а затем нажать Shift и щелкнуть последнюю строку.
Обратите внимание, что вы также можете искать в этом тексте, используя обычный поиск по веб-странице.
Я просто сделал это легко вручную, открыв стенограмму в начале видео, щелкнув левой кнопкой мыши и перетащив маркер времени 00:00 с нажатой клавишей Shift на несколько строк в начале.
Затем я продвинул видео ближе к концу. Когда видео остановилось, я щелкнул конец последнего предложения, удерживая клавишу Shift еще раз. С помощью CTRL-C я скопировал текст в буфер обмена и вставил его в редактор.
Готово!
Предостережение: Убедитесь, что RDP-Windows не использует общий буфер обмена или программное обеспечение, такое как Teamviewer, запущено одновременно, поскольку эта процедура переполнит их буферы, где копируется большое количество текста.