这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
在这次抖音极简版应用的开发中有视频上传功能:在向客户端上传视频后,需要将视频和封面图保存到服务器上。生成缩略图的方法使用了视频处理软件ffmpeg。这篇笔记简单介绍一下ffmpeg软件。
ffmpeg是一套可以用来记录、处理音视频并且将其转化为流的开源计算机程序,采用LGPL或GPL许可证。ffmpeg提供了录制、转换以及流化音视频的完整解决方案,包含了解码库libavcodec,并且保证了高可移植性和编码质量。其中libavcodec库用于声音和图像的编解码,libavutil包含公共工具函数,libswscale用于视频厂家比例缩放和色彩映射转换,libpostproc用于后期效果处理,ffsever用于HTTP多媒体广播串流服务器,ffplay为播放器。
ffmpeg因其优秀的性能被许多开源项目采用,如ffmpeg2theora,VLC,MPlayer等。但有些播放软件使用了ffmpeg的代码却未遵循LGPL/GPL协议公开源代码,是一种侵权行为。
ffmpeg程序主要通过命令行执行,安装好程序后,通过ffmpeg命令即可进行调用。
对于go语言,github上可以找到开源的ffmpeg绑定(binding),导入库后便可使用。ffmpeg-go支持流式计算,可以应用于简单和复杂的场景,适应性强。
导入库的代码如下:
import (
ffmpeg "github.com/u2takey/ffmpeg-go"
)
样例代码如下:
err := ffmpeg.Input("./sample_data/in1.mp4", ffmpeg.KwArgs{"ss": 1}).
Output("./sample_data/out1.mp4", ffmpeg.KwArgs{"t": 1}).OverWriteOutput().Run()
assert.Nil(t, err)
这段代码将视频根据时间戳进行裁剪。 在实际使用中可以看在控制台中看到ffmpeg运行的数据,实际来看调用go语言绑定只是提供了便捷的调用ffmpeg程序的方法,真正执行视频处理还是通过命令行进行的。