YouTube在直接URL和嵌入视频中删除了#t开始时间支持



最近,可以使用#t=2m0s#t=120设置直接链接的开始时间:

http://www.youtube.com/watch?v=Fk2bUvrv-Uc#t=2m30s

以及嵌入视频:

<iframe width="420" height="315" 
src="http://www.youtube.com/embed/Fk2bUvrv-Uc#t=2m30s" 
frameborder="0" allowfullscreen></iframe>

现在,YouTube似乎放弃了对开始时间的支持,以上内容不再有效。我现在如何引用具有特定开始时间的视频?

嵌入视频

看起来现在使用了一个不同的参数start=<number of seconds>(请参阅本博客和文档)。

示例:

<iframe width="420" height="315" frameborder="0" allowfullscreen
        src="http://www.youtube.com/embed/Nc9xq-TVyHI?start=110&end=119"></iframe>

直接链接

对于直接链路,只需将#替换为&:就足够了

http://www.youtube.com/watch?v=Fk2bUvrv-Uc&t=2m30s

您可以使用&t=而不是#t=

YouTube放弃了对嵌入视频的启动时间支持。现在,我们需要以太根据新的API在几秒钟内直接使用start=N&end=M参数,或者编写一些额外的代码,将旧的#t=(n)m(n)s表示法转换为新的兼容API的样式。

我能够根据开始和结束来制作视频片段,但确切的代码需要如下:

start=x&end=y

其中x是以秒计的开始时间,y是以秒为单位的结束时间

如果"?"不在场,它不起作用。此外,代码需要直接放在URL后面,没有任何空格,否则就不起作用。

我用JQuery插件用这种方法制作了大量视频。我已经对插件进行了调整,以便您可以继续使用(n)m(n)s表示法。您可以很容易地更改它,从URL中获取#t值,而不是我存储它的data属性。

(function( $ ) {    
    $.fn.videoChapters = function(iframeID) {
        if(typeof window.orig_video === 'undefined') {
            window.orig_video = [];
        }
        window.orig_video[iframeID] = $('#'+iframeID).clone();
        var chapterContainer = this;
        $(this).find('a').on('click', function(e) {
                e.preventDefault();
                $('#'+iframeID).remove();
                $(chapterContainer).prevAll('.video-iframe').first().find('h3').after(window.orig_video[iframeID]);
                var video = $('#'+iframeID);
                if(typeof window.video_source === 'undefined') {
                    window.video_source = [];
                }
                if(typeof window.video_source[iframeID] === 'undefined') {
                    window.video_source[iframeID] = $(video).attr('src');
                }
                /*  to use it with a normal anchor change this to something like the below, of course it will vary for URL
                 *  so it'd be better to use a regex, but I'll let someone else worry about that.
                 *
                 *   var str = $(e.target).attr('href').split('#t')[1];
                 *   var nstr = $(str).split("s")[0];
                 *   var mstr = $(nstr).split("m");
                 *   var min = Number(mstr[0]);
                 *   var sec = Number(mstr[1]);
                 *   
                 * */
                var seconds = $(e.target).data('seconds');
                /* youtube dropped old min/secs format, now we convert what's there to pure seconds */
                var splsec = seconds.split('m');
                var min = Number(splsec[0]);
                var sec = Number(splsec[1].split('s')[0]);
                min = min * 60;
                var total = min + sec; 
                var newSource = window.video_source[iframeID] + "?start="+total+"&autoplay=1&rel=0";
                $(video).attr('src', newSource);
        });
    };  
})( jQuery );

使用iframe嵌入代码的开始和结束时间在我的测试中不起作用。对我有效的是这个代码:

发件人:

http://www.youtube.com/embed/[VIDEOID]

收件人:

http://www.youtube.com/v/[视频]&start=[秒]&end=[秒]

<object width="640" height="385">
<param name="movie" value="http://www.youtube.com/v/[VIDEOID]&start=100&end=500" />
<param name="allowscriptaccess" value="always" />
<embed src="http://www.youtube.com/v/[VIDEOID]&start=100&end=500" type="application/x-shockwave-flash" allowscriptaccess="always" width="640" height="385" />
</object>

它似乎可以(再次?)使用#t=,至少对于直接URL是这样。声明的URL:https://www.youtube.com/watch?v=Fk2bUvrv-Uc#t=2m30s有效,即:跳到2分30秒。我在FF、Chrome和IE11上测试了这个。但使用&t=,&是常见的URL参数串联字符。

使用

/watch?v=<videoID>&t=<s>

带有

<videoID>=id of the video
<t>=number of seconds to skip

示例:

https://m.youtube.com/watch?t=58&v=9W35QxCZnK4

视频从58秒开始或

https://www.youtube.com/watch?t=120&v=9W35QxCZnK4

视频开始于2分钟

截至2023年7月,至少我注意到,谷歌youtube现在正在重写URL,其中包含&t=密钥对使用情况。

例如:https://www.youtube.com/watch?v=-zvszeudn98&t=1m2s

解析视频后,转换为:https://www.youtube.com/watch?v=-zvszeudn98&t=62s

不知道他们为什么这么做,只是为了甩掉那些不太擅长时间转换数学的观众。

相关内容

  • 没有找到相关文章

最新更新