Это на самом деле не так сложно сделать.
Сначала необходимо создать три элемента canvas, высота каждого из которых равна высоте видео, а ширина - треть ширины видео.
Внутри цикла, запускаемого, например, setInterval Вы можете рисовать определенные части исходного видео на каждом холсте, используя метод drawImage () .
Метод drawImage принимает несколько параметров - нам нужно 9 из них.
context.drawImage (source, sourceX, sourceY, sourceWidth, sourceHeight, targetX, targetY, targetWidth, targetHeight);
источник: видео
sourceX, sourceY, sourceWidth и sourceHeight: они определяют прямоугольную область источника, который мы хотим нарисовать на холсте. Так что для первого холста это будет левая треть видео.
targetX, targetY: они определяют координаты, в которых мы хотим нарисовать изображение - всегда 0,0
targetWidth: всегда будет треть видео
targetHeight: равен высоте видео
Вот пример:
var canvas;
var theVideo = document.getElementById("video");
var segment = theVideo.width / 3;
for (var a = 0; a < 3; a++) {
canvas = document.getElementById("canvas" + a)
canvas.width = segment;
canvas.height = document.getElementById("video").height;
}
function draw() {
for (var a = 0; a < 3; a++) {
document.getElementById("canvas" + a).getContext("2d").drawImage(theVideo, a * segment, 0, segment, theVideo.height, 0, 0, document.getElementById("canvas" + a).width, document.getElementById("canvas" + 0).height);
}
}
var interval = setInterval(draw, 20);
section {
float: left;
width: 100%
}
<video id="video" width="320" height="176" loop preload autoplay muted style="display:none">
<source src="https://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4">
</video>
<section>
<canvas id="canvas0"></canvas>
</section>
<section>
<canvas id="canvas1"></canvas>
</section>
<section>
<canvas id="canvas2"></canvas>
</section>