node环境中使用fluent-ffmpeg每隔一秒视频截图
内容提要
本文介绍了使用Node.js和fluent-ffmpeg库生成视频缩略图的方法,解决了前端方法的性能问题。同时还介绍了使用zip-local库打包缩略图成ZIP文件。作者最后分享了自己的钓鱼经历。
延伸解读
为何转向服务端生成缩略图
文章指出,最近几个Chrome版本中,使用<video>元素在前端获取视频缩略图的性能变得极差,严重影响用户体验。虽然可以用mp4box.js加WebCodecs解码,但门槛较高,许多前端开发者难以掌握。因此,作者建议通过Node.js服务提前生成缩略图,避免实时获取的性能问题。
fluent-ffmpeg关键参数解析
代码示例中,fps(0.5)表示每2秒截取一帧,size('128x?')将宽度设为128px,高度按比例自动计算。输出文件名thumb-%04d.jpg中的%04d表示四位补零序列,确保排序正确。作者提醒,若视频时长在10分钟以下,用%03d即可;%04d可支持2小时视频。
ZIP打包减少请求数
缩略图数量多时,逐个请求传输成本高。文章推荐使用zip-local库将图片文件夹打包成ZIP,生成buffer数据,可上传至COS或保存本地。前端则可用jszip解压,这样只需一个请求,效果与直接加载图片相同。
Q&A
如何使用fluent-ffmpeg库生成视频缩略图?
可以通过Node.js和fluent-ffmpeg库,每2秒截取一张缩略图,使用fps(0.5)和size('128x?')方法来设置帧率和图片尺寸。
为什么前端获取视频缩略图的性能下降?
最近的Chrome版本对<video>元素的性能进行了改动,导致前端获取视频缩略图的性能显著下降。
如何将生成的缩略图打包成ZIP文件?
可以使用zip-local库将生成的缩略图文件夹打包成ZIP文件,使用zip-local的zip方法生成buffer数据。
fluent-ffmpeg库的fps()和size()方法有什么作用?
fps()方法用于设置视频的帧率,size()方法用于调整生成缩略图的尺寸。
使用fluent-ffmpeg生成缩略图时如何命名文件?
生成的缩略图文件可以使用thumb-%04d.jpg的格式命名,其中%04d表示四位补零的序列号。
前端如何解压缩ZIP文件?
前端可以使用jszip库来解压缩ZIP文件,方便获取其中的缩略图。