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格式的文件大小也是受尺寸大小影响的,尺寸越大相应的文件也就越大,但作为表情包我们往往不需要追求如此高清的效果。
最终产出的效果图如下:
命令行的优势
可能有人想说了,我干嘛要去写这么一大串晦涩难懂的命令行呢?要创作表情包,使用有可视化界面的软件操作不香吗?
诚然,可视化界面有可视化界面的优势,像前面添加文字的操作,鼠标或手指点点拖拖就可以完成了。但是别忘了,许多所谓的拥有可视化界面的软件,其只不过是在命令行工具上披一层皮而已。
换句话说,只要熟悉了FFmpeg命令行工具的使用之后,我们就完全可以自己做一个拥有可视化界面,而功能底层使用FFmpeg命令行来实现的软件。
看到这里,你还不想打开FFmpeg命令行工具实际操作一番吗?
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!