it-swarm.asia

Mengunduh transkripsi YouTube yang dibuat secara otomatis

Apakah ada cara untuk mengunduh transkripsi YouTube yang dibuat secara otomatis tanpa mengunduh video?

Saya ingin memeriksa pembicaraan TED, tetapi saya memiliki bandwidth terbatas dan ingin mengekspor transkrip otomatis (juga mungkin dikenal sebagai subtitle atau teks tertutup).

25
Casebash

Gunakan fungsi "Inspektur jaringan" debugger skrip browser Anda dan temukan permintaan kedua ke timedtext halaman setelah mengaktifkan subtitle yang ditranskripsi kemudian salin semua permintaan itu ke addressbar untuk mengunduhnya dalam format xml asli YouTube.

Untuk mendapatkan versi SRT jalankan kode ini di konsol debugger untuk halaman xml itu:

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)

Juga di sini adalah versi bookmarklet dari skrip:

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))})();
8
DitherSky

Ada beberapa cara untuk mengekstrak subtitle dari video YouTube -

Dengan menentukan bahasa dan VideoId dalam URL umum ini - http://www.youtube.com/api/timedtext?lang={LANG}&v={VIDEOID} Anda bisa mendapatkan file .xml yang berisi subtitle dalam bahasa yang diinginkan untuk video yang dipilih.

ntuk menghilangkan tag di dalam file itu dan hanya memiliki transkrip teks biasa , inilah yang harus Anda lakukan:

  • Buka Microsoft Excel
  • Salin tempel teks film di dalam satu sel
  • Tekan Ctrl+H
  • Di tab ganti ketik <*> di kotak teks "Temukan Apa" dan biarkan kotak teks "Ganti Dengan" kosong, dan klik Replace All. Ekspresi pencarian akan menghapus semua tag dalam teks asli.

Atau, ada alat open-source bernama Google2SRT yang mengunduh semua subs yang tersedia dari video YouTube dengan satu klik & mengonversinya menjadi format .srt sehingga dapat digunakan dalam pemutar media seperti VLC Media Player.

Pembaruan: Ted.com sekarang menyediakan transkrip pembicaraan di situsnya.

6
mvark

Saya pikir ini skrip pengguna harus bekerja untuk Anda:

http://userscripts.org/scripts/show/50003/

1
Alex Andronov

Google2SRT 0.6 mendukung ASR YouTube: http://sourceforge.net/projects/google2srt/

0
kom

Jika itu adalah video Anda sendiri, Anda dapat mengunduh subtitle dari pengelola video. Pergi ke:

Video Manager >> Edit (pada video yang Anda inginkan) >> Captions >> (Klik pada trek yang ingin Anda unduh) >> Actions (drop down box)

Pada saat penulisan, ada tiga jenis file yang tersedia:

  • .vtt
  • .srt
  • .sbv

Ini memiliki kegunaan yang berbeda dalam aplikasi yang berbeda, tetapi sangat mirip. SRT mungkin yang paling umum.

Kalau tidak, jika itu bukan video Anda, metode terbaik (hanya metode) adalah untuk mendapatkan file xml dari alat Pengembang.

Menggunakan Google Chrome dalam contoh ini, navigasikan ke video lalu ikuti langkah-langkah ini:

  1. Jeda video. Tunggu sampai diputar jika ada iklan.
  2. Tekan F12 pada keyboard Anda. Ini membuka alat pengembang. Anda mungkin harus mengklik ruang kosong di halaman agar video tidak aktif.
  3. Klik pada tab Jaringan di Alat Pengembang.
  4. Klik ikon transkrip tepat di bawah video. Dua item akan muncul di tab Jaringan di Alat Pengembang.
  5. Kedua item tersebut berjudul timedtext? ditambah banyak variabel. Yang kedua biasanya yang Anda inginkan. Dimulai seperti ini:
    <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>

File xml ini berguna jika Anda ingin menggunakan transkrip di halaman web. Selain itu, saya tidak berpikir Anda bisa menggunakannya dengan cara yang sama seperti Anda menggunakan file SRT. Jika Anda pandai pemrograman, Anda dapat dengan mudah menulis sebuah program yang akan mengubahnya menjadi SRT. Saya menulis program C # saya sendiri yang mengekstraksi data untuk tujuan yang berbeda dan butuh waktu kurang dari dua jam.

0
fredsbend