Go使用ffmpeg进行视频截图所遇问题,以及方案的改进思考 | 青训营笔记

356 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天

之前的视频截图方案所必须的两个第三方库:

"github.com/disintegration/imaging"
"github.com/u2takey/ffmpeg-go"

之前的视频截图方案的代码:

image.png

看起来虽然也很简单,但是当小组成员使用的时候遇到了问题,需要在他们电脑上再次安装ffmpeg,并将ffmpeg.exe路径加入到环境变量PATH中,流程相对复杂。

虽然安装第三方库简单,但是安装ffmpeg.exe会比较麻烦,并且如果部署到服务器的话,一样也很麻烦,要在服务器上再安装一遍,然后我就想有没有什么办法可以改进一下。

我想到将ffmpeg.exe加入环境变量是为了能够在任意地方执行ffmpeg命令,目标找到了,那么我可不可以直接通过ffmpeg.exe+参数的方式运行命令呢,想到就做,我写了一个测试用例,将ffmpeg.exe放到了项目的third_party目录中,通过os/exec包的Command,传入ffmpeg.exe的路径,并跟上所需的参数,最后发现果然可行,代码如图所示:

image.png

参数详解:

-i 视频的所在位置

-r 每秒提取的帧数

-vframes 截取1帧,也就是一张图片

-q:v 图片质量

-f 图片格式

imageFile 是截取后的图片存放路径

ps: ffmpeg.exe、视频地址或图片路径可以是绝对路径或相对路径。

最后通过Command返回的cmd,调用Run方法运行命令即可。

总结:

现在这种方法还省去了之前需要下载的两个第三方库,省去了在各台机器上配置ffmpeg环境的问题,组员使用及后续部署上线更加方便,而且还有一点,之前的方案会打印一大堆ffmpeg的日志,现在这种方法,只会提示响应错误,无错误则不提示,简洁明了,所以有时候我们遇到了麻烦,不如找到问题的根源,换个思路尝试一下,也许会更好。