Get an image from the video
Pure JS way with scale support:
/**
* Takes a screenshot from video.
* @param videoEl {Element} Video element
* @param scale {Number} Screenshot scale (default = 1)
* @returns {Element} Screenshot image element
*/
function getScreenshot(videoEl, scale) {
scale = scale || 1;
const canvas = document.createElement("canvas");
canvas.width = videoEl.clientWidth * scale;
canvas.height = videoEl.clientHeight * scale;
canvas.getContext('2d').drawImage(videoEl, 0, 0, canvas.width, canvas.height);
const image = new Image()
image.src = canvas.toDataURL();
return image;
}
This can be done via canvas
. Let's say you have a video
<video id="video" controls="controls">
....
</video>
You can do the following:
const video = document.getElementById("video");
const canvas = document.createElement("canvas");
// scale the canvas accordingly
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
// draw the video at that frame
canvas.getContext('2d')
.drawImage(video, 0, 0, canvas.width, canvas.height);
// convert it to a usable data URL
const dataURL = canvas.toDataURL();
You can then do whatever you want with dataURL
, such as displaying it as an image:
var img = document.createElement("img");
img.src = dataURL;
Inspiration drawn from odetocode