【Canvas】使用画布绘制动画录制成MP4视频解决方案

这篇具有很好参考价值的文章主要介绍了【Canvas】使用画布绘制动画录制成MP4视频解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

电脑浏览器上是可以将Canvas绘制的动画录制成视频的,实现一键生成视频动画分享,让视频制作变得更容易更快捷,这里将实现过程讲一下。

准备

建议在谷歌浏览器上测试

  • 熟悉HTML,Canvas,JavaScript知识即可

录制视频

部分浏览器上可以使用MediaRecorder类,来录制视频,如下代码,检查是否支持

if(!MediaRecorder){
	alert('当前浏览器不支持录制视频');
	return;
}

从document中找到的canvas标签元素,画布canvas传给createRecorder()方法中,代码如下

<html>
	<body>
		<canvas id="canvas"></canvas>
		<script>
			window.onload = function() {
				const canvas = document.getElementById('canvas');
				const context = canvas.getContext('2d');
				const recorder = createRecorder(canvas);
				//...
				console.log('init', { canvas, context, recorder })
			}
		</script>
	</body>
</html>

第一种,录制成默认视频的方法,代码如下

createRecorder(canvas){
	let stream = canvas.captureStream();
	const mimeType = 'video/webm';
	let recorder = new MediaRecorder(stream, { mimeType:mimeType });
	const data = []
	recorder.ondataavailable = function(event){
		if(event?.data.size) data.push(event.data);
	}
	recorder.onstop = () => {
		let url = URL.createObjectURL(new Blob(data, { type:mimeType  }));
		this.videoSrc = url;
	}
	return recorder;
},

这里生成的是webm格式视频文件,通用浏览器都支持

另一种,录制成编码为h264视频的方法,代码如下

createRecorder(canvas){
	let stream = canvas.captureStream();
	let recorder = new MediaRecorder(stream, { mimeType:'video/webm;codecs=h264' });
	const data = []
	recorder.ondataavailable = function(event){
		if(event?.data.size) data.push(event.data);
	}
	recorder.onstop = () => {
		let url = URL.createObjectURL(new Blob(data, { type:'video/webm' }));
		this.videoSrc = url;
	}
	recoder.onerror = (err) => console.error(err)
	return recorder;
},

其中配置的mimeType,以下的可选择,其它浏览器好像不支持,只有谷歌Chrome浏览器支持

  • “video/webm”
  • “video/webm;codecs=vp8”
  • “video/webm;codecs=vp9”
  • “video/webm;codecs=h264”
  • “video/x-matroska;codecs=avc1”

生成视频

可将代码改成以下,可以生成mp4文件

let url = URL.createObjectURL(new Blob(data, { type:'video/mp4' }));

生成的mp4视频文件,经测试,部分播放器播放此mp4视频会出现掉帧问题,不能调播放进度,这样生成的mp4视频是有问题的,

最好是直接生成默认的webm视频,通过工具来转换成mp4视频,

  • 可以看文章【NodeJs】使用ffmpeg将视频webm转换为mp4
  • 把配置mimeType设置成video/webm;codecs=h264这样转换快一些

调用方法createRecorder(canvas),然后开始录制,定时到了就停止录制,代码如下

//...
const recorder = this.createRecorder(canvas);
//定时10s
let endTime = 10000;
//开始录制
recorder.start();
setTimeout(()=>{
	recorder.stop()
	//this.closeTimer();
},endTime);

//开始canvas动画...

录制停止后,通过方法createObjectURL()来访问生成的视频videoSrc,通过标签video直接播放

<video :src="videoSrc" />

创建一个a标签,模拟点击按钮可下载视频,代码如下

onClickDownload(){
	let a = document.createElement('a');
	a.setAttribute('href', this.videoSrc);
	a.setAttribute('download', '');
	a.style.display='none';
	document.body.appendChild(a);
	a.click();
	document.body.removeChild(a);
},

完善功能

目前录制视频还没有声音,需要的话,可以借助专业的视频编辑工具给其配音,
可以把声音文件作为素材加入视频的时间轴中来,实现视频播放有声音

兼容问题

有些浏览器可能不支持WebRTC录制功能,使用浏览器建议录制通用编码为"video/webm"类型,使用其它编码视频录制可能会出现转码出错或兼容问题
canvas录屏,Canvas画布绘图,javascript,音视频,前端,录制视频,MediaRecorder文章来源地址https://www.toymoban.com/news/detail-618822.html

到了这里,关于【Canvas】使用画布绘制动画录制成MP4视频解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android画布Canvas drawPath绘制跟随手指移动的圆,Kotlin

                      Android SurfaceView简例-CSDN博客 文章浏览阅读2.3k次。Android SurfaceView简例Android中各的SurfaceView和View有很大的不同,两者应用场景不同。大多数View能做的事情SurfaceView也可以,但是SurfaceView效率更高。Android的View绘制过程由Android系统控制,刷新机制开发者比较难

    2024年02月03日
    浏览(44)
  • 微信小程序canvas画布绘制base64图片并保存图片到相册中

    WXML部分: 样式可以根据自己需求自行调整 canvas绘制成图片部分: 这就将图片绘制出来了。 首先获取用户相册权限。 保存功能:

    2024年02月13日
    浏览(44)
  • Unity UGUI的Canvas(画布)组件的介绍及使用

    Canvas(画布)是Unity UGUI系统中的一个重要组件,用于在屏幕上绘制UI元素。它是UI元素的容器,可以包含各种UI元素,如按钮、文本、图像等。Canvas组件提供了一种方便的方式来管理和渲染UI元素。 Canvas组件通过渲染器将UI元素绘制到屏幕上。它使用层级结构来管理UI元素的显

    2024年02月08日
    浏览(76)
  • 微信小程序使用canvas画布生成二维码海报分享图片(完整示例代码)

    canvas.js //获取应用实例 const app = getApp() Page({ /** 页面的初始数据 */ data: { // canvas _width: 0, //手机屏宽 _heigth: 0,//手机屏高 swiperHeight: 300,//主图图片高度 canvasType: false,//canvas是否显示 loadImagePath: ‘’,//下载的图片 imageUrl: ‘https://cos.myfaka.com/car/service/1.jpg’, //主图网络路径 codeU

    2024年04月12日
    浏览(99)
  • canvas 自定义画布,在画布上增加(边框 图片 文字 )

    先说下我的功能需求: 通过画布,自定义一个区域大小,在这个区域内:添加背景图片、图中图叠加、画内外边框、设置文字(文字的字体和大小颜色) 效果图 背景图片就是鸣人和雏田,右下角的属于图中图叠加效果,左下和右下都是分别画的两个区域框 不需要用到上传图

    2024年02月05日
    浏览(39)
  • 画布canvas

    canvas是HTML5重要元素,不需要外部插件支持,为我们提供了强大的图形处理功能,常用于移动端web的开发。canvas是一个标签在body中直接书写即可,且在css内部样式中不能修改画布的宽度,高度。 1.获取画布:var canvas=document.querySelector(\\\'canvas\\\') 2.获取画笔 :var ctx=canvas.getContext

    2023年04月11日
    浏览(49)
  • 【小程序】Canvas 画布分享海报

    成品效果图 可以通过切换下面图片形成不同的海报背景分享图

    2024年02月14日
    浏览(37)
  • HTML5 Canvas(画布)

    canvas标签定义图形,比如图表和其他图像,你必须用脚本来绘制图形。 在画布上( Canvas )画一个共红色矩形,渐变矩形,彩色矩形,和一些彩色文字。 HTML5canvas元素用于图形绘制,通过脚本(通常是 Javascript)来完成。 canvas标签是图形容器,必须使用脚来绘制图形。 你可以

    2024年02月14日
    浏览(45)
  • canvas实现鼠标滚轮滚动缩放画布

    canvas实现鼠标滚轮滚动缩放画布效果

    2024年02月04日
    浏览(49)
  • 微信小程序使用canvas绘制网络图片,使用canvas将图片变成圆形

    以上的写法 会造成某些图标无法绘制上去, 解决方法是在网络图片中不断嵌套,先绘制大图片,再绘制小图片的顺序 网上说使用先下载到本地,再使用img.src加载,我尝试过还是不行 长用在海报,需要将用户的头像画到canvas图片上,如: 其原理就是在图片上面放一个圆

    2024年02月13日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包