JS - 动态选择视频坐标
JS - dynamically selecting video coordinates
假设我有以下视频:
<video id ="vid" controls>
<source src="http://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4">
</video>
<script>
var vid = document.getElementById("vid");
var width = vid.videoWidth; //320
var height = vid.videoHeight; //176
</script>
现在,它的宽度和高度是320:176 - 它可以是任何东西。
现在,我想做的是说用户在视频上选择某个点,当他向左/向右/向上/向下移动时,一个正方形动态形成,覆盖用户选择的整个区域(通常当用户点击视频本身时,它会停止,在我们的例子中 - 不)。我希望看到广场。
它的工作原理就像您在 Windows Paint 中选择矩形一样。所以当他释放鼠标LM按钮(意味着正方形完成)时,一个新的 JS 对象由以下内容组成:宽度: X, 高度: Y, 顶部: Z, 左: S
所以,这个正方形应该指向特定的坐标, 本质上是一个正方形。
我只是想选择视频的精确片段。 对于初学者,我只需要那个正方形。
那么,我该怎么做呢?我需要操作画布吗?任何JS库?非常感谢您的时间。
以下是使用 html5 画布抓取视频帧的子矩形的快速入门。
视频元素可以是画布元素的图像源。要在画布上"播放"视频,您需要创建一个动画循环,并将当前视频帧连续绘制到画布上。有许多关于如何将视频绘制到画布上的教程 - 这是一个示例教程。
context.drawImage(vid,0,0);
侦听画布.鼠标关闭事件。然后暂停视频,让用户选择画布的矩形部分。使用 vid.pause
方法暂停视频。还要取消动画循环,以便画布显示视频中的静态帧。
vid.pause();
当视频暂停且画布为静态时,让用户使用鼠标绘制选择矩形。
// on mousemove ...
function draw(){
// refresh canvas by redrawing the paused video frame onto the canvas
ctx.drawImage(vid,0,0);
// stroke a rectangle based on the users starting & current mouse position
ctx.strokeRect(startX,startY,mouseX-startX,mouseY-startY);
}
在鼠标向上时,创建第二个画布并将用户选定的子图像绘制到第二个画布上。如果需要导出子图像,可以从第二个画布创建 img 元素。
示例代码和演示演示,演示如何让用户选择画布的矩形部分并将其导出到 img 元素。此演示中的画布显示静态图像。您将改为将视频元素绘制到画布上。
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
function reOffset(){
var BB=canvas.getBoundingClientRect();
offsetX=BB.left;
offsetY=BB.top;
}
var offsetX,offsetY;
reOffset();
window.onscroll=function(e){ reOffset(); }
window.onresize=function(e){ reOffset(); }
var isDown=false;
var startX,startY,mouseX,mouseY;
var img=new Image();
img.crossOrigin='anonymous';
img.onload=start;
img.src="https://dl.dropboxusercontent.com/u/139992952/stackoverflow/faces1.png";
function start(){
canvas.width=img.width;
canvas.height=img.height;
draw();
$("#canvas").mousedown(function(e){handleMouseDown(e);});
$("#canvas").mousemove(function(e){handleMouseMove(e);});
$("#canvas").mouseup(function(e){handleMouseUp(e);});
$("#canvas").mouseout(function(e){handleMouseOut(e);});
}
function draw(){
ctx.drawImage(img,0,0);
if(!isDown){return;}
ctx.strokeRect(startX,startY,mouseX-startX,mouseY-startY);
}
function capture(){
var c=document.createElement('canvas');
var cctx=c.getContext('2d');
var x=startX;
var y=startY;
var w=mouseX-startX;
var h=mouseY-startY;
c.width=w;
c.height=h;
cctx.drawImage(canvas,x,y,w,h,0,0,w,h);
var img=new Image();
document.body.appendChild(img);
img.src=c.toDataURL();
}
function handleMouseDown(e){
// tell the browser we're handling this event
e.preventDefault();
e.stopPropagation();
startX=parseInt(e.clientX-offsetX);
startY=parseInt(e.clientY-offsetY);
// Put your mousedown stuff here
isDown=true;
}
function handleMouseUp(e){
if(!isDown){return;}
// tell the browser we're handling this event
e.preventDefault();
e.stopPropagation();
mouseX=parseInt(e.clientX-offsetX);
mouseY=parseInt(e.clientY-offsetY);
// Put your mouseup stuff here
isDown=false;
// create a cropped image
capture();
}
function handleMouseOut(e){
isDown=false;
draw();
}
function handleMouseMove(e){
if(!isDown){return;}
// tell the browser we're handling this event
e.preventDefault();
e.stopPropagation();
mouseX=parseInt(e.clientX-offsetX);
mouseY=parseInt(e.clientY-offsetY);
draw();
}
body{ background-color: ivory; }
#canvas{border:1px solid red;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<h4>Drag to select an area. Release to create a clipped img.</h4>
<canvas id="canvas" width=300 height=300></canvas>
- EaseJS拖放;放下(动画CC)电影剪辑的鼠标坐标
- 视频HTML没有'无法在Internet Explorer 11上工作
- 播放当前视频时如何停止其他视频?JavaScript
- 使用Facebook live API创建实时视频对象时的隐私设置
- 如何在d3.js中返回路径的y坐标
- Brightcove获取/显示HTML中的当前视频标题和描述
- 在谷歌地图上获取事件的x,y坐标
- 通过ajax将坐标传递到php服务器端,并在处理后检索到javascript
- Twilio-显示所有连接参与者的远程参与者视频
- WebRTC视频聊天可以在FF中使用,但不能在Chrome中使用
- 是否可以使用iframe API在iOS浏览器上播放youtube视频
- 如何检查用户在html5视频播放器中观看了完整的视频
- Fullpage.js-视频+背景在同一部分
- html5视频中的Youtube类型注释
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 角度p2p视频聊天-远程流是黑视频
- tiltSlider播放/暂停视频元素(如果li有当前类)
- 如何在JS Leatflet绘图插件中获取圆的坐标
- 在视频元素上获取准确的鼠标坐标
- JS - 动态选择视频坐标