FFMPEG记录

使用的两个关键命令

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来源于视频,所以在生成调色盘的时候,这里制定为 视频的路径。

开发的时候遇到一个问题, 从制定的时间开始取视频帧的时候,非常的慢,因为需要从头开始解析,所以后来的做法就是先截取视频,然后截取后的视频中开始取帧。