首页 > 其他分享 >canvas 捕获视频帧

canvas 捕获视频帧

时间:2024-04-16 19:11:26浏览次数:30  
标签:视频 canvas const img src 捕获 video document

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>捕获视频帧</title>
    <style>
      * {
        box-sizing: border-box;
      }
      video,
      canvas {
        width: 360px;
        outline: 1px solid red;
      }
      img {
        width: 100px;
      }
      .list {
        display: flex;
        flex-wrap: wrap;
        gap: 10px;
      }
    </style>
  </head>
  <body>
    <div class="list"></div>
    <hr />
    <script>
      init();
      async function init() {
        const list = document.querySelector('.list');
        for (let i = 0; i < 60; i++) {
          const frame = await captureFrame(i);
          const img = document.createElement('img');
          img.src = frame.src;
          list.appendChild(img);
        }
      }

      // captureFrame()
      function captureFrame(time = 0) {
        return new Promise((resolve) => {
          const video = document.createElement('video');
          const canvas = document.createElement('canvas');
          const ctx = canvas.getContext('2d');

          video.currentTime = time;
          video.muted = true;
          video.autoplay = true;

          video.addEventListener('canplay', () => {
            console.log(' => ', video.videoWidth, video.videoHeight);
            canvas.width = video.videoWidth * devicePixelRatio;
            canvas.height = video.videoHeight * devicePixelRatio;

            ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
            canvas.toBlob(
              (blob) => {
                const src = URL.createObjectURL(blob);
                resolve({ src, blob });
              },
              'image/png',
              1
            );
          });
          video.src = './frag_bunny.mp4';
        });

        // document.body.appendChild(video);
        // document.body.appendChild(canvas);
      }
    </script>
  </body>
</html>

标签:视频,canvas,const,img,src,捕获,video,document
From: https://www.cnblogs.com/chlai/p/18138988

相关文章

  • 【视频】R语言支持向量回归SVR预测水位实例讲解|附代码数据
    全文链接:https://tecdat.cn/?p=35914原文出处:拓端数据部落公众号分析师:MiaoqiaoWang当我们面对样本需要建立相应模型时,使用传统统计方法建立模型需要大量的样本数据,只有在样本量足够大时,该模型才具有一定的可靠性,而实际实验中,不一定每次实验都拥有足够大的样本,甚至是小样本,这......
  • 视频汇聚/安防视频监控云平台EasyCVR云端录像播放与下载的接口调用方法
    视频汇聚/安防视频监控云平台EasyCVR支持多协议接入、可分发多格式的视频流,平台支持高清视频的接入、管理、共享,支持7*24小时不间断监控。视频监控管理平台EasyCVR可提供实时远程视频监控、录像、回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云......
  • 使用 ffmpeg 为视频文件添加封面
    全程使用CHATGPT4提供帮助通常而言,电脑上的资源管理器会使用视频的第一帧来作为缩略图,如果视频文件中有封面存在,则会使用封面作为文件缩略图(Windows自带的资源管理器是这样,具体要看资源管理器的实现)与GPT4沟通后,发现可以使用ffmpeg为视频添加封面。原理是为文件添加一......
  • bilibili视频下载
    bilibili视频下载:  you-get-download.py #!/usr/bin/python-8#-*-coding:utf-8-*-#CreatedbyiFantasticon2020/8/7#用于视频下载(B站等)importsys,os#fromyou_getimportcommonasyou_get#导入you-getp库importyou_get#导入you-getp库path="shanggui......
  • MoneyPrinterTurbo-利用AI大模型,一键生成视频
    地址https://github.com/harry0703/MoneyPrinterTurboWindows百度网盘:https://pan.baidu.com/s/1bpGjgQVE5sADZRn3A6F87w?pwd=xt16提取码:xt16下载后,建议先双击执行update.bat更新到最新代码,然后双击start.bat启动Web界面我这里用的源码安装1:创建虚拟环境gitclo......
  • WPF基础:在Canvas上绘制图形
    Canvas介绍Canvas是WPF(WindowsPresentationFoundation)中的一种面板控件,用于在XAML中布置子元素。它提供了绝对定位的能力,允许元素在自由的二维空间中放置。Canvas上的子元素可以通过指定绝对位置(Left和Top属性)来放置,也可以使用附加属性来指定相对于Canvas的位置。Canvas对于需......
  • 异常捕获列表字典推导式
    【一】什么是异常异常是程序运行时可能发生的错误或意外情况。在Python中,异常是一种对象,表示程序执行期间发生的错误。当出现异常时,程序的正常流程会被中断,而是跳转到异常处理流程。【二】异常分类在Python中,异常分为两类:内建异常(Built-inExceptions):由Python内部定义的......
  • Java使用javacv处理视频文件过程记录
    最近接到一个需求是将.mp4/.m4v文件体积进行压缩,我使用javacv中的FFmpegFrameGrabber、FFmpegFrameFilter、FFmpegFrameRecorder简单的实现视频帧的抓取、过滤、录制与输出。性能暂未验证。文章对这次的过程进行记录。1.jdk的选择mcr.microsoft.com/java/jdk:8u222-zulu-cento......
  • 视频汇聚/安防监控平台EasyCVR调试pprof接口信息泄露如何处理?
    EasyCVR视频融合平台基于云边端架构,可支持海量视频汇聚管理,能提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、智能分析等视频服务。平台兼容性强,支持多协议、多类型设备接入,包括:国标GB/T28181协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SD......
  • Canvas图形编辑器-数据结构与History(undo/redo)
    Canvas图形编辑器-数据结构与History(undo/redo)这是作为社区老给我推Canvas,于是我也学习Canvas做了个简历编辑器的后续内容,主要是介绍了对数据结构的设计以及History能力的实现。在线编辑:https://windrunnermax.github.io/CanvasEditor开源地址:https://github.com/Wind......