网络/本地上传 视频使用canvas获取封面

1.难点:没整过,什么第一帧啊啥的

2.知识点:使用canvas获取

1.网络视频

  let videoUrl = "你的网络地址";
  // 创建 video 元素 要把video放在网页上,并且还得在可视区内,所以加个定位脱离文档流且加个透明度藏起来
  const videoElement = document.createElement('video');
  videoElement.src = videoUrl;
  videoElement.style.position = 'fixed';
  videoElement.style.zIndex = -122;
  videoElement.style.opacity = 0;
  let body = document.querySelector('body');
  body.appendChild(videoElement);
  // videoElement.crossOrigin = 'anonymous'; // 可能跨域

  // 监听视频事件
  videoElement.addEventListener('loadedmetadata', () => {
    // 获取视频的宽高
    const videoWidth = videoElement.videoWidth;
    const videoHeight = videoElement.videoHeight;

    // 获取 canvas 元素并设置宽高
    const canvas = document.createElement('canvas');
    canvas.width = videoWidth;
    canvas.height = videoHeight;
    
    // 获取 canvas 的绘图上下文
    const ctx = canvas.getContext('2d');
    
    // 将视频的第一帧绘制到 canvas 上
    setTimeout(() => {
      ctx.drawImage(videoElement, 0, 0, videoWidth, videoHeight);
      body.appendChild(canvas);
    }, 100);
  });

2.本地上传的

<body>
  <input type="file" id="video-file" accept="video/*" />
</body>

<script>
  const videoFileInput = document.getElementById('video-file');
  const body = document.querySelector('body');
  videoFileInput.addEventListener('change', (event) => {
    const videoFile = event.target.files[0];
    // 在这里对视频文件进行处理
    processVideoFile(videoFile);
  });
  function processVideoFile(videoFile) {
    // 创建一个 video 元素
    const videoElement = document.createElement('video');

    // 监听 video 元素的 'loadedmetadata' 事件
    videoElement.addEventListener('loadedmetadata', () => {
      // 设置视频时间为 0 秒,获取第一帧
      videoElement.currentTime = 0;

      // 创建一个 canvas 元素
      const canvas = document.createElement('canvas');
      canvas.width = videoElement.videoWidth;
      canvas.height = videoElement.videoHeight;

      // 获取 canvas 的绘图上下文
      const ctx = canvas.getContext('2d');

      // 将视频的第一帧绘制到 canvas 上
      setTimeout(() => {
        ctx.drawImage(videoElement, 0, 0, canvas.width, canvas.height);
        // ctx.drawImage(videoElement, 0, 0, videoWidth, videoHeight);
        body.appendChild(canvas);
      }, 100);
    });

    // 设置视频源为用户选择的文件
    videoElement.src = URL.createObjectURL(videoFile);
  }
</script>

3.结语

有什么问题欢迎私信,评论,回复不及时可以加wx「LJY_980408」,共同学习

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸喵小宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值