我写了一个简单的脚本,从视频中取出一个帧并将其绘制到画布上。我的问题是视频和绘制图像之间的颜色会发生变化。
我把结果放在原文旁边,以便更容易看到。原来的是在左边。它似乎在Chrome浏览器btw上更加明显。我在OSX上做的所有测试。
这里有一个片段,左边是画布,右边是视频:
// Get our mask image
var canvas = document.querySelector(".canvas");
var video = document.querySelector(".video");
var ctx = canvas.getContext('2d');
function drawMaskedVideo() {
ctx.drawImage(video, 0, 0, video.videoWidth/2, video.videoHeight, 0,0, video.videoWidth/2, video.videoHeight);
}
requestAnimationFrame(function loop() {
drawMaskedVideo();
requestAnimationFrame(loop.bind(this));
});
html, body {
margin: 0 auto;
}
.video, .canvas {
width: 100%;
}
.canvas {
position: absolute;
top: 0;
left: 0;
}
<video class="video" autoplay="autoplay" muted="muted" preload="auto" loop="loop">
<source src="http://mazwai.com/system/posts/videos/000/000/214/original/finn-karstens_winter-wonderland-kiel.mp4" type="video/mp4">
</video>
<canvas class='canvas' width='1280' height='720'></canvas>
我想知道为什么会发生这种情况,是否有可能以跨浏览器的方式摆脱它?
这是我写的简单脚本:
let video = document.querySelector('#my-video') // .mp4 file used
let w = video.videoWidth;
let h = video.videoHeight;
let canvas = document.createElement('canvas');
canvas.width = w;
canvas.height = h;
let ctx = canvas.getContext('2d');
ctx.drawImage(video, 0, 0, w, h)
document.querySelector('.canvas-container').appendChild(canvas);
答案 0 :(得分:0)
解决方案可能就像将css filter
设置为视频元素一样简单:
.video {
-webkit-filter: contrast(100%);
}
我无法解释这个因为它被发现意外(玩你的演示并阅读相关答案),所以我把技术解释留给别人,让你现在有一些魔力。
任何足够先进的技术都与魔术无法区分。
- Arthur C. Clarke
// Get our mask image
var canvas = document.querySelector(".canvas");
var video = document.querySelector(".video");
var ctx = canvas.getContext('2d');
function drawMaskedVideo() {
ctx.drawImage(video, 0, 0, video.videoWidth/2, video.videoHeight, 0,0, video.videoWidth/2, video.videoHeight);
}
requestAnimationFrame(function loop() {
drawMaskedVideo();
requestAnimationFrame(loop.bind(this));
});
html, body {
margin: 0 auto;
}
.video, .canvas {
width: 100%;
}
.video {
-webkit-filter: contrast(100%);
}
.canvas {
position: absolute;
top: 0;
left: 0;
}
<video class="video" autoplay="autoplay" muted="muted" preload="auto" loop="loop">
<source src="http://mazwai.com/system/posts/videos/000/000/214/original/finn-karstens_winter-wonderland-kiel.mp4" type="video/mp4">
</video>
<canvas class='canvas' width='1280' height='720'></canvas>
注意:强> 在Macbook Pro(2,3 GHz Intel Core i5)上运行此功能,我看不出性能差异。在视频播放期间跟踪CPU,两个演示都在28%左右闲置。