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)
你受到每个浏览器或播放器实现的支配,你也处于相当棘手的领域,因为视频中的时间很复杂,你可能会看到多个不同的时间被讨论.
一些例子是:
从更高级别的角度来看,视频通常会设置一组"每秒帧数",尽管这有时可以变化以进一步混淆事物.即使它是恒定的,通常也很难提前计算它,所以如果你真的知道它(例如视频的元数据)是有利的.
假设常量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视频链接可能会给你一些东西给你与...合作.
帧精确播放器的其他一些有用的参考: