ffmpeg实现视频转gif及gif缩放(ffmpeg4.2.2)
实现 视频 FFMPEG 缩放 gif
2023-09-14 08:59:33 时间
一,为什么选择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)
相关文章
- 视频图像分割研究与实现(二):常见图像和视频分割方法概述
- Java实现 LeetCode 481 神奇字符串
- java实现复制网站内容
- Java实现九阶数独
- Java实现 蓝桥杯VIP 算法训练 FBI树
- ffmpeg实现视频文件合并/截取预览视频/抽取音频/crop(裁剪)(ffmpeg4.2.2)
- 基于EasyNVR+EasyDSS H5视频直播二次开发实现业务需求:直接使用播放页面
- 使用GPUImage实现视频滤镜
- 《安富莱嵌入式周报》第301期:ThreadX老大离开微软推出PX5 RTOS第5代系统,支持回流焊的自焊接PCB板设计,单色屏实现多级灰度播放视频效果
- Atitit 文件上传功能的实现 图片 视频 目录 1. 上传原理1 1.1. http post编码 multipart / form-data1 1.2. 临时文件模式 最简单2 1.3
- Python:利用collections库实现统计单个字或单个字母的频率统计并进行降序输出、统计一个列表内重复元素并以字典形式输出
- CV之OD:基于深度学习算法实现目标检测之GUI界面产品设计并实现图片识别、视频识别、摄像头识别(准确度非常高)
- Python:利用python代码编程实现将视频的avi格式转换为MP4格式
- MANET模拟器和拓扑可视化研究(Matlab代码实现)
- OpenCV实现图像反向投影
- WebRTC入门指南 —— 实现一个完整的点对点视频通话(信令服务器+客户端)
- 使用Mask R-CNN模型实现人体关键节点标注
- Spring Boot 自定义注解支持EL表达式(基于 MethodBasedEvaluationContext 实现)
- 100集华为HCIE安全培训视频教材整理 | 准入控制功能实现(六)
- 100集华为HCIE安全培训视频教材整理 | 准入控制功能实现(二)
- Linux下实现视频读取(二)---camera參数设定
- 基于Java+SpringBoot+Vue+Uniapp前后端分离疫情酒店管控系统设计与实现(有需求文档、演示视频)
- 【FFmpeg】使用 ffmpeg 软件让视频旋转适当角度(亲测有效)