使用的两个关键命令
ffmpeg
-framerate 10
-start_number 1
-i app_imagecache/3461686%04d.png
-i logo.png
-i pa.png
-vframes 44
-filter_complex "[1:v]scale=50:50[water];[0:v][water]overlay=0:0[x];[x][2:v] paletteuse,reverse"
-y logo.gif
下面来简单的解析一下这段命令
- framerate 指定生成gif的 帧率,目前ffmpeg 最快支持为 20ms/每帧,所以这里的帧率最大0为 50
- start_number 指定图片输入序列的启示位置
- -i app_imagecache/3461686%04d.png 指定生成gif的 图片序列
- -i logo.png 指定水印
- vframes 指定帧数
- -filter_complex “[1:v]scale=50:50[water];[0:v] [water]overlay=0:0[x];[x][2:v]paletteuse,reverse”
这一段指定对输入的处理 [1:v]实际上指定了命令的中的输入参数,这里的 1 表示参数的序号,序号是基于0开始的,这里实际上指向了第二个输入参数也就是 logo.png. scale说明对这个水印的大小,这里指定了高宽为 50、接下来跟着了一个[water]这个就表示对上一个步骤处理结果的重命名,在后续的操作中就可以用这个重命名来指代。接下来使用[water] 表示上一步指定为 50:50 的这个水印 偏移量 为0:0; 接下来是[x][2:v] 这两个单独的意思都能理解,放在一起的理解应该是对将[2:v]所致的结果应用到[x]上面去,[2:v] 执行了第三个输入参数即pa.png, 后面跟着了paletteuse,加上这个是为了提升了gif图像的质量,为gif制定了一个全局的调色盘。
再接下来的reverse 制定了整个gif按照倒序的方式生成。
刚刚说到了gif的调色盘,生成的方式如下
ffmpeg
-i source
-vf palettegen
-y palettegen.png
-i 即我们制定的生成调色盘的源文件,在项目中,我们的gif来源于视频,所以在生成调色盘的时候,这里制定为 视频的路径。
开发的时候遇到一个问题, 从制定的时间开始取视频帧的时候,非常的慢,因为需要从头开始解析,所以后来的做法就是先截取视频,然后截取后的视频中开始取帧。