首页 > 其他分享 >h5 canvas 视频透明度抠图,视频需要一个灰度通道副本表示透明度

h5 canvas 视频透明度抠图,视频需要一个灰度通道副本表示透明度

时间:2024-01-31 20:12:12浏览次数:27  
标签:function 视频 self 透明度 width video c2 灰度

视频透明度抠图,视频需要一个灰度通道副本表示透明度

目前抖音等直播平台的礼物特效就是这个方法处理的

 

<!DOCTYPE html>
<html>
  <head>
   <meta charset="UTF-8">
    <title>视频灰度通道抠图,视频包含灰度值表示透明的副本</title>
    <style>
     html, body {
	   ::-webkit-scrollbar {
          display: none;
         };
        background:rgba(0,0,0, 0); 
		
      }   

      div {
        padding:0px;
        margin: 0px;
      }
	  
	  #c1 {
	    opacity: 0.001; 
		position:absolute;
		left:0;
		top:0;
		z-index:0;
      }
     #c2 {
	    opacity: 1;
		position:absolute;
		left:0;
		top:0;
		z-index:3;
		
      }
	  
	  
	  
    </style>
  </head>

 <body style="background:url(bg.jpg)">
 
 <div   style="position:absolute;top:80px;left:0px;z-index:0;opacity:0.001">
 <video width="555" height="777"
    id="video" 
    src="media/789.dll"
    controls="true"
    crossorigin="anonymous"   autoplay muted/>
</div> 

<canvas id="c1" width="1440" height="1280"></canvas>
<canvas id="c2" width="720"  height="1280"></canvas>

<input type='button'  value="---change role---"  style=" height:58px;position:absolute;top:122px;left:0px;z-index:99;"
	  onclick='setRole(805)'></input>
	  
	
  <script>
  
  const tolerance = 5;
  var roleId=1;
  
  function setRole(id){
   var video = document.getElementById("video");
   video.src='media/'+id+'.dll?'+new Date().getTime();
    processor.c2.style.opacity=1;
  // video.play();
   //idle();
   
  }
  
  function hideLayer()
  {
  
	 processor.c2.style.opacity=0;
	
  }

 
  
  let processor = {
    timerCallback: function() {
      if (this.video.paused || this.video.ended) {
	    console.log("video.ended");
		 this.c2.style.opacity=0;
        return;
      }
      this.computeFrame();
      let self = this;
      setTimeout(function () {
          self.timerCallback();
        }, 0);
    },
  
    doLoad: function() {
      this.video = document.getElementById("video");
      this.c1 = document.getElementById("c1");
      this.ctx1 = this.c1.getContext("2d", { willReadFrequently: true });
      this.c2 = document.getElementById("c2");
      this.ctx2 = this.c2.getContext("2d", { willReadFrequently: true });
      let self = this;
      this.video.addEventListener("play", function() {
          self.width = self.video.videoWidth ;
          self.height = self.video.videoHeight;
		  self.c2.style.width= self.width / 2;
		  self.c1.style.width= self.width;
		  console.log("w=" + self.video.videoWidth);
		  
          self.timerCallback();
        }, false);
    },
  
    computeFrame: function() {
	  if(this.width<=0){
	    console.log("width:"+this.width);
	   return;
	  }
      this.ctx1.drawImage(this.video, 0, 0, this.width, this.height);
      let  frameOpcity= this.ctx1.getImageData(this.width / 2, 0, this.width / 2, this.height);
	  let frame = this.ctx1.getImageData(0, 0, this.width / 2, this.height);
	  
       let l = frame.data.length / 4;
  
      for (let i = 0; i < l; i++) {
        let r = frame.data[i * 4 + 0];
        let g = frame.data[i * 4 + 1];
        let b = frame.data[i * 4 + 2];
		let a= (r+ g+ b) / 3;
	    frameOpcity.data[i * 4 + 3] = a;
		
		}
		
      this.ctx2.putImageData(frameOpcity, 0, 0);
      return;
    
  }
}
  
document.addEventListener("DOMContentLoaded", () => {
  processor.doLoad();
});



  </script>
  
  
  
  
  </body>
</html>

  

标签:function,视频,self,透明度,width,video,c2,灰度
From: https://www.cnblogs.com/wgscd/p/17999997

相关文章

  • 摄像头监控系统/视频监控云平台EasyCVR接入单兵设备后如何配置移动规矩
    视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体控可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器......
  • lux 下载 bilibili 视频
    废话不多说直接上项目:https://github.com/iawia002/lux使用前先将ffmpge加入到系统变量中,方便lux调用,用于视频合并lux也加入系统变量,方便随时调用分析视频:lux-i-ccookies.txt-phttps://www.bilibili.com/xxxxlux-i-ccookies.txt"https://www.bilibili.com/x......
  • 【专题】2023年直播、短视频行业报告汇总PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=35077原文出处:拓端数据部落公众号中国直播电商行业正在经历蓬勃发展的时期,各大互联网平台之间的竞争日益激烈,而直播电商已成为品牌营销的常态。随着直播电商的崛起,对品牌提供了全新的产品营销和特惠促销渠道,同时也作为新产品生产和推广的媒体发布......
  • FFmpeg和Monibuka拉取rtsp(大华摄像头)视频流时未进行URLCode编码导致提示404等报错
    场景Monibucav4(开源流媒体服务器)在Windows上搭建rtmp服务器并实现拉取rtsp视频流以及转换flv播放:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/132474126Nginx搭建RTMP服务器+FFmpeg实现海康威视摄像头预览:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/articl......
  • VideoCrafter2:腾讯AI如何用少量数据生成更清晰视频
    引言去年10月,腾讯发布了VideoCrafter1模型,引起了广泛关注。短短3个月后,腾讯AI实验室再次创新,推出了VideoCrafter2模型。这一次,他们克服了高质量视频扩散模型的数据限制,仅使用有限数据就实现了显著改进,既保留了良好的动态效果,又大幅提升了视频质量。VideoCrafter2模型概述VideoCraft......
  • TSINGSEE青犀视频智慧电梯管理平台,执行精准管理、提升乘梯安全
    一、方案背景随着城市化进程的不断加快,我国已经成为全球最大的电梯生产和消费市场,电梯也成为人们日常生活中不可或缺的一部分。随着电梯数量的激增,电梯老龄化,维保数据不透明,物业管理成本高,政府监管难度大等问题引起的电梯安全事故频发。满足电梯行业不断提高的安全性和可靠性要求......
  • FFmpeg音视频格式转换命令
    FFmpeg音视频格式转换命令命令的用处它可以转换音频,视频的格式,例如将.mp4转为.avi;将.mp3转为.wav。并且在转换时可以指定转换的帧率,比特率,分辨率,指定编解码器等等等等操作。命令的格式ffmpeg-i[输入文件名][参数][输出文件名]输入文件名要转换的文件,因为加了-i,所以可以......
  • Django - admin 表单编辑页面,增加自定义功能,前端上传视频到oss
    #背景:可以在admin编辑页面原有基础上,增加一些可定制的功能,如:在本地上传图片到oss,减少服务器的带宽压力,下面就以此为例。示例图:  一。models.py#video可以直接用字符串存储,因为最终里面只有有一串oss的视频路径classNews(models.Model):OSS_URL='https://xxxx......
  • 视频号的互动类型、引流与变现
    视频号的互动类型:1、引导型互动:影响搜索排名的关键在于账号发布的视频数、点赞数和评论数。通过在动态内容中使用引导性话语或提问,可以激发粉丝的互动积极性,增加评论和点赞的几率。2、主动与评论用户互动:当用户评论了你的视频/图文时,挑选优质评论进行回复,以增加粉丝粘性。主动回复......
  • 视频汇聚平台智能边缘分析一体机算法分析人员吸烟告警
    在这个科技日新月异的时代,安全和健康已经成为了我们生活中不可忽视的话题。而在众多安全防范措施中,智能边缘分析一体机的出现,无疑为我们的生命财产安全增添了一份强有力的保障。今天,我要讲述的是一个关于智慧与安全的故事,它发生在智能边缘分析一体机算法分析平台上,一个能够精准检测......