<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>截取视频某一帧保存为图片</title>
<style>
</style>
</head>
<body>
<video class="real" width="1200" height="675" controls playsinline webkit-playsinline
controlslist="nodownload noremoteplayback">
<source src="" type="video/mp4" />
您的浏览器不支持H5视频播放。
</video>
<div>
<input type="file" id="file" name="" id="" accept="video/*">
</div>
<div>
<input type="text" id="url" placeholder="输入视频地址">
<button class="getCDN">加载视频</button>
</div>
<div>
<button class="save">保存图片</button>
</div>
</body>
</html>
<script>
const video = document.querySelector('video')
video.setAttribute('crossOrigin', 'anonymous')
let loaded = false
video.onplay = function (e) {
console.log(e, 'onplay')
}
video.onended = function (e) {
console.log(e, 'onended')
}
video.oncontextmenu = function (e) {
console.log(e, 'oncontextmenu')
}
video.ontimeupdate = function (e) {
// console.log(e.target.currentTime, 'ontimeupdate')
}
const area = document.querySelector('#file')
// 选择video
area.onchange = (e) => {
console.log(e)
var url = URL.createObjectURL(e.target.files[0]);
loaded = false
video.src = url
}
const ipt = document.querySelector('#url')
const get = document.querySelector('.getCDN')
get.onclick = function (e) {
if (!ipt.value) {
return alert('把视频链接写在左边输入框再点')
}
if (ipt.value === video.src) {
return alert('已经在播放了')
}
loaded = false
video.src = ipt.value
}
// 渲染完成
video.onloadeddata = function (e) {
loaded = true
}
const save = document.querySelector('.save')
save.onclick = function (e) {
if (!loaded) {
return alert('视频还没有加载完')
}
let canvas = document.createElement('canvas');
canvas.width = video.width;
canvas.height = video.height;
canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height); //绘制canvas
dataURL = canvas.toDataURL('image/jpeg'); //转换为base64
const a = document.createElement('a')
a.download = 'videoframe_' + video.currentTime.toString().replace('.', '') + '.jpeg'
a.target = '_blank'
a.href = dataURL
a.click()
}
</script>
效果图
操作方法:
- 选择本地的视频文件, 或是输入远程url地址后点击加载视频,
- 拉动进度条选择想要的画面
- 点击保存图片就可以将视频中画面保存为图片了