利用ffmpeg转码视频为gif图片,调整gif图片的大小

news2024/9/9 6:13:06

【1】压缩gif图片大小

一般发布技术文章的时候经常要插入GIF图演示软件效果,但是一些编辑器总是限制大小,但是录制的时候可能一不小心就搞大了。

要将 GIF 图片大小限制在 10MB 内,可以使用 FFmpeg 进行压缩。

以下是一个ffmpeg的命令:

ffmpeg -i input.gif -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -pix_fmt yuv420p -r 15 -b:v 2M -movflags +faststart -fs 10M output.gif

解释一下这个命令:

-i input.gif:指定输入文件路径。
-vf “scale=trunc(iw/2)*2:trunc(ih/2)*2”:用于调整视频的分辨率,确保它是偶数。
-pix_fmt yuv420p:设置像素格式为 yuv420p。
-r 15:设置输出视频的帧率为 15 帧每秒。
-b:v 2M:设置视频的目标比特率为 2Mbps。
-movflags +faststart:使输出文件在网络上逐步播放更加友好。
-fs 10M:指定输出文件的最大文件大小为 10MB。

最后的output.gif 是输出文件的名称和格式。通过指定 -fs 10M 参数,FFmpeg 将努力使输出文件大小不超过 10MB。 压缩后的 GIF 图片可能会有质量损失,具体效果取决于输入文件的内容和压缩参数的设置。需要尝试不同的参数组合以获得最佳的压缩效果。

【2】视频转GIF图片

如果录制了视频,需要将整个视频转为图片。 可以使用FFmpeg将视频转换为GIF,可以使用以下命令:

ffmpeg -i input_video.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" output.gif

这个命令的各个部分的功能解释:

  • -i input_video.mp4:指定输入视频文件。
  • -vf "fps=10,scale=320:-1:flags=lanczos":使用-vf参数指定视频滤镜。在这里,我们采用了两个过滤器。第一个是fps过滤器,用于设置输出GIF的帧率,这里设定为每秒10帧。第二个过滤器是scale过滤器,用于调整输出GIF的分辨率,这里将宽度设置为320像素,高度按比例自动调整,同时采用lanczos算法进行重采样,以获得更好的质量。
  • output.gif:指定输出GIF文件的名称。

执行该命令后,FFmpeg将会将输入视频转换为GIF格式,并根据设定的帧率和分辨率进行处理。可以根据需要调整帧率和分辨率等参数以达到理想的转换效果。

【3】视频指定的片段转为GIF图像

如果只需要视频中的某一段画面转换为GIF,可以使用FFmpeg的 -ss-t 参数来指定起始时间和持续时间。

下面是一个示例命令:

ffmpeg -i input_video.mp4 -ss 00:01:00 -t 10 -vf "fps=10,scale=320:-1:flags=lanczos" output.gif

在这个命令中:

  • -ss 00:01:00:指定从视频的1分钟处开始。
  • -t 10:指定持续时间为10秒。
  • -vf "fps=10,scale=320:-1:flags=lanczos":同样使用了帧率和缩放的过滤器,也可以根据需要进行调整。

这样,FFmpeg将会从视频的1分钟处开始提取10秒的画面,并将其转换为GIF格式。你可以根据需要修改 -ss-t 参数来选择不同的视频片段进行转换。

【4】视频压缩

如果有一个视频,想要使用ffmpeg 命令,将视频重新编码,限制大小输出。

ffmpeg -i input_video.mp4 -c:v libx264 -crf 23 -maxrate 500k -bufsize 1000k -c:a aac -b:a 192k output_video.mp4

这个命令中的参数含义是:

  • -i input_video.mp4:指定输入视频文件。
  • -c:v libx264:使用H.264视频编码器。
  • -crf 23:设置视频的质量,数值越小表示质量越高,一般范围是18-28。
  • -maxrate 500k:设置视频的最大比特率为500k。
  • -bufsize 1000k:设置视频的缓冲区大小为1000k。
  • -c:a aac:使用AAC音频编码器。
  • -b:a 192k:设置音频的比特率为192k。
  • output_video.mp4:指定输出视频文件。

这个命令会重新编码输入视频,并根据设定的参数控制输出视频的大小。可以根据需要调整参数以达到理想的输出效果。

如果输出的视频质量过低,也可以提高视频质量。可以调整CRF(Constant Rate Factor)参数的值来获得更高质量的视频。较小的CRF值会产生更高质量的视频,但文件大小也会相应增加。可以尝试将CRF值从23调整到更小的数值,例如18或者15,来获得更高质量的输出视频。

下面是一个示例命令,将CRF值调整到18:

ffmpeg -i input_video.mp4 -c:v libx264 -crf 18 -maxrate 500k -bufsize 1000k -c:a aac -b:a 192k output_video.mp4

也可以尝试不同的CRF值,找到适合你需求的视频质量和文件大小的平衡点。记住,减小CRF值会增加视频的质量,但可能也会增加文件大小。

【5】ffmpeg是什么?

下载地址:http://ffmpeg.org/

FFmpeg 是一个开源的跨平台音视频处理工具,可以用来处理、转码、编辑、流媒体等多种音视频相关任务。FFmpeg 提供了一整套强大的工具和库,包括ffmpeg命令行工具、libavcodec(音视频编解码库)、libavformat(封装格式处理库)等,可以在命令行中进行各种音视频处理操作。

FFmpeg 之所以如此强大,主要有以下几个方面原因:

  1. 丰富的功能支持:FFmpeg 支持几乎所有主流音视频格式的编解码,可以处理音视频的转码、剪切、合并、滤镜处理等操作,同时支持流媒体的推送和拉取。
  2. 跨平台性:FFmpeg 是跨平台的工具,可以在不同的操作系统上运行,包括Windows、Mac OS、Linux等,使其具有广泛的适用范围。
  3. 高度可定制性:FFmpeg 提供了丰富的参数选项和滤镜支持,用户可以根据需求对输出进行高度定制,满足各种复杂的音视频处理需求。
  4. 开源免费:FFmpeg 是一个开源项目,遵循 LGPL 许可协议,可以免费获取和使用,吸引了全球开发者的参与和贡献,使其不断得到改进和更新。
  5. 强大的社区支持:FFmpeg 拥有庞大而活跃的开发社区,用户可以通过官方文档、邮件列表、论坛等途径获得支持和帮助,同时也可以参与到项目的开发和改进中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1962225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中间件安全:Nginx 解析漏洞测试.

中间件安全:Nginx 解析漏洞测试. Nginx 是一个高性能的 HTTP和 反向代理服务器,Nginx 解析漏洞是一个由于配置不当导致的安全问题,它不依赖于Nginx或PHP的特定版本,而是由于用户配置错误造成的。这个漏洞允许攻击者上传看似无害的…

通俗易懂,车载显示屏简单介绍!

2024年后,小汽车产量的年增长率预计将在1%至3%之间 2023年在COVID完全解封后,全球汽车销售数量提升至8千8百万台车。2024预估微幅增加到 9000万辆, 自2024起,年成长率预期将放缓至3%以下。全球汽车主要销售前三大市场 (比较2022年…

为什么阿里开发手册不建议使用Date类?

在日常编码中,基本上99%的项目都会有一个DateUtil工具类,而时间工具类里用的最多的就是java.util.Date。 大家都这么写,这还能有问题?? 当你的“默认常识”出现问题,这个打击,就是毁灭性的。 …

BUG解决(vue3+echart报错):Cannot read properties of undefined (reading ‘type‘)

这是 vue3echart5 遇到的报错:Cannot read properties of undefined (reading ‘type‘) 这个问题需要搞清楚两个关键方法: toRaw: 作用:将一个由reactive生成的响应式对象转为普通对象。 使用场景: 用于读取响应式…

idea2023 总报Low memory

idea2023 总报Low memory 问题背景问题处理 问题背景 在日常开发中,使用idea2023开发工具,开发过程中总会遇到idea提示Low memory的情况,并且每当提示出现的时候,整个idea页面便什么也不能操作了,如何处理这个情况呢&…

AI测试:人工智能模型的核心测试指标,分类判别、目标检测、图像分割、定量计算分别有哪些指标?

在前面的人工智能测试技术系列文章中,我们详细介绍了人工智能测试的技术方法和实践流程。在了解人工智能测试方法后,我们需要进一步学习和研究如何衡量这些方法的有效性,即人工智能模型测试指标的选择。测试指标的选择主要取决于模型的类型和…

借助大语言模型快速升级你的 Java 应用程序

大家都知道我爱小 Q。在我“转码”的征程中,它就像上帝之手,在我本该枯燥漫长的学习进程中拉满快进条。 不仅是我,最近 Amazon Q Developer 还帮助 Amazon 一个由 5 人组成的团队在短短两天内将 1,000 多个生产应用程序从 Java 8 升级到 Jav…

Spring Cloud 组件

1.eureka注册中心原理简述 1.服务注册: Eureka Client 会通过发送rest请求的方式向eureka服务端注册自身元数据:ip地址,端口,运行状况等信息,服务端会把注册信息存储在一个双层map中。 Eureka 的数据存储分了两层:数据存储层和缓存层。 Eureka Client 在拉取服务信息…

【STM32嵌入式系统设计与开发拓展】——13_PWM脉宽

目录 1、什么是PWM?用来做什么的?PWM(Pulse Width Modulation)脉冲宽度调制常见用到 PWM 的情况: 2、什么是输出比较?输出比较模式![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/42434920ca0940b1b1083215…

vue el-input 输入框下拉显示匹配数据

1、效果图: 2、需求&实现: 输入条件 下面匹配查询到的数据有多少个 需要调用后端接口展示,后端查询到之后返回条数 前端展示 3、具体代码实现: html: 图片需要自己根据实际情况增加 // 查询 重置 筛选 本文章…

【git】git常用命令提交规范

Git 是程序员工作中不可或缺的版本控制工具,以下是一些优化后的常用 Git 命令列表,旨在帮助你更高效地使用 Git 进行版本控制。 基础操作 拉取代码 git clone xxx.git创建分支 git branch dev切换分支 git checkout dev # 或者 git switch dev创建并切换…

Python酷库之旅-第三方库Pandas(056)

目录 一、用法精讲 211、pandas.Series.truncate方法 211-1、语法 211-2、参数 211-3、功能 211-4、返回值 211-5、说明 211-6、用法 211-6-1、数据准备 211-6-2、代码示例 211-6-3、结果输出 212、pandas.Series.where方法 212-1、语法 212-2、参数 212-3、功能…

论报文加密加签场景下如何高效的进行渗透测试

前言 最新的测试中,经常遇到HTTP报文加密/加签传输的情况,这导致想要查看和修改明文报文很不方便。 之前应对这种情况我们有几种常见的办法解决,比如使用burpy插件、在Burp上下游使用mitmproxy进行代理等,但这些使用起来不太方便…

LSTM详解总结

LSTM(Long Short-Term Memory)是一种用于处理和预测时间序列数据的递归神经网络(RNN)的改进版本。其设计初衷是为了解决普通RNN在长序列训练中出现的梯度消失和梯度爆炸问题。以下是对LSTM的详细解释,包括原理、公式、…

面向非结构化数据的知迟抽取

文章目录 实体抽取关系抽取事件抽取大量的数据以非结构化数据(即自由文本)的形式存在,如新闻报道、科技文献和政府文件等,面向文本数据的知识抽取一直是广受关注的问题。在前文介绍的知识抽取领域的评测竞赛中,评测数据大多属于非结构化文本数据。本节将对这一类知识抽取技…

Prometheus-部署

Prometheus-部署 Server端安装配置部署Node Exporters监控系统指标监控MySQL数据库监控nginx安装grafana Server端安装配置 1、上传安装包,并解压 cd /opt/ tar xf prometheus-2.30.3.linux-amd64.tar.gz mv prometheus-2.30.3.linux-amd64 /usr/local/prometheus…

【音频识别】十大数据集合集,宝藏合集,不容错过!

本文将为您介绍10个经典、热门的数据集,希望对您在选择适合的数据集时有所帮助。 1 RenderMe-360 发布方: 上海人工智能实验室 发布时间: 2023-05-24 简介: RenFace是一个大规模多视角人脸高清视频数据集,包含多样的…

2024年最强网络安全学习路线,详细到直接上清华的教材!

关键词:网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线 首先咱们聊聊,学习网络安全方向通常会有哪些问题前排提示:文末有CSDN官方认证Python入门资料包 ! 1、打基础时间太长 学基础花费很长时间,光语…

Redis内存管理

文章目录 Redis内存管理删除策略淘汰策略LRU算法 Redis内存管理 长期把Redis做缓存用,总有一天Redis内存总会满的。有没有思考过这个问题,Redis内存满了会怎么样?在redis.conf中把Redis内存设置为1个字节,做一个测试:…

【随机链表的复制】python刷题记录

R3-哈希表 参考k神题解 哈希表法: """ # Definition for a Node. class Node:def __init__(self, x: int, next: Node None, random: Node None):self.val int(x)self.next nextself.random random """class Solution:def copy…