Загрузка автоматически сгенерированных транскрипций YouTube


25

Есть ли способ загрузить автоматически сгенерированные транскрипции YouTube без загрузки видео?

Я хотел бы проверить доклады TED, но у меня ограниченная пропускная способность и я хотел бы экспортировать автоматизированные стенограммы (также известные как субтитры или закрытые титры).


Кто-нибудь знает способ сделать это для видео с автоматически транскрибируемыми субтитрами?
kenwarner

Связанный (для не сгенерированных автоматически субтитров): webapps.stackexchange.com/questions/25072/…
Механическая улитка

Также здесь ответили: stackoverflow.com/questions/9611397/…
Tin Man

Есть ли новости по этому поводу?
Лев,

Ответы:


8

Используйте функцию «Инспектор сети» в отладчике сценариев вашего браузера и найдите второй запрос к странице временного текста после включения транскрибированных субтитров, а затем просто скопируйте все эти запросы в адресную строку, чтобы загрузить их в собственном формате YouTube xml.

Чтобы получить версию SRT, запустите этот код в консоли отладчика для этой страницы XML:

function makeTimeline (time) {
    var string, time_array = [], milliseconds = Math.round(time % 1 * 1000).toString();

    while (3 > milliseconds.length) {
        milliseconds = '0' + milliseconds;
    }

    time_array.push(Math.floor(time / (60 * 60)));
    time_array.push(Math.floor((time - (time_array[0] * 60 * 60)) / 60));
    time_array.push(Math.floor(time - ((time_array[1] * 60) + (time_array[0] * 60 * 60))));

    for (var i = 0, il = time_array.length; i < il; i++) {
        string = '' + time_array[i];
        if (1 === string.length) {
            time_array[i] = '0' + string;
        }
    }
    return time_array.join(':') + ',' + milliseconds;
};

function returnSRT (data) {
    var caption, previous_start, start, end, temp, captions = data.getElementsByTagName('text'), srt_output = '';

    for (var i = 0, il = captions.length; i < il; i++) {
        caption = captions[i];
        start = +caption.getAttribute('start');

        if (0 <= previous_start) {
            temp = captions[i - 1].textContent.replace(/</g, '&lt;').replace(/>/g, '&gt;');
            srt_output += i + '\n' + makeTimeline(previous_start) + ' --> ' + makeTimeline(start) + '\n' + temp + '\n\n';
            previous_start = -1;
        }

        if ( end = +caption.getAttribute('dur'))
            end = start + end;
        else {
            if (captions[i + 1]) {
                previous_start = start;
                continue;
            }
        }

        temp = caption.textContent.replace(/</g, '&lt;').replace(/>/g, '&gt;');
        srt_output += i + '\n' + makeTimeline(start) + ' --> ' + makeTimeline(end) + '\n' + temp + '\n\n';
    };
    return srt_output;
}

returnSRT(document.documentElement)

Также здесь есть версия скрипта букмарклет:

javascript:(function(){function%20makeTimeline(time)%7Bvar%20string%2Ctime_array%3D%5B%5D%2Cmilliseconds%3DMath.round(time%251*1000).toString()%3Bwhile(3%3Emilliseconds.length)%7Bmilliseconds%3D'0'%2Bmilliseconds%3B%7Dtime_array.push(Math.floor(time%2F(60*60)))%3Btime_array.push(Math.floor((time-(time_array%5B0%5D*60*60))%2F60))%3Btime_array.push(Math.floor(time-((time_array%5B1%5D*60)%2B(time_array%5B0%5D*60*60))))%3Bfor(var%20i%3D0%2Cil%3Dtime_array.length%3Bi%3Cil%3Bi%2B%2B)%7Bstring%3D''%2Btime_array%5Bi%5D%3Bif(1%3D%3D%3Dstring.length)%7Btime_array%5Bi%5D%3D'0'%2Bstring%3B%7D%7Dreturn%20time_array.join('%3A')%2B'%2C'%2Bmilliseconds%3B%7D%3Bfunction%20returnSRT(data)%7Bvar%20caption%2Cprevious_start%2Cstart%2Cend%2Ctemp%2Ccaptions%3Ddata.getElementsByTagName('text')%2Csrt_output%3D''%3Bfor(var%20i%3D0%2Cil%3Dcaptions.length%3Bi%3Cil%3Bi%2B%2B)%7Bcaption%3Dcaptions%5Bi%5D%3Bstart%3D%2Bcaption.getAttribute('start')%3Bif(0%3C%3Dprevious_start)%7Btemp%3Dcaptions%5Bi-1%5D.textContent.replace(%2F%3C%2Fg%2C'%26lt%3B').replace(%2F%3E%2Fg%2C'%26gt%3B')%3Bsrt_output%2B%3Di%2B'%5Cn'%2BmakeTimeline(previous_start)%2B'%20--%3E%20'%2BmakeTimeline(start)%2B'%5Cn'%2Btemp%2B'%5Cn%5Cn'%3Bprevious_start%3D-1%3B%7Dif(end%3D%2Bcaption.getAttribute('dur'))end%3Dstart%2Bend%3Belse%7Bif(captions%5Bi%2B1%5D)%7Bprevious_start%3Dstart%3Bcontinue%3B%7D%7Dtemp%3Dcaption.textContent.replace(%2F%3C%2Fg%2C'%26lt%3B').replace(%2F%3E%2Fg%2C'%26gt%3B')%3Bsrt_output%2B%3Di%2B'%5Cn'%2BmakeTimeline(start)%2B'%20--%3E%20'%2BmakeTimeline(end)%2B'%5Cn'%2Btemp%2B'%5Cn%5Cn'%3B%7D%3Breturn%20srt_output%3B%7Dwindow.location.href%3D'data%3Atext%2Fplain%3Bbase64%2C'%2Bbtoa(returnSRT(document.documentElement))})();

6

Есть несколько способов извлечь субтитры из видео на YouTube -

Указав язык и VideoId в этом универсальном URL - http://www.youtube.com/api/timedtext?lang={LANG}&v={VIDEOID}вы можете получить .xmlфайл с субтитрами на нужном языке для выбранного видео.

Чтобы избавиться от тегов в этом файле и просто получить расшифровку текста , вот что вам нужно сделать:

  • Откройте Microsoft Excel
  • Скопируйте и вставьте субтитры в одну ячейку
  • Нажмите Ctrl+H
  • На вкладке замены введите <*> в текстовом поле «Найти что», оставьте поле «Заменить на» пустым и нажмите Replace All. Поисковое выражение удалит все теги в исходном тексте.

Кроме того, существует инструмент с открытым исходным кодом под названием Google2SRT, который одним щелчком загружает все доступные подпрограммы из видео YouTube и преобразует их в.srt формат, чтобы его можно было использовать в медиаплеерах, таких как VLC Media Player.

Обновление: Ted.com теперь предоставляет стенограммы переговоров на своем сайте.


Общий URL не работает. Я вхожу, http://video.google.com/timedtext?lang=english&v=b11AXknrsEIно это не работает. Кроме того, посещение инструментов разработчика не помогает. Там есть тонны ресурсов, и ни один из них не говорит timedtext.
61897

Неважно, я нашел это с помощью инструментов разработчика. Все еще не могу заставить общий URL работать, хотя. Это было бы самой легкой вещью.
61897

Попробуйте youtube.com/api/timedtext?lang= {LANG} & v = {VIDEOID}
mvark

Я должен делать что-то не так. Для этого видео я ввожу это, но он загружает пустую страницу. Я попытался изменить englishк enи engно делает то же самое.
61897

Похоже, что субтитры можно получить только в том случае, если подписи транскрибируются вручную, т.е. не генерируются автоматически. Ссылка на видео, которой вы поделились, имеет только автоматические подписи.
mvark



0

Если это ваше собственное видео, вы можете скачать субтитры из видео-менеджера. Перейти к:

Менеджер видео >> Редактировать (на нужном видео) >> Подписи >> (Нажмите на трек, который вы хотите скачать) >> Действия (раскрывающийся список)

На момент написания статьи доступно три типа файлов:

  • .vtt
  • .srt
  • .sbv

Они по-разному используются в разных приложениях, но очень похожи. СТО, пожалуй, самый распространенный.

В противном случае, если это не ваше видео, лучший способ (единственный метод) - получить файл XML из инструментов разработчика.

Используя Google Chrome в этом примере, перейдите к видео и выполните следующие действия:

  1. Приостановить видео Подождите, пока оно не заиграет, если есть реклама.
  2. Нажмите F12 на клавиатуре. Это открывает инструменты разработчика. Возможно, вам придется нажать на пустое место на странице, чтобы видео не было активным.
  3. Нажмите на вкладку Сеть в Инструментах разработчика.
  4. Нажмите на значок расшифровки прямо под видео. Два элемента появятся на вкладке Сеть в Инструментах разработчика.
  5. Оба элемента озаглавлены timedtext?плюс куча переменных. Второй, как правило, тот, который вы хотите. Это начинается так:
    <transcript> <text start="4.14" dur="3.049">my name is doctor john rush</text> <text start="7.189" dur="3.731">I'm the CEO and president</text>

Этот XML-файл полезен, если вы хотите использовать стенограмму на веб-странице. Кроме этого, я не думаю, что вы можете использовать его так же, как вы используете файл SRT. Если вы хорошо разбираетесь в программировании, вы можете легко написать программу, которая преобразует ее в SRT. Я написал свою собственную программу на C #, которая извлекает данные для другой цели, и это заняло менее двух часов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.