HTML 5 当前时间精度
Posted
技术标签:
【中文标题】HTML 5 当前时间精度【英文标题】:HTML 5 currentTime accuracy 【发布时间】:2015-11-25 21:45:06 【问题描述】:我正在处理一个项目,我们使用视频元素的 currentTime 属性中的值来使用 ffmpeg 在服务器后端执行处理。我遇到了一个问题,视频元素似乎报告的时间码与 ffmpeg 访问视频中正确点所需的时间码略有不同。
因此,例如在 Firefox 中,如果 currentTime 属性报告当前视频时间为 26.83,我可能会发现我真正想要的帧在 26.72 结束,所以如果我使用时间在服务器上使用 ffmpeg 提取帧,我得到下一帧而不是当前帧。
偏移量在视频的不同部分和不同的视频中似乎略有不同。但在 Firefox 中,偏移量通常接近十分之一秒。在 chrome 中,currentTime 实际上似乎提前或正确的 currentTime 大约百分之五秒。在 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
【问题讨论】:
【参考方案1】:您在这里受每个浏览器或播放器实施的支配,而且您还处于一个相当棘手的领域,因为视频中的时间很复杂,您可能会看到多个不同的时间被讨论。
一些例子是:
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 博客文章,虽然有点旧
帧精确播放器的一些其他有用参考:
https://***.com/a/24829337/334402【讨论】:
阅读一些关于帧精确播放器的 cmets,看起来他们也偶尔会偏离一帧。看来这真的归结为您的开场白,我们受制于浏览器。似乎当前的浏览器并没有产生我在项目中真正希望的那种时间码准确性。以上是关于HTML 5 当前时间精度的主要内容,如果未能解决你的问题,请参考以下文章