ดาวน์โหลดการถอดความ YouTube ที่สร้างขึ้นอัตโนมัติ


25

มีวิธีในการดาวน์โหลดการถอดความ YouTube ที่สร้างโดยอัตโนมัติโดยไม่ต้องดาวน์โหลดวิดีโอหรือไม่?

ฉันต้องการตรวจสอบการเจรจา TED แต่ฉันมีแบนด์วิดท์ จำกัด และต้องการส่งออกการถอดเสียงอัตโนมัติ (หรืออาจเรียกว่าคำบรรยายหรือคำบรรยายใต้ภาพ)


ใครรู้วิธีการทำเช่นนี้สำหรับวิดีโอที่มีคำบรรยายถ่ายทอดอัตโนมัติ?
kenwarner

ที่เกี่ยวข้อง (สำหรับคำบรรยายที่ไม่ได้สร้างขึ้นโดยอัตโนมัติ): webapps.stackexchange.com/questions/25072/…
หอยทากเชิงกล

ยังตอบที่นี่: stackoverflow.com/questions/9611397/…
Tin Man

มีข่าวเกี่ยวกับเรื่องนี้ไหม?
Leo

คำตอบ:


8

ใช้ฟังก์ชั่น "Network inspector" ของดีบักเกอร์สคริปต์ของเบราว์เซอร์และค้นหาคำขอที่สองไปยังหน้าtimedtextหลังจากเปิดใช้งานคำบรรยายที่คัดลอกแล้วเพียงคัดลอกคำขอทั้งหมดนั้นไปยังแถบที่อยู่เพื่อดาวน์โหลดในรูปแบบดั้งเดิมของ 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)

นอกจากนี้ที่นี่เป็นเวอร์ชัน bookmarklet ของสคริปต์:

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

สิ่งเหล่านี้มีการใช้งานที่แตกต่างกันในแอพพลิเคชันที่ต่างกัน SRT น่าจะเป็นเรื่องธรรมดาที่สุด

มิฉะนั้นหากไม่ใช่วิดีโอของคุณวิธีที่ดีที่สุด (วิธีเดียวเท่านั้น) คือรับไฟล์ 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 # ของฉันเองที่ดึงข้อมูลเพื่อวัตถุประสงค์ที่แตกต่างกันและใช้เวลาน้อยกว่าสองชั่วโมง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.