Завантаження автоматично створених транскрипцій YouTube


25

Чи є спосіб завантажити автоматично створені транскрипції YouTube без завантаження відео?

Я хотів би перевірити TED-переговори, але я обмежений пропускною здатністю і хотів би експортувати автоматизовані стенограми (також можливо відомі як субтитри або закриті підписи).


хтось знає спосіб зробити це для відео з автоматично переписаними субтитрами?
kenwarner

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

також відповів тут: stackoverflow.com/questions/9611397/…
Tin Man

Чи є новини про це?
Лев

Відповіді:


8

Використовуйте функцію "Мережевий інспектор" налагоджувача скриптів браузера та знайдіть другий запит на сторінку з тимчасовим текстом після ввімкнення транскрибованих субтитрів, а потім просто скопіюйте всі запити на адресну панель, щоб завантажити їх у рідному форматі XML YouTube.

Щоб отримати версію 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але це не працює. Також не допомагає перейти на інструменти для розробників. Там є багато ресурсів, і жоден з них не говорить про часовий текст.
61897

Не маю на увазі, я знайшов це через інструменти розробки. Однак не вдається отримати загальний URL для роботи. Це було б найпростіше.
61897

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

Я мушу щось робити не так. Для цього відео я ввожу це, але воно завантажує порожню сторінку. Я спробував змінити englishдо enі engале робить те ж саме.
61897

Схоже, що субтитри можна отримати лише в тому випадку, якщо підписи переписані вручну, тобто не генеруються автоматично. Відеопосилання, яким ви поділилися, має лише автоматичні підписи.
mvark



0

Якщо це ваше власне відео, ви можете завантажити субтитри з відеоменеджера. Йти до:

Менеджер відео >> Редагувати (на потрібне відео) >> Підписи >> (Клацніть на доріжку, яку ви хочете завантажити) >> Дії (спадне поле)

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

  • .vtt
  • .srt
  • .sbv

Вони мають різні способи використання в різних програмах, але дуже схожі. ЗТО, мабуть, найпоширеніший.

В іншому випадку, якщо це не ваше відео, найкращим методом (єдиним методом) є отримання файлу xml з інструментів Developer.

Використовуючи 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.