画布动画与视频时间同步
Canvas animation synchronized with video time
我们必须开发一个应用程序来绘制一些与视频同步的跟踪表示。因此,以体育为例,当球员A在视频中击中球时,画布的Ball
表示必须出现在球员A表示的旁边,就好像它真的击中了球一样。
这里的主要问题是我们已经完成了所有的跟踪,并且它伴随着(音调)位置坐标随时间,对于每个元素,像:7012000:00:23.335…
我的需要是能够在画布在那个位置(70,120)当视频到达00:00:23.335。
这是很多信息,所以我不能在每个timeupdate
上运行array.filter()
函数,因为它肯定会在过滤器完成之前播放下一帧。
我如何在Javascript上组织这些数据,使我能够在最近的实际时间访问元素的位置?
所以如果视频是在00:00:23.500,我可以很快得到位置x:70, y:120
,因为它是最接近那个时刻的。
My (wrong) pov
正如我已经说过的,我唯一的方法是使用一个包含所有数据的数组,并执行filter
(或循环),通过每个视频timeupdate
事件的所有数组搜索最近的点坐标:
var playerA_pts = [
{time: 23.330, x: 70, y:120},
{time: 23.790, x: 75, y: 121},
{time: 23.800, x: 76, y: 123},
...
]
然而,这种方法会有糟糕的性能,当视频在先进的时间…
我们得到的跟踪数据(它是外部的)不是恒定的帧率,所以我们可以在它们之间以不同的时间速率记录坐标元素。
提前感谢!
如果你的视频时间轴以秒为单位,那么尝试转换为基于帧的时间轴。
你的时间表应该如下
var timeline = {
"frame_20":{
x:70, y : 120
},
"frame_21":{
x:72, y : 135
},
"frame_22":{
x:75, y : 143
},
"frame_23":{
x:79, y : 150
}
}
。如果你的视频是24帧/秒,那么按以下公式计算帧数
var FRAME_RATE = 24;
var _frameNo = Math.floor( video.currentTime / (1/FRAME_RATE) );
on requestAnimationFrame检查视频当前时间,使用给定的公式将其转换为帧,并获得如下细节
var _newPos = timeline["frame_"+ _frameNo];
left = _newPos.x;
top = _newPos.y;
相关文章:
- 输入视频文件时获取视频持续时间
- 如何从某个时间开始预加载HTML5视频
- 如何使用javascript在嵌入式youtube视频上创建可点击的时间戳链接
- 在一天中的某个时间自动在我的网站上播放视频
- 生成由文件输入在特定时间选择的视频文件的缩略图/快照
- 限制 HTML5 视频当前时间
- 如何将HTML5视频快进或快退到某个时间点
- 播放Html5视频并在特定时间点暂停
- 如何在一定时间后暂停视频?video.js
- Node Webkit从avi文件路径获取视频持续时间
- 如何在HTML视频达到特定时间标记时触发事件
- YouTube V3 API——按持续时间过滤相关视频信息,不;似乎不起作用
- 通过带有jQuery的按钮跳到HTML5视频中的特定时间
- Javascript函数在视频时间更新时未触发
- HTML5视频时间更新事件未启动
- 带有视频时间的链接按钮
- 在视频时间更新时操作动态创建的内容
- HTML5,视频和Javascript:使用视频时间轴来控制页面行为
- 谷歌Chrome视频时间轴和音量条拖动
- 画布动画与视频时间同步