ffmpeg实现视频转gif及gif缩放(ffmpeg4.2.2)
一,为什么选择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)的更多相关文章
- ffmpeg修改视频文件的分辨率
在本文中,我们将展示如何调整任何视频文件的大小. 这种方法是在Linux系统(几乎任何发行版)中调整视频文件大小的最佳方法之一,也是Windows和Mac用户的绝佳替代方案. 更改视频文件的分辨率将是 ...
- 如何使用ffmpeg缩小视频的大小?
如何使用ffmpeg缩小视频的大小? 看到这个答案.为方便起见,在下面引用: 通过将1 GB除以以秒为单位的视频长度来计算所需的比特率.因此,对于长度为16:40(1000秒)的视频,请使用10000 ...
- ffmpeg为视频添加时间戳 - 手动编译ffmpeg
FFMPEG给视频加时间戳水印 项目中需要给视频添加时间戳,理所当然最好用的办法是ffmpeg.在找到正确的做法前,还被网上的答案timecode给水了一下(水的不轻,在这里转了2天),大概是这样写的 ...
- 利用FFmpeg生成视频缩略图 2.1.6
利用FFmpeg生成视频缩略图 1.下载FFmpeg文件包,解压包里的\bin\下的文件解压到 D:\ffmpeg\ 目录下. 下载地址 http://ffmpeg.zeranoe.com/build ...
- C# 利用ffmpeg 对视频转换系类操作 (1) 基本分析
最近公司做一个项目,开发一个视频站点.项目需求中有很多视频转换的需求,如:格式转换(flv,Mp4),视频水印,视频截图,视频合成,获取视频的基本信息(时间戳,视频大小等).经过网络的收集资料以及自己 ...
- 使用ffmpeg 对视频截图,和视频转换格式
//执行CMD命令方法 public static void CmdProcess(string command)//调用CMD { //实例化一个进程类 ...
- NET 2.0(C#)调用ffmpeg处理视频的方法
另外:ffmpeg的net封装库 http://www.intuitive.sk/fflib/ NET 2.0 调用FFMPEG,并异步读取输出信息的代码...public void ConvertV ...
- C#使用FFmpeg 将视频格式转换成Gif图片示例
根据EFmpeg封装的视频转换gif工具:https://my.oschina.net/tianma3798/blog/825317 一.本次使用参数说明 /* * 参数说明: * -i 源文件位置 ...
- 使用FFMPeg对视频进行处理
FFMPeg处理视频的核心操作方式是命令,无论是在Windows上还是Linux上.那么下边就简单介绍下,常见的处理命令. 示例1:截取一张352×240尺寸大小的,格式为jpg的图片: ffmpeg ...
随机推荐
- 【python练习册】1.3 将1.2题生成的n个激活码保存到mysql关系型数据库中
该题涉及到mysql中一些指令,先熟悉一下 MySQL指令 参考:https://www.cnblogs.com/zhuyongzhe/p/7686105.html mysql -u root -p ...
- JS中对获取一个标签的class的方法封一个库
在JS中我们经常会会用到,获取一个标签的id var aId=document.getElementById("id") 现在虽然有getElementsByClassName这个 ...
- cnblog维护
title: 博客归纳 blog: CSDN data: Java学习路线及视频 2019 12/31 时间管理 2020 1/22 Git是什么? 1/23 Git安装--Windows 3/24 ...
- MyBatis学习(四)代码生成器MyBatis-Generator
一.简介 前面写过一篇文章介绍了如何使用Mybatis,那么如果我门数据库中有许许多多的表的时候,每张表都手动去写对应的mapper的映射关系,会非常麻烦,那么我们可以使用代码生成器MyBatis-G ...
- dubbo学习(十)spring boot整合dubbo
工程搭建与配置 生产者 1.创建一个生产者的spring boot工程,配置好依赖,并把接口实现类文件夹复制到新的工程里 2.pom.xml配置dubbo的相关依赖 <!-- Dubbo Spr ...
- Codeforces Round #672 (Div. 2) A - C1题解
[Codeforces Round #672 (Div. 2) A - C1 ] 题目链接# A. Cubes Sorting 思路: " If Wheatley needs more th ...
- react项目创建流程
react 项目搭建 系统: windows 1.安装 node node 下载地址.一路 next 如果遇到 windows 没有权限安装 msi 文件.打开 cmd,运行msiexec /pack ...
- Go-The process cannot access the file because it is being used by another process.
where? Go程序在读取文件时候 why? 因为有其他进程也在读取和Go程序想要读取的文件,参数冲突 way? 关闭其他程序进程对该文件的读取操作
- 042 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 04 案例演示while循环的使用——循环输出英文字母
042 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 04 案例演示while循环的使用--循环输出英文字母 本文知识点:案例演示while循环的使用2 ...
- C++指针delete后还要置为null
非常好的一篇说明: 转载:https://blog.csdn.net/qq_36570733/article/details/80043321 众所周知,最开始我们用new来创建一个指针,那么等我们用 ...