js截取video视频某一帧做封面的简单案例(附完整代码)

 更新时间:2024年04月10日 10:40:53   作者:平淡才是真_6210  
最近碰到一个需求,要求获取video视频某一帧做封面图片,这里给大家总结下,这篇文章主要给大家介绍了关于js截取video视频某一帧做封面的简单案例,需要的朋友可以参考下

可以使用 canvas元素来截取视频某一帧并生成封面。

首先,在 video 标签上设置视频源地址和自动播放属性:

<video src="video.mp4" autoplay></video>

然后,在 canvas 标签上定义宽高和样式,并通过 JavaScript 获取视频元素和 canvas 元素:

<canvas width="640" height="360" style="display:none;"></canvas>

<script>
  const video = document.querySelector('video');
  const canvas = document.querySelector('canvas');
  const ctx = canvas.getContext('2d');
</script>

接着,定义一个函数来截取视频某一帧,并将其渲染到 canvas 上:

<script>
  function captureFrame() {
    ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
  }
</script>

在需要生成封面的地方调用该函数即可:

<button onclick="captureFrame()">生成封面</button>

最后,将 canvas 元素转换为图片元素并插入到页面中:

<script>
  function captureFrame() {
    ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
    const dataURL = canvas.toDataURL();
    const img = document.createElement('img');
    img.src = dataURL;
    document.body.appendChild(img);
  }
</script>

完整代码如下:

<video src="video.mp4" autoplay></video>
<canvas width="640" height="360" style="display:none;"></canvas>

<button onclick="captureFrame()">生成封面</button>

<script>
  const video = document.querySelector('video');
  const canvas = document.querySelector('canvas');
  const ctx = canvas.getContext('2d');

  function captureFrame() {
    ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
    const dataURL = canvas.toDataURL();
    const img = document.createElement('img');
    img.src = dataURL;
    document.body.appendChild(img);
  }
</script>

附:js截取视频第一帧作为封面

在vue的v-for循环中,直接video标签进行列表渲染时,滚动列表页面会很卡,所以最好以img标签渲染视频封面图,点击后再播放视频。

具体代码如下:

//取视频的第一帧作为封面
function cutPicture(item) {   //这里的item是列表的每一项
  let video = document.createElement("video");
  video.style = "position:fixed; top: 9999px;left:9999px;z-index:-9999";
  video.preload = "metadata";
  video.currentTime = 1; //截取的视频第一秒作为图片
  video.src = item.videoUrl;
  video.setAttribute("crossOrigin", "anonymous");
  video.width = 113;
  video.height = 75;
  document.body.appendChild(video);
  video.onloadeddata = function () {
    let canvas = document.createElement("canvas");
    canvas.width = 113;
    canvas.height = 75;
    canvas.getContext("2d").drawImage(video, 0, 0, video.clientWidth, video.clientHeight);
    var oGrayImg = canvas.toDataURL("image/jpeg");
    item.imgUrl = oGrayImg; //这里输出的imgUrl就是视频的封面图
    this.remove();
  };
  return item;
}

总结 

到此这篇关于js截取video视频某一帧做封面的文章就介绍到这了,更多相关js截取video视频帧做封面内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • ES6新特性之字符串的扩展实例分析

    ES6新特性之字符串的扩展实例分析

    这篇文章主要介绍了ES6新特性之字符串的扩展,结合实例形式对比分析了ES5与ES6字符串函数以及模板字符串相关操作技巧,需要的朋友可以参考下
    2017-04-04
  • JavaScript检查弹出窗口是否被阻拦的方法技巧

    JavaScript检查弹出窗口是否被阻拦的方法技巧

    这篇文章主要介绍了JavaScript检查弹出窗口是否被阻拦的方法技巧,本文用于检测window.open弹出的窗口是否被阻拦,需要的朋友可以参考下
    2015-03-03
  • Bootstrap Table从零开始

    Bootstrap Table从零开始

    Bootstrap Table从零开始,这篇文章主要介绍了Bootstrap Table的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • JavaScript字符串_动力节点Java学院整理

    JavaScript字符串_动力节点Java学院整理

    JavaScript中的字符串就是用''或""括起来的字符表示。下面通过本文给大家介绍JavaScript字符串的相关知识,感兴趣的朋友一起看看吧
    2017-06-06
  • Bootstrap每天必学之导航条(二)

    Bootstrap每天必学之导航条(二)

    Bootstrap每天必学之导航条,进一步向大家讲解了导航条养殖,以及导航条中元素的使用方法,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • Js数组对象如何根据多个key值进行分类

    Js数组对象如何根据多个key值进行分类

    这篇文章主要介绍了Js数组对象如何根据多个key值进行分类,每周从 npm 下载 lodash.groupBy 的次数在 150 万到 200 万之间,很高兴看到 JavaScript 填补了这些空白,让我们的工作变得更加轻松,需要的朋友可以参考下
    2024-02-02
  • 移动端点击图片放大特效PhotoSwipe.js插件实现

    移动端点击图片放大特效PhotoSwipe.js插件实现

    这篇文章主要为大家详细介绍了移动端点击图片放大特效PhotoSwipe.js插件实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • JavaScript中遍历跳出循环方法总结

    JavaScript中遍历跳出循环方法总结

    这篇文章主要给大家介绍了关于JavaScript中遍历跳出循环方法的相关资料,一想到想到循环的跳出,立马就会想到三个关键,break、return、continue,在业务中也会需要在遍历的时候退出循环,需要的朋友可以参考下
    2023-12-12
  • JS发送请求的常用方法详解

    JS发送请求的常用方法详解

    在Web开发中,JavaScript与服务器进行数据交互是核心需求之一,本文将详细解析JavaScript发送请求的常用方法,帮助开发者根据场景选择最适合的方案,需要的朋友可以参考下
    2026-03-03
  • JS实现将数字金额转换为大写人民币汉字的方法

    JS实现将数字金额转换为大写人民币汉字的方法

    这篇文章主要介绍了JS实现将数字金额转换为大写人民币汉字的方法,涉及javascript字符串与数组操作的相关技巧,需要的朋友可以参考下
    2016-08-08

最新评论