手机版

nodejs实现截取上传视频中一帧作为预览图片

时间:2021-09-02 来源:互联网 编辑:宝哥软件园 浏览:

客户有个上传视频的需求,上传的视频呢,需要能在线播放并且列表中必须出现类似优酷等视频首页上的那种缩略图,成品如下图所示:

当然了,上传视频的界面就不贴出来了,毕竟我们这篇文章的重点不在于如何上传,而在于如何用nodejs截取视频中的帧!~

这里我们需要一个开源的第三方插件-大名鼎鼎的多媒体编解码框架ffmpeg,需要安装在服务器上由nodejs调用,

代码贴出如下:

函数Fecthvideothumbnail(entryid,index){ var filename=path。join(imageDir,entryid,index video suffix);var thumb=path.join(imageDir,entryid,' overview ',index thumb后缀);定义变量拇指路径=path.join(imageDir,entryid,' overview ');if(!fs.existsSync(拇指路径)){ span style='空格: pre '/span fs。mkdirsync(拇指路径);span style='空白: pre '/span } var=this;文件名=文件名。全部替换(' \ \ ',' \ \ ');var cmd thumb=拇指。全部替换(' \ \ ',' \ \ ');if(!fs。existssync(thumb)){ exec(' ffmpeg-ss 00336000336010-I ' filename '-y-f image2-t 0.001 ' cmd thumb ' '),function() { console.log(参数[0]);console.log("成功");readFileEntry(拇指,那个。RES);});}else{ readFileEntry(拇指,那个。RES);} }函数readFileEntry(文件名,响应){ path.exists(文件名,函数(存在){ if(!文件名||!存在){回应。写头(404);回应。end();返回;} fs.readFile(文件名,'二进制',函数(err,file){ if(err){ response。写头(404);回应。end();返回;} var content type=' none var ext=path . ext name(文件名);switch (ext) { case ' .XML": ContentType="应用程序/XML;charset=utf-8 ';打破;凯斯. JSON ' : ContentType='应用程序/JSON;charset=utf-8 ';打破;凯斯. png ' : ContentType=' image/png ';打破;凯斯. jpg ' : content type=' image/JPEG ';打破;凯斯. flv ' : ContentType=' video/flv ';打破;} response.writeHead(200,{ ' Content-Type ' : Content Type,' Content-Length ' :文件。长度,“接受范围”:“字节”,“服务器”:“微软-IIS/7.5”,“X-乘方”:“ASP .NET ' });response.write(文件,' binary ');回应。end();});});} 重点就是这段

exec(' ffmpeg-ss 00:00:10-I ' filename '-y-f image 2-t 0.001 ' cmdthub ' '),function() { console.log(参数[0]);console.log("成功");readFileEntry(拇指,那个。RES);});高级管理人员函数可以像cmd DOS命令台一样直接执行系统命令ffmpeg提供的正是这样的接口。具体的应用程序接口可以参照ffmpeg的文档,-ss代表指定视频初始进度我代表入参视频文件位置你好代表无需询问即可覆盖输出文件。直接覆盖已存在文件而不必询问,-t代表截取时长(图片的话0.001即可),-f代表-f fmt(输入/输出)强制输入或输出文件格式。输入文件的格式通常是自动检测的,从输出文件的文件扩展名中可以推测出来,因此在大多数情况下不需要这个选项。

强制输出文件格式,基本上用不到……最后cmdthumb代表输出文件名nodejs。的高级管理人员执行完成之后,会通知回调函数。此时返回生成的缩略图即可,将此过程写成休息服务,直接将全球资源定位器(统一资源定位符)填充在img标签的科学研究委员会属性中即可!

nodejs写这种服务端程序非常简单,方便,轻量。比爪哇岛要简洁得多,并且不需要像雄猫那么麻烦。唯一的缺点可能就是调试比较麻烦了……

另外,上图中所示的视频服务我也是用nodejs实现的,效率还不错~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:nodejs实现截取上传视频中一帧作为预览图片是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。