ऑटो जेनरेट किए गए YouTube ट्रांस्क्रिप्शन को डाउनलोड करना


25

क्या वीडियो डाउनलोड किए बिना स्वचालित रूप से उत्पन्न YouTube ट्रांस्लेशन डाउनलोड करने का कोई तरीका है?

मैं टेड वार्ता की जांच करना चाहूंगा, लेकिन मेरे पास बैंडविड्थ सीमित है और स्वचालित टेप (जो संभवतः उपशीर्षक या बंद कैप्शन के रूप में भी जाना जाता है) को निर्यात करना चाहते हैं।


किसी को भी स्वचालित रूप से प्रसारित उपशीर्षक के साथ वीडियो के लिए ऐसा करने का एक तरीका पता है?
किन्नर

संबंधित (गैर-ऑटो-जनरेट उपशीर्षक के लिए): webapps.stackexchange.com/questions/25072/…
मैकेनिकल घोंघा

यहाँ भी उत्तर दिया गया: stackoverflow.com/questions/9611397/…
टिन मैन

क्या इस बारे में कोई खबर है?
सिंह

जवाबों:


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 वीडियो से उपशीर्षक निकालने के कुछ तरीके हैं -

इस सामान्य URL में भाषा और VideoId को निर्दिष्ट करके - http://www.youtube.com/api/timedtext?lang={LANG}&v={VIDEOID}आप .xmlकिसी चुने हुए वीडियो के लिए वांछित भाषा में उपशीर्षक युक्त एक फ़ाइल प्राप्त कर सकते हैं ।

उस फ़ाइल के भीतर टैग से छुटकारा पाने के लिए और सिर्फ सादा-पाठ प्रतिलेख है , यहाँ आपको क्या करना है:

  • Microsoft Excel खोलें
  • उपशीर्षक को एक सेल के अंदर कॉपी पेस्ट करें
  • दबाएँ Ctrl+H
  • "खोजें क्या" टेक्स्टबॉक्स में बदलें टैब टाइप करें <*> और "बदलें" टेक्स्टबॉक्स को खाली छोड़ दें, और क्लिक करें Replace All । खोज अभिव्यक्ति मूल पाठ के भीतर सभी टैग को हटा देगा।

वैकल्पिक रूप से, Google2SRT नामक एक ओपन-सोर्स टूल है जो एक क्लिक के साथ YouTube वीडियो से सभी उपलब्ध उप डाउनलोड करता है और उन्हें .srtप्रारूप में रूपांतरित करता है ताकि इसे VLC मीडिया प्लेयर जैसे मीडिया खिलाड़ियों के भीतर उपयोग किया जा सके।

अद्यतन: Ted.com अब अपनी साइट पर वार्ता के टेप प्रदान करता है।


जेनेरिक URL काम नहीं करता है। मैं प्रवेश http://video.google.com/timedtext?lang=english&v=b11AXknrsEIकरता हूं लेकिन यह काम नहीं करता है। इसके अलावा, डेवलपर टूल में जाने से कोई मदद नहीं मिलती है। वहाँ संसाधनों के टन हैं और उनमें से कोई भी टाइमटेक्स्ट नहीं कहता है।
61897

कोई बात नहीं, मैंने इसे देव टूल्स के माध्यम से पाया। हालांकि अभी भी काम करने के लिए एक सामान्य यूआरएल नहीं मिल सकता है। यह सबसे आसान काम होगा।
61897


मुझसे कुछ गलत हो रहा होगा। इस वीडियो के लिए मैं में प्रवेश इस लेकिन यह एक रिक्त पृष्ठ लोड करता है। मैं बदलते कोशिश की है englishकरने के लिए enऔर eng, लेकिन यह एक ही बात करता है।
61897

ऐसा लगता है कि सबटाइटल केवल तभी प्राप्त किए जा सकते हैं जब कैप्शन मैन्युअल रूप से ट्रांसमिट किए गए हों अर्थात स्वचालित रूप से उत्पन्न न हों। आपके द्वारा साझा किए गए वीडियो लिंक में केवल स्वचालित कैप्शन हैं।
मेवार्क



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 में बदल देगा। मैंने अपना स्वयं का C # प्रोग्राम लिखा था जो एक अलग उद्देश्य के लिए डेटा को निकालता है और इसमें दो घंटे से भी कम समय लगता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.