Mengunduh transkripsi YouTube yang dibuat secara otomatis

25

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).

Casebash
sumber
Adakah yang tahu cara melakukan ini untuk video dengan terjemahan terjemahan otomatis?
kenwarner
Terkait (untuk subtitle non-otomatis): webapps.stackexchange.com/questions/25072/…
Mekanik keong
juga menjawab di sini: stackoverflow.com/questions/9611397/…
Tin Man
Apakah ada berita tentang ini?
Leo

Jawaban:

8

Gunakan "Jaringan Inspektur" fungsi script debugger browser Anda dan menemukan permintaan kedua untuk timedtext halaman setelah mengaktifkan subtitle ditranskrip kemudian copy semua bahwa permintaan untuk addressbar untuk men-download dalam format xml YouTube asli.

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

Ada beberapa cara untuk mengekstrak subtitle dari video YouTube -

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

Untuk 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, lalu klik Replace All. Ekspresi pencarian akan menghapus semua tag dalam teks asli.

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

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

mvark
sumber
URL generik tampaknya tidak berfungsi. Saya masuk http://video.google.com/timedtext?lang=english&v=b11AXknrsEItetapi tidak berhasil. Juga, pergi ke alat pengembang tidak membantu. Ada banyak sumber daya di sana dan tidak satupun dari mereka mengatakan teks waktu.
61897
Nevermind, saya memang menemukannya melalui alat dev. Masih tidak dapat membuat url umum berfungsi. Itu akan menjadi hal yang paling mudah.
61897
Coba youtube.com/api/timedtext?lang= {LANG} & v = {VIDEOID}
mvark
Saya pasti melakukan sesuatu yang salah. Untuk video ini saya masukkan ini tetapi memuat halaman kosong. Saya telah mencoba mengubah englishke endan engtetapi melakukan hal yang sama.
61897
Sepertinya subtitle hanya dapat diambil jika teksnya ditranskripsi secara manual yaitu tidak dibuat secara otomatis. Tautan video yang Anda bagikan hanya memiliki teks otomatis.
mvark
1

Saya pikir ini skrip pengguna harus bekerja untuk Anda:

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

Alex Andronov
sumber
2
Terima kasih, tapi sepertinya itu tidak memungkinkan pengunduhan teks yang ditranskripsikan secara otomatis
Casebash
0

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

Manajer Video >> 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 diberi judul timedtext?plus 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.

61897
sumber