FFmpeg创作GIF表情包教程来了

FFmpeg是许多音视频入门书籍都会推荐学习的一套多媒体框架,其集封装、解封装、编码、解码、播放和滤镜等多项功能于一身,堪称音视频领域的。

今天,我们将不再遵循常规教程的套路,而是将以表情包界名垂青史的名场面、电影《旺角卡门》中的经典片段——为讲解素材,通过GIF表情包创作的场景化教学,来讲解FFmpeg命令行工具的实际运用。

若本教程成功地激起了你对FFmpeg命令行工具的探索兴趣,记得说声多谢老舅点赞、收藏、评论三连支持一下。

Hello, GIF!

首先,举一个最简单的例子,即,直接把一个任意格式的视频片段转为GIF图像:

ffmpeg -i as_tears_go_by.mp4 as_tears_go_by.gif

-i 选项用于指定任意数量的输入流,可以是本地文件也可以是 络文件。

而输出流也可以是任意数量的,其指定的方式则相对粗暴得多,只要是命令行中无法解释为的内容,都会被FFmpeg命令行工具视为输出流

大多数情况下,FFmpeg命令行工具会根据输入输出流的扩展名去自动检测格式,如果需要强制指定输入或输出流的格式,可以使用-f 选项,比如:

ffmpeg -i as_tears_go_by.mp4 -f gif as_tears_go_by.gif

效果都是一样的。

名场面往往就是那几秒

在诞生这些表情包名场面的电影中,你经常会发现有那么一群“合影党”,喜欢把播放进度拖动到表情包画面出现的前后几秒,然后在公屏上打上“合影留念”的弹幕(说的是不是你?),仿佛一开始就是奔着这几秒去看这部电影的。

而我们创作表情包的第一步,自然也是先截取出这些全片中最精彩的片段。

要截取视频中的特定位置与时长的片段,我们可以用以下命令行实现:

ffmpeg -i {input} -ss {position} -t {duration} {output}

其中,

-ss 选项用于定位到指定的视频位置,可以是这种格式,也可以是这种表示第2.3秒的格式。

-t 选项用于表示截取的视频时长,也同样支持以上2种时间格式。

例如,这一名场面发生在上述视频片段的第11秒,持续时间约为2.3秒,那我们就可以这样子编写命令行:

ffmpeg -i as_tears_go_by.mp4 -ss 00:11 -t 2.3 as_tears_go_by-trim.gif

到位了到位了哈!可是有一个问题出现了,尽管经过截取处理,转出的GIF图像文件仍有11.6MB,作为一个表情包来讲,实在是太大了。

而相同时长的MP4视频文件大小却只有664KB,为什么两者能相差这么大呢?这其实跟二者采用的压缩算法有关,后面系列文章中会专门讲到,这里就先不展开说了。

斗图,讲究一个字

你肯定有过这样的经历,本来和暧昧对象在微信上聊得好好的,不知怎的突然就没话题了。与其继续尬聊下去,我们更多会选择开启模式,来缓解和过渡这一尴尬的时刻。

斗图除了考验你表情包弹药库的存量之外,表情包连发的“攻速”也很重要。

想象一下,对方的表情包如机关枪般“哒哒哒”密集地发来,而你的表情包却因为GIF格式下的文件过大,到了对方的聊天面板还要转圈下载好一阵,气势上就输了一大截。

因此,压缩表情包文件的大小,很重要。

压缩大法第一式——缩放

ffprobe是FFmpeg提供的多媒体信息查看工具,我们可以先使用ffprobe来查看上一步中截取了名场面,并转换了格式后的GIF图像信息:

ffprobe as_tears_go_by-trim.gif

Input #0, gif, from ‘as_tears_go_by-cut.gif’:

Duration: :02.32, start: 0.000000, bitrate: 40101 kb/s

Stream #0:0: Video: gif, bgra, 1920×1080 [SAR 64:64 DAR 16:9], 25 fps, 25 tbr, 100 tbn

可以看到,由于我们是直接将视频片段转为GIF图像的,文件的尺寸大小高达1920×1080!和一般的静态图片一样,GIF格式的文件大小也是受尺寸大小影响的,尺寸越大相应的文件也就越大,但作为表情包我们往往不需要追求如此高清的效果。

因此,我们压缩工作的第一步,就是缩减GIF文件的尺寸。

可以使用以下命令行来实现:

ffmpeg -i {input} -s {WxH} {output}

可以看到,由于我们是直接将视频片段转为GIF图像的,文件的尺寸大小高达1920×1080!和一般的静态图片一样,GIF格式的文件大小也是受尺寸大小影响的,尺寸越大相应的文件也就越大,但作为表情包我们往往不需要追求如此高清的效果。

  • 点击领取→C++程序员必看,抓住音视频开发的大浪潮!冲击年薪60万
  • 最终产出的效果图如下:

    命令行的优势

    可能有人想说了,我干嘛要去写这么一大串晦涩难懂的命令行呢?要创作表情包,使用有可视化界面的软件操作不香吗?

    诚然,可视化界面有可视化界面的优势,像前面添加文字的操作,鼠标或手指点点拖拖就可以完成了。但是别忘了,许多所谓的拥有可视化界面的软件,其只不过是在命令行工具上披一层皮而已

    换句话说,只要熟悉了FFmpeg命令行工具的使用之后,我们就完全可以自己做一个拥有可视化界面,而功能底层使用FFmpeg命令行来实现的软件。

    看到这里,你还不想打开FFmpeg命令行工具实际操作一番吗?

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2022年9月7日
    下一篇 2022年9月7日

    相关推荐