截取视频第一帧图片

摘要:
通过画布的drawImage()API,可以将第一个参数video传输到画布以绘制视频的当前帧。应注意以下代码:由于跨域限制,它必须在web服务器上运行。如果直接打开硬盘上的文件系统,则不允许。此外,这里的示例使用本地存储的视频文件。在实际项目中,如果脚本和视频不在同一个域中,跨域问题仍然会发生。参数是另一个帖子。GetVideoCover()是一个获取视频的函数,可以直接调用。

利用canvas的drawImage() API,第一个参数传video可以将视频当前帧画到画布上,(这里示例是第一帧),

以下代码需要注意:因为跨域限制,必须放到web服务器上运行(比如localhost),如果直接是在硬盘上的文件系统打开是不行(file://...)的。

另外,这里示例上用的是本地存了一个视频文件,实际项目时如果脚本和视频不在同一个域还是会发生跨域问题,参数另一篇帖子

 getVideoCover() 就是获取视频的函数,可以直接调用。

<!DOCTYPE html>
<html>

<body>
    <img id="img">
    <script>
        function getVideoCover(url, width = null, height = null) {
            return new Promise((resolve, reject) => {
                const canvas = document.createElement('canvas');
                const video = document.createElement('video');
                document.body.appendChild(video);
                video.setAttribute('crossOrigin', 'anonymous');
                canvas.width = width ? width : video.clientWidth;
                canvas.height = height ? height : video.clientHeight;
                video.style.height = '0';

                video.onloadeddata = (() => {
                    setTimeout(() => {
                        canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);
                        let b64 = canvas.toDataURL('image/png');
                        document.body.removeChild(video);
                        resolve(b64);
                    }, 100);
                });
                video.setAttribute('src', url);
            });
        }
        getVideoCover('./videoplayback.mp4', 200, 150).then((base64) => {
            document.getElementById('img').setAttribute('src', base64);
        });
    </script>
</body>

</html>

免责声明:文章转载自《截取视频第一帧图片》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# 把数组转换成DataSet数据类型Windows 7文件权限工具 v1.0下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【转】如何修改 video 样式

我们这里说的“修改 video 样式”并不是要自己实现一套 controls,而是尝试修改 video 的默认样式 隐藏全屏按钮 这个很容易查到 video::-webkit-media-controls-fullscreen-button{ display: none; } 那么,video::-webkit-media-controls 是什么?还可以...

解决IE中部分文件格式不能下载的问题(附MIME大全)

     昨天有同事突然反映说自己上传了一个文档下载不了,急忙上系统查看。发现是.xlsx文档,原来是office2007创建的文档。仔细查看了一下文件确实存在,但是查看的时候浏览器弹出提示:http 404错误。说不存在此文件路径。但是其他的文件比如xls,doc文件都是可以的。更奇怪的是在另外一台服务器上是不存在该问题的。      今天来到公司又想起...

vue-video-player在微信浏览器自动全屏

查了很多资料  <video src="https://tool.4xseo.com/article/197320.html" controls="" x5-playsinline="" playsinline="" webkit-playsinline="" poster="" preload="auto"></video>v...

FFmpeg 滤镜详解

FFmpeg Filter 1. 概念介绍 在多媒体处理中,术语滤镜(filter)指的是修改未编码的原始音视频数据帧的一种软件工具。 2. 基本原理 ● 在编码前,ffmpeg可以对raw(真实/原)音频和视频使用libavfilter库中的滤镜进行处理。(非压缩数据帧)● 多个滤镜可以组成滤镜链图(滤镜链图filtergraphs )。● 在ffmp...

USB device classes

  Class Usage Description Examples 00h Device Unspecifiedclass 0 (Device class is unspecified. Interface descriptors are used for determining the required drivers.) 01h Int...

微信浏览器video播放视频踩坑

video属性介绍 iOS的属性 playsinline On iPhone, video playsinline elements will now be allowed to play inline, and will not automatically enter fullscreen mode when playback begins. vide...