HTML 5 currentTime准确性

问题描述 投票:5回答:1

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

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

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

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

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

JS获取当前时间:

AVideo.prototype.getCurrentTime = function()
{
   return this.videoElement[0].currentTime;
};

产生的ffmpeg命令:

ffmpeg -y -i '/tmp/myVideo.mov' -vframes 1 -ss 2.4871 -f image2   -y '/tmp/myFrame.jpg' 2>&1
javascript html5 video ffmpeg
1个回答
6
投票

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

一些例子是:

  • 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视频链接可能会给你一些工作。

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

© www.soinside.com 2019 - 2024. All rights reserved.