Как извлечь субтитры из видео на YouTube?

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

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

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

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


person Minghui Yu    schedule 08.03.2012    source источник


Ответы (10)


В следующем документе говорится, что только владелец канала может сделать это через стандартный интерфейс 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/

person Peter Buchmann    schedule 13.06.2012
comment
Каждая ссылка в этом ответе устарела. С тех пор YouTube API 2.0 был заменен на API 3.0 и загружает субтитры в рамках этого API. стоимость квоты составляет примерно 200 единиц. Они не упоминают, как и кому распределяется эта квота, поэтому это решение не будет полезно большинству людей, которые просто хотят скачивать титры, а не восхищаться каким-то API. - person 7vujy0f0hy; 29.03.2017
comment
каким-то образом можно создать автоматическую транскрипцию через API Youtube V3? - person manish1706; 08.01.2018

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

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

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

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

person Will    schedule 01.02.2016
comment
Это именно то, что мне было нужно. Вы можете щелкнуть каждую подпись, чтобы перейти прямо к правой части видео. - person benshepherd; 29.11.2018
comment
КЛАССНО!!! Это гораздо лучшее решение, чем все хаки, предложенные во многих других подобных вопросах на SO, некоторые из них привели меня к всплывающему спаму, - person old-monk; 12.09.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

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| # 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')

Команда ниже загружает субтитры всех видео на канале. Когда есть ошибка, такая как Unable to extract video data, -i (--ignore-errors) заставляет youtube-dl пропускать видео вместо выхода с ошибкой.

youtube-dl -i --skip-download --write-auto-sub -o '%(upload_date)s.%(title)s.%(id)s.%(ext)s' https://www.youtube.com/channel/$channelid;for f in *.vtt;do sed '1,/^$/d' "$f"|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",$1}NR%8==3'>"${f%.vtt}";done

person nisetama    schedule 22.02.2019
comment
По состоянию на 2019 год это единственное рабочее решение. Я думаю, что загрузка видео с YouTube, и я предполагаю, что через прокси субтитры, является движущейся целью. Люди из youtube-dl — единственные, кто постоянно достигает отметки в возможности автоматической загрузки с YouTube, вероятно, потому, что они активно следят за тем, чтобы он продолжал работать. - person abetusk; 24.11.2019
comment
Спасибо за этот ответ, как мне распечатать упрощенный формат в текстовый файл или уценку? Я имею в виду, как изменить команду cap() для печати в файл, а не в терминале. - person Kim Stacks; 09.12.2019
comment
Если кто-то просматривает этот ответ, я спросил и получил ответ о том, как распечатать упрощенный формат в файл. См. stackoverflow. com/a/59244265/80353, как это сделать - person Kim Stacks; 10.12.2019
comment
Вот подробный скрипт bash для тех, кто хочет сохранить файл subs с относительным путем. Результат сохраняется в виде открытого текста, удаляя время, новые строки и другую разметку. stackoverflow.com/a/61296419/251938 - person Alex; 19.04.2020

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

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

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

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

person tony gil    schedule 27.04.2017
comment
По состоянию на май 2017 года это больше не работает (я предполагаю, что video.google.com больше не работает для API Youtube. Есть ли другой инструмент Google для извлечения подписей? - person OxC0FFEE; 24.05.2017
comment
Спасибо за наводку, НО... должно быть, вы столкнулись с той или иной проблемой. Это решение все еще работает, только что проверил его. Это может быть какой-то вариант форматирования (может быть, язык?). Разместите ссылку на видео, и я дважды проверю напрямую. - person tony gil; 25.05.2017
comment
Это работает для вашего примера @tonygil; однако не работает для... video.google.com/timedtext?lang= en&v=odPD-H0LMkc (youtu.be/odPD-H0LMkc) - person J. Win.; 20.10.2017
comment
@ Дж. Вон. у видео нет субтитров для скачивания. Плохое качество записи и очень специфический акцент (индийский субконтинент), вероятно, мешали гугл-скриптам получить транскрипцию. - person tony gil; 21.10.2017
comment
Я только что обнаружил кое-что: этот метод не загружает автоматически сгенерированные субтитры. - person tony gil; 22.10.2017
comment
Это не работает, например, video.google.com/timedtext?lang=pt&v= J_F5ssmvAqI У этого есть копия, и я могу прочитать стенограмму на YouTube. - person nilanjan; 24.10.2017
comment
@nilanjan Во-первых, у него НЕТ субтитров на ПОРТУГАЛЬСКОМ. вы указываете язык как ПОРТУГАЛЬСКИЙ (lang=pt). Во-вторых, указанное видео имеет только автогенерируемые субтитры, которые, как я писал в ответе, этот скрипт не скачивает. Попробуйте другое видео с загруженными субтитрами, и вы увидите, что оно работает. - person tony gil; 24.10.2017
comment
вам просто нужно добавить &track=asr в последнюю очередь в качестве параметра запроса. и это должно работать для субтитров с автотранскрипцией. - person manish1706; 03.01.2018

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

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

person Palimondo    schedule 20.04.2015
comment
Похоже, KeepSubs больше не существует. - person Marcus; 04.07.2016
comment
DownSub (downsub.com) является альтернативой KeepSub. Я использовал его только один раз (сегодня), и, похоже, он работал нормально. - person Mark Gavagan; 03.08.2016
comment
По состоянию на 19.02.17 DownSub продвигает вредоносное ПО: загружает взломанную версию установщика Flash. - person spring; 20.02.2017
comment
@NoGrabbing: Люди всегда говорят, что какой-то веб-сайт устанавливает какое-то вредоносное ПО, но никогда не говорят, как именно. Браузеры не позволяют устанавливать произвольное программное обеспечение на компьютеры пользователей, поэтому требуется объяснение. Даунсабом пользуюсь уже год. Где я могу найти эту «взломанную версию установщика Flash» на моем ПК? - person 7vujy0f0hy; 29.03.2017
comment
@NoGrabbing: я не могу доказать, что я не их «зазывала», но это не имеет значения . Ваша ссылка подтверждает то, что я сказал: «ваша безопасность не будет скомпрометирована, если вы не установите файл вручную». К вашей чести, вы сейчас показали, как они могут заразить рассеянного пользователя, и это очень полезная информация. Постараюсь реализовать что-то подобное на своем сайте. Спасибо и +1. - person 7vujy0f0hy; 29.03.2017
comment
@NoGrabbing: я хочу добавить, что заражение таким образом — это проблема пользователя, а не проблема веб-сайта. Нравственный долг каждого — учить людей безопасному поведению и эксплуатировать безрассудство тех, кто отказывается слушать. - person 7vujy0f0hy; 29.03.2017
comment
@NoGrabbing: Спасибо за приглашение, но я не охотник. - person 7vujy0f0hy; 30.03.2017
comment
На помощь приходит savesubs.com - person himanshuxd; 11.11.2019
comment
вредоносные сайты! держись подальше! - person Dexter; 05.05.2020
comment
веб-сайт «savesubs» работает довольно хорошо и не имеет кликбейта, как веб-сайт «downsub». - person the_RR; 09.01.2021

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

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

Используйте fiddler или средства разработки вашего браузера (например, Chrome) для проверки 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"
person Carl Walsh    schedule 17.10.2016
comment
Теперь это лучший ответ, если вам нужны ПОЛНЫЕ данные (кроме опции «Открыть расшифровку» в меню kabob ...). Просто вместо использования Fiddler вы можете просто использовать DevTools, встроенный в хром. В этом случае откройте его, затем перейдите на вкладку «Сеть» и в маленьком поле поиска просто введите timedtext. Затем вы можете щелкнуть правой кнопкой мыши и открыть этот URL-адрес на новой вкладке, и он предоставит XML-документ стенограммы с информацией о времени. - person chunk_split; 03.12.2020
comment
Спасибо @chunk_split, я отредактировал ответ, чтобы упомянуть об этом. Для этого не нужно настраивать HTTPS MITM :) - person Carl Walsh; 03.12.2020

Существует бесплатный инструмент для Python под названием API расшифровки YouTube.

Вы можете использовать его в скриптах или как инструмент командной строки:

pip install youtube_transcript_api
person Justin Meiners    schedule 02.08.2019
comment
Это был ответ, который наконец сработал для меня в 2021 году. - person Sam Carlton; 01.02.2021

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

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

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

person pcihy    schedule 16.06.2020

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

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

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

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

person PeterVermont    schedule 13.11.2017

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

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

Сделанный!

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

person Carey G. Butler    schedule 15.06.2018