node环境中使用fluent-ffmpeg每隔一秒视频截图

💡 原文中文,约2300字,阅读约需6分钟。
📝

内容提要

本文介绍了使用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文件,方便获取其中的缩略图。

🏷️

标签

➡️

继续阅读