有没有一种方法可以下载自动生成的YouTube转录而不下载视频?

我想看一下TED的演讲,但我的带宽有限,想导出自动抄本(也可能是字幕或隐藏式字幕)。

评论

有人知道对带有自动转录字幕的视频执行此操作的方法吗?

相关(对于非自动生成的字幕):webapps.stackexchange.com/questions/25072/…

在这里也回答了:stackoverflow.com/questions/9611397/…

有什么消息吗?

#1 楼

使用浏览器的脚本调试器的“网络检查器”功能,启用转录字幕后,在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)


这也是脚本的书签版本:

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


#2 楼

有几种方法可从YouTube视频中提取字幕-

通过在此通用网址中指定语言和VideoId-http://www.youtube.com/api/timedtext?lang={LANG}&v={VIDEOID}您可以获得一个.xml文件,其中包含所选字幕所需语言的字幕视频。

要摆脱该文件内的标记并仅获得纯文本记录,请执行以下操作:


打开Microsoft Excel
将字幕复制粘贴到一个单元格中
按Ctrl + H

在“查找内容”文本框中的替换选项卡中键入<*>并保留“替换”与“文本框为空白,然后单击全部替换。搜索表达式将删除原始文本中的所有标签。或者,有一个名为Google2SRT的开源工具,可一键下载YouTube视频中的所有可用字幕,并将其转换为.srt格式,因此可以在VLC Media Player之类的媒体播放器中使用。

更新:Ted.com现在在其网站上提供了谈话的笔录。

评论


通用网址似乎无效。我输入了http://video.google.com/timedtext?lang=english&v=b11AXknrsEI,但是它不起作用。同样,使用开发人员工具也无济于事。那里有无数资源,但没有人说timedtext。

–61897
2014年2月27日23:21

没关系,我确实通过开发工具找到了它。虽然仍然无法获得通用网址。那将是最简单的事情。

–61897
2014-2-27在23:34

试试youtube.com/api/timedtext?lang={LANG}&v={VIDEOID}

–mvark
2014年3月17日14:39

我一定做错了什么。对于此视频,我输入了该视频,但它会加载一个空白页面。我曾尝试将英语更改为en和eng,但是它做同样的事情。

–61897
2014年3月17日16:06

看起来只有在字幕是手动转录(即不是自动生成)的情况下才能提取字幕。您共享的视频链接只有自动字幕。

–mvark
2014年3月17日在18:38

#3 楼

我认为该用户脚本应该对您有用:

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

评论


谢谢,但这似乎不允许下载自动转录的字幕

– Casebash
2010年7月9日在23:06

#4 楼

如果是您自己的视频,则可以从视频管理器中下载字幕。转到:

视频管理器>>编辑(在您想要的视频上)>>字幕>>(单击要下载的曲目)>>操作(下拉框)

在撰写本文时,有三种文件类型可用:


.vtt
.srt
.sbv



否则,如果不是您的视频,最好的方法(唯一方法)是从Developer工具获取xml文件。

在此示例中使用Google Chrome浏览器,然后导航至视频,然后执行以下步骤:


暂停视频。等待广告播放。
将F12推入键盘。这将打开开发人员工具。您可能需要单击页面上的空白区域,以使视频不起作用。
单击开发人员工具中的“网络”选项卡。
单击视频下方的字幕图标。开发人员工具的“网络”选项卡中将出现两个项目。
两个项目的名称均为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#程序,该程序出于不同的目的提取数据,并且花费了不到两个小时的时间。

#5 楼

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

评论


答案不只是指向外部站点的链接。请添加解决方案。

– fuxia
2014年2月3日23:30