HTML 5 currentTime准确性

Dan*_*iel 6 javascript video html5 ffmpeg

我正在开发一个项目,我们使用视频元素的currentTime属性中的值来使用ffmpeg在服务器后端上执行处理.我遇到过一个问题,即视频元素似乎报告的时间代码与ffmpeg需要访问视频中正确点的时间代码略有不同.

所以例如在Firefox中如果currentTime属性报告当前视频时间是26.83我可能会发现我真正想要的帧在26.72结束,所以如果我使用时间在服务器上使用ffmpeg提取帧我得到下一帧而不是当前的框架.

在视频的不同部分和不同的视频中,偏移量似乎略有不同.但是在Firefox中,偏移量通常接近十分之一秒.在chrome中,currentTime实际上似乎是提前或正确的currentTime约为5百分之一秒.在IE中找出偏移量更加困难,因为当我输入不同的时间代码来查找帧变化的确切时间码时,帧移位的位置似乎会发生变化.

我很确定ffmpeg使用的时间是正确的时间.它似乎与其他视频编辑软件如adobe premier更加一致.

关于什么可能导致这种行为的任何想法?

JS获取currentTime:

AVideo.prototype.getCurrentTime = function()
{
   return this.videoElement[0].currentTime;
};
Run Code Online (Sandbox Code Playgroud)

产生的ffmpeg命令:

ffmpeg -y -i '/tmp/myVideo.mov' -vframes 1 -ss 2.4871 -f image2   -y '/tmp/myFrame.jpg' 2>&1
Run Code Online (Sandbox Code Playgroud)

Mic*_*ick 8

你受到每个浏览器或播放器实现的支配,你也处于相当棘手的领域,因为视频中的时间很复杂,你可能会看到多个不同的时间被讨论.

一些例子是:

  • DTS - 解码时间戳,即特定帧应被解码的时间
  • PTS - 演示时间戳,应显示特定帧的时间.这很可能是你感兴趣的那个.
  • SMPTE - 媒体中使用的传统时间戳.这里有一个链接到在线视频的好例子:http://allensarkisyan.github.io/VideoFrameDocs/

从更高级别的角度来看,视频通常会设置一组"每秒帧数",尽管这有时可以变化以进一步混淆事物.即使它是恒定的,通常也很难提前计算它,所以如果你真的知道它(例如视频的元数据)是有利的.

假设常量fps,那么首先要理解的是,对于给定的帧速率,比如25 fps,您没有足够的帧来将时间戳精确地设置为一秒的两个小数位.

换句话说,假设视频在00:00:00.00开始,那么理论上第一帧将在00:00:00.00,第二帧在00:00:00.00 + 1/25秒 - > 00:00: 00.04,下一帧00:00:00.08等

因此,如果您要求它寻求定位00:00:00.06,我们可以立即看到玩家有问题,因为它必须在最接近的两个帧00:00:00.04和00:00:00.08之间进行选择.在最坏的情况下,例如当电影中的场景正在改变时,这些看起来可能是完全不同的帧.

可能是"帧精确"视频播放器对您更有用 - 即如果您在某个地方暂停视频,那么知道该地点的确切帧数可能会让您在进行ffmpeg操作时更好地对齐.

有一个好的,如果稍微陈旧的BBC博客文章在这里:http://www.bbc.co.uk/blogs/bbcinternet/2011/02/frame_accurate_video_in_html5.html和上面的SMPTE视频链接可能会给你一些东西给你与...合作.

帧精确播放器的其他一些有用的参考: