本地上传视频获取封面,自动下载成图片( js 前端)

本方法是通过火狐或chrome浏览器的input上传视频后,获取文件路径,使用video播放视频。

使用h5的canvas画布来绘制封面,生成图片后,通过canvas的toDataURL将图片输出成图片流,然后在执行事件将图片流下载保存到本地。

保存下来的图片相对较大,如果是用于列表,可以通过 https://tinypng.com/进行图片压缩。

具体代码如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script src="./jquery-1.10.2.js"></script>
	</head>
	<body>
		<style>
			input {
				margin-bottom: 20px;
				height: 50px;
			}
			#video ,
			video {
				max-width: 100%;
			}
		</style>
		<h1>上传视频等待3秒后自动下载图片,下载完成后可继续上传视频。</h1>
		<p>注1:请使用火狐浏览器进行截图,因为火狐支持canvas的toDataURL方法。</p>
		<p>注2:上传视频格式以普通的mp4格式,不支持ts格式,建议以原转码文件来获取截图</p>
		<p>注3:图片下载后,请通过https://tinypng.com/该压缩图片网站进行压缩,每次可以压缩20张,然后重新下载压缩后的图片来用。</p>
		<p>注4:如果视频一开始是黑屏的,请上传后<strong>立即点击</strong>视频播放,防止所截封面是黑屏。(等待3秒就是用于此处)</p>
		<input id="file" name="file" type="file" value="" placeholder="点击上传" />
		<div id="imgSmallView" style="margin: 10px 0;color: red;font-size: 24px;">响应:<span>请选择视频</span></div>
		<div class="row">
			<div id="video" style="width: 100%;">
				<video src="" controls="controls"></video>
			</div>
		</div>
		<script>
			(function() {
				$('#file').on('change', function() {
					var files = this.files,
						video = $('#video').find('video'),
						videoURL = null,
						windowURL = window.URL || window.webkitURL;;
					if(files && files[0]) {

						videoURL = windowURL.createObjectURL(files[0]);
						$('#imgSmallView span').html('请等待图片下载');
//						$('#video').html('<video src="' + videoURL + '" controls="controls"></video>');
						$('#video video').attr('src', videoURL);
						$('#video video').trigger('click');
						setTimeout(function() {
							createIMG(files[0].name.split('.')[0]+'.png');
						}, 3500);
					}
				}).trigger('change');
				function createIMG(name) {
					var scale = 0.35,
						video = $('#video').find('video')[0],
					 	canvas = document.createElement("canvas");

					 	canvas.width = video.videoWidth * scale;
						canvas.height = video.videoHeight * scale;
						var flag = true;
						for(var flag = true; flag; ) {
							if(canvas.width > 400) {
								canvas.width *= 0.9;
								canvas.height *= 0.9;
							} else {
								flag = false;
							}
						}
						canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);
						saveImage(canvas, name);
				}
				function saveImage(_canvas, _name) {
					var image = _canvas.toDataURL('image/png').replace('image/png', 'image/octet-stream');
					saveFile(image, _name );
				}
				function saveFile(data, _name) {
					var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
					save_link.href = data;
					save_link.download = _name;
					var event = document.createEvent('MouseEvents');
					event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
					save_link.dispatchEvent(event);
					$('#imgSmallView span').html(_name + '图片已下载完成,请继续上传视频等待回应。')
				}
			})();
		</script>
	</body>
</html>

需要注意地方,于代码中已有提示。

要通过JavaScript获取本地视频封面,你可以使用微信小程序的API来实现。以下是一种可能的实现方式: 1. 在wxml文件中,添加一个video组件,并设置id和src属性,如下所示: ```html <video id="myVideo" src="{{videoSrc}}" poster="{{posterSrc}}"></video> ``` 其中,videoSrc是你要播放的视频路径,posterSrc是封面图片的路径。 2. 在对应的js文件中,使用wx.createVideoContext方法创建一个视频上下文对象,并通过该对象获取视频封面: ```javascript // 获取video组件的上下文对象 const videoContext = wx.createVideoContext('myVideo'); // 在视频加载完后,获取封面 videoContext.onCanplay(() => { // 获取视频封面 videoContext.seek(0); // 将视频跳转到0秒处 videoContext.onSeeked(() => { // 获取封面图片数据 wx.canvasToTempFilePath({ canvasId: 'myCanvas', // 使用一个canvas元素来绘制视频帧 x: 0, y: 0, width: 320, // 设置canvas的宽度和高度与视频尺寸保持一致 height: 240, destWidth: 320, destHeight: 240, success(res) { console.log(res.tempFilePath); // 输出封面图片的临时路径 }, fail(res) { console.error(res); } }); }); }); ``` 在这段代码中,我们首先使用wx.createVideoContext方法创建一个视频上下文对象,然后监听videoContext的onCanplay事件,在视频可以播放时触发。在onCanplay回调函数中,我们使用videoContext.seek方法将视频跳转到0秒处,并使用videoContext.onSeeked监听视频跳转完的事件。在onSeeked回调函数中,我们使用wx.canvasToTempFilePath方法将视频当前帧绘制到canvas上,并获取封面图片的临时路径。 注意:为了使用canvasToTempFilePath方法,你需要在wxml文件中添加一个canvas组件,并设置一个id属性,如下所示: ```html <canvas id="myCanvas" style="display: none;"></canvas> ``` 这段代码中,我们将canvas隐藏起来,不显示在页面上。 这样,通过以上代码,你就可以在微信小程序中获取本地视频封面了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值