一,为什么选择ffmpeg处理gif?

1,ffmpeg可以从视频中截取gif

2,ffmpeg在缩放gif时出错的机率较低,

而imagemagick在缩放gif时容易出错

我们在后面的例子中可以看到

说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

对应的源码可以访问这里获取: https://github.com/liuhongdi/

说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,用ffmpeg实现视频转gif及gif转视频

1,截取5秒长度生成gif

#-ss 00:00:02: 从第二秒开始

#-t 5:   持续5秒

#-f gif: 指定文件格式为gif(因为输出文件名的后缀是gif,所以这个参数可以不添加)

[root@blog 1]# ffmpeg -t 5 -ss 00:00:02  -f gif -i 8_9f6fa300bacded7b.mp4 /data/dev/think_file/html/8.gif

2,生成指定宽高的gif

#-v quiet:  不显示版本和处理过程等log信息

#-s 320x180: 指定生成的gif图的宽高

#-y : 文件存在时自动覆盖,不再询问

[root@blog 1]# ffmpeg -v quiet -t 5 -ss 00:00:02 -i 8_9f6fa300bacded7b.mp4 -s 320x180 -y /data/dev/think_file/html/8_2.gif  

3,生成gif时指定fps

查看原视频的fps:

[root@blog 1]# ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=r_frame_rate 8_9f6fa300bacded7b.mp4
30000/1001

原视频的fps并不高,值为30

# -r: 指定fps

[root@blog 1]# ffmpeg -v quiet -t 5 -ss 00:00:02 -i 8_9f6fa300bacded7b.mp4 -f gif -r 15 -y /data/dev/think_file/html/8_3.gif

查看文件大小:

[root@blog 1]# ll /data/dev/think_file/html/8*
-rw-r--r-- 1 root root 3849280 Apr 30 17:08 /data/dev/think_file/html/8_2.gif
-rw-r--r-- 1 root root 2862304 Apr 30 17:39 /data/dev/think_file/html/8_3.gif

说明:fps值缩小后,gif文件也变小了

4,gif转mp4

[root@blog html]# ffmpeg -i 8_2.gif 8_2.mp4

三,缩放gif,并与ImageMagick处理gif比较

1,

查看原gif的宽高及大小:

[root@blog img]$ file dog.gif
dog.gif: GIF image data, version 89a, 250 x 250
[root@blog img]$ ll -h dog.gif
-rw-r--r-- 1 webop webop 880K May 2 10:59 dog.gif

缩放gif的命令:

[root@blog img]# ffmpeg -i dog.gif -s 120x120 dog_tmb.gif

查看生成预览gif的宽高及大小

[root@blog img]$ file dog_tmb.gif
dog_tmb.gif: GIF image data, version 89a, 120 x 120
[root@blog img]$ ll -h dog_tmb.gif
-rw-r--r-- 1 root root 383K May 2 11:08 dog_tmb.gif

2,我们不建议使用imagemagick处理gif,

因为有可能会报文件损坏的错误

以相同的文件为例:

[root@blog img]$ identify dog.gif
...
identify: corrupt image `dog.gif' @ error/gif.c/PingGIFImage/965.

如果报出此类错误,则convert时会出错:

我们看一下使用convert:

[root@blog img]$ convert -resize 120x120 dog.gif dog_tmb2.gif
convert: corrupt image `dog.gif' @ error/gif.c/DecodeImage/513.
convert: corrupt image `dog.gif' @ error/gif.c/ReadGIFImage/1389.
convert: no images defined `dog_tmb2.gif' @ error/convert.c/ConvertImageCommand/3226.

四,查看ffmpeg的版本

[root@blog img]$ ffmpeg --version
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8 (GCC)

五,查看centos的版本

[root@blog img]$ cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)

ffmpeg实现视频转gif及gif缩放(ffmpeg4.2.2)的更多相关文章

  1. ffmpeg修改视频文件的分辨率

    在本文中,我们将展示如何调整任何视频文件的大小. 这种方法是在Linux系统(几乎任何发行版)中调整视频文件大小的最佳方法之一,也是Windows和Mac用户的绝佳替代方案. 更改视频文件的分辨率将是 ...

  2. 如何使用ffmpeg缩小视频的大小?

    如何使用ffmpeg缩小视频的大小? 看到这个答案.为方便起见,在下面引用: 通过将1 GB除以以秒为单位的视频长度来计算所需的比特率.因此,对于长度为16:40(1000秒)的视频,请使用10000 ...

  3. ffmpeg为视频添加时间戳 - 手动编译ffmpeg

    FFMPEG给视频加时间戳水印 项目中需要给视频添加时间戳,理所当然最好用的办法是ffmpeg.在找到正确的做法前,还被网上的答案timecode给水了一下(水的不轻,在这里转了2天),大概是这样写的 ...

  4. 利用FFmpeg生成视频缩略图 2.1.6

    利用FFmpeg生成视频缩略图 1.下载FFmpeg文件包,解压包里的\bin\下的文件解压到 D:\ffmpeg\ 目录下. 下载地址 http://ffmpeg.zeranoe.com/build ...

  5. C# 利用ffmpeg 对视频转换系类操作 (1) 基本分析

    最近公司做一个项目,开发一个视频站点.项目需求中有很多视频转换的需求,如:格式转换(flv,Mp4),视频水印,视频截图,视频合成,获取视频的基本信息(时间戳,视频大小等).经过网络的收集资料以及自己 ...

  6. 使用ffmpeg 对视频截图,和视频转换格式

    //执行CMD命令方法 public static void CmdProcess(string command)//调用CMD        {            //实例化一个进程类      ...

  7. NET 2.0(C#)调用ffmpeg处理视频的方法

    另外:ffmpeg的net封装库 http://www.intuitive.sk/fflib/ NET 2.0 调用FFMPEG,并异步读取输出信息的代码...public void ConvertV ...

  8. C#使用FFmpeg 将视频格式转换成Gif图片示例

    根据EFmpeg封装的视频转换gif工具:https://my.oschina.net/tianma3798/blog/825317 一.本次使用参数说明 /* * 参数说明: * -i 源文件位置 ...

  9. 使用FFMPeg对视频进行处理

    FFMPeg处理视频的核心操作方式是命令,无论是在Windows上还是Linux上.那么下边就简单介绍下,常见的处理命令. 示例1:截取一张352×240尺寸大小的,格式为jpg的图片: ffmpeg ...

随机推荐

  1. js动画之轮播图

    一. 使用Css3动画实现 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  2. Kubernetes调度流程与安全(七)

    一.Kubernetes中的调度流程 1,介绍 Scheduler 是 k8s 中的调度器,主要的任务是把定义的 Pod 分配到集群的节点上.Scheduler 是作为一个单独的程序运行的,启动之后会 ...

  3. top、ps -ef、ps aux的区别及内容详解

    1.top和ps的区别 ps是静态查看进程--------top是动态(持续监控)进程 ps只是查看进程-----------top还可以监视系统性能,如平均负载,cpu和内存的消耗 2.ps -ef ...

  4. session、闪现、请求扩展

    session 除请求对象之外,还有一个session对象.它允许你在不同请求储存特定用户的信息.它是在Cookies的基础上实现的,并且对,Cookies进行密钥签名要使用会话,你需要设置一个密钥. ...

  5. Mybatis快速逆向生成代码

    先下载生成器的文件, 并在eclipse或者IDEA里面打开这个工程 热乎乎的链接 然后配置一下 选择你需要生成的数据的ip和端口 点击运行入口函数 运行成功 接着在浏览器输入localhost: 这 ...

  6. B树【Balanced-Tree】

    一.引言 B树是二叉平衡树的一个变种,在学习之前,我们先了解一下二分法,二叉树的一些相关的基本概念,有助于我们更好的理解B树~ 二.二叉树 定义:二叉树即二叉平衡树 意义:通过二分法来进行元素查找,时 ...

  7. 趣图:当我修复一个隐藏Bug之后

    当我修复一个隐藏Bug时 然后,陷入了死循环中....   扩展阅读 趣图:大佬如何解决bug的 趣图:快下班了,剩一个bug,修复一下再走 趣图:当我给老板展示我修复了那个 bug 时 趣图:当同事 ...

  8. session安全&&CBC字符反转攻击&&hash拓展攻击

    session安全 p神写的: 在传统PHP开发中,$_SESSION变量的内容默认会被保存在服务端的一个文件中,通过一个叫"PHPSESSID"的Cookie来区分用户.这类se ...

  9. PHP代码审计01之in_array()函数缺陷

    前言 从今天起,结合红日安全写的文章,开始学习代码审计,题目均来自PHP SECURITY CALENDAR 2017,讲完这个题目,会再用一道有相同问题的CTF题来进行巩固.下面开始分析. 漏洞分析 ...

  10. 我给VSCode报了个bug,微软工程师竟然凌晨回复了...

    柠檬哥整理了50本计算机相关的电子书,关注公众号「后端技术学堂」,回复「1024」即可获取,回复「进群」拉你进读者技术交流群. 本文首发个人微信公众号,欢迎围观点击阅读原文 最近遇到一个有意思的bug ...