Как извлечь транскрипт с субтитрами из видео на 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

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

Вы можете скачать потоковые субтитры с YouTube с KeepSubs DownSub.

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

Существует бесплатный инструмент для 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&#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"

С видео YouTube, обновленным по состоянию на июнь 2020 года, все очень просто

  1. выберите 3 точки рядом с кнопками "Нравится" / "Не нравится", чтобы открыть дополнительные параметры меню
  2. выберите "добавить переводы"
  3. выбрать язык
  4. при необходимости нажмите автогенерировать
  5. щелкните Действия> Загрузить

Вы получите и.sbv файл

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

Это откроет Transcript прокрутка div на правой стороне.

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

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

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

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

Готово!

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

Другие вопросы по тегам