• 用ffmpeg将视频转成gif动图


      今天分享一个我制作表情包的技巧。现在视频编辑的门槛已经非常低了,只要装个剪映稍微学一下,很容易就能把你想要的内容剪出来,真的是有手就行。但是视频剪出来的视频是无法直接用做表情包的,只有gif格式的动图才是真正可以用的表情包。另外一点,在微信、企微等通讯软件中,gif动图的大小也是有严格限制的,比如微信和企微里最大是5MB,超过这个大小就会被当成文件传输,且无法被别人收藏转发,也就失去了表情包的意义。我这里分享一些用ffmpeg来生成gif动图的命令行示例,助力大家生产出更多有趣的表情包。

      首先就是将一个视频直接转成gif动图,基本命令格式如下:

    ffmpeg -i 你的视频文件.mp4 生成的文件名.gif  
    
    • 1

    例如:

    ffmpeg -i vid20221028.mp4 out.fig 
    
    • 1

      是不是相当简单。那么,如果说原始视频太长,你只想截取其中的一段视频生成gif,你可以增加-ss和-t两个参数,-ss代表的是start time,也就是开始时间,你可以指定开始的具体秒数,也可以用时:分:秒.毫秒的格式,比如00:12:14.500。-t是要截取的时长,单位是秒。假设我们想从input.mp4里的第73.5秒开始,截取12秒的视频内容生成动图,命令行你可以写成如下的方式:

    ffmpeg -i input.mp4 -ss 73.5 -t 12 out.gif
    ffmpeg -i input.mp4 -ss 00:01:13.500 -t 12 out.gif
    
    • 1
    • 2

      但是,当gif生成后,你会发现gif的大小非常大,这是因为你没有指定目标帧率和分辨率,ffmpeg会延用原始视频的相关参数,这时候可以考虑以下几种方式来降低生成gif动态的大小。

    降低动图的帧率

      用-r参数来降低征率,比如原始的input.mp4是30帧的,可以用-r 15来降低成15帧。具体效果也是很明显的,生成的文件大小从原来的86MB下降到56MB,具体命令行如下:

    ffmpeg -i input.mp4 -ss 00:01:13.500 -t 12 -r 15 out1.gif
    
    • 1

      关于ffmpeg的-r参数,有个很小坑,-r参数一定要放到-i参数后面,它在前在后的作用是不一样的。

    调整画面分辨率

      比如原始视频是1080p的,我们可以将其减低到480p,从而显著降低最终的gif文件大小,这里可以使用-s参数,后面跟具体的分辨率大小比如480x272 具体命令如下:

    ffmpeg -i input.mp4 -ss 00:01:13.500 -t 12 -s 480x272 out2.gif  
    
    • 1

      有些时候,我们不知道原始的视频分辨率,如果贸然指定目标分辨率的话,可能会导致画面被拉伸,观感下降,这时候可以使用一个更高级的参数-vf,-vf其实就比较复杂了,这里我们只看如何用-vf参数实现宽高等比例缩放吧,具体命令如下:

    #scale后面可以指定具体的分辨率宽:高,作用同-s,也可以只指定宽或者高,
    #另一者用-d代替,ffmpeg就会自动缩放,保持原比例
    ffmpeg -i input.mp4 -ss 00:01:13.500 -t 12 -vf "scale=480:-1" out3.gif  
    
    • 1
    • 2
    • 3

      从原来的1080p降低到了480p后,文件大小变化更加明显,从原来的86MB降低到了6MB。看来还是将分辨率的效果比较明显,但是6MB作为表情包还是太大了,这时候我们可以将上面两种方式结合到一起,降分辨率的同时降帧率,命令行如下:

    ffmpeg -i input.mp4 -ss 00:01:13.500 -t 12 -vf "scale=480:-1" -r 15 out4.gif 
    
    • 1

       最后生成的文件只有4MB了。这里我再分享一个我做表情包的小技巧,就是提前用剪映剪好你想要的片段,也可以用剪映直接做好画面,导出时选择低分辨率和低码率,这样用最开始的命令直接生成的gif大小也是会在5MB内的,就省了调整各参数的时间了。

  • 相关阅读:
    LeetCode 494 目标和
    .Net Core工作流WorkFlowCore
    从均值方差到有效前沿
    Gitlab CI/CD 入门教程
    Java集合之单列集合
    java毕业设计独龙族民族特色服务网站Mybatis+系统+数据库+调试部署
    Python软件无线电(1):概述
    在线Web页面测试工具-WebPageTest
    Scala核心-编译解释
    【开源】基于Vue.js的智能教学资源库系统
  • 原文地址:https://blog.csdn.net/xindoo/article/details/127603896