当前位置: 首页 > news >正文

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

【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 拥有庞大而活跃的开发社区,用户可以通过官方文档、邮件列表、论坛等途径获得支持和帮助,同时也可以参与到项目的开发和改进中。

相关文章:

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

【1】压缩gif图片大小 一般发布技术文章的时候经常要插入GIF图演示软件效果,但是一些编辑器总是限制大小,但是录制的时候可能一不小心就搞大了。 要将 GIF 图片大小限制在 10MB 内,可以使用 FFmpeg 进行压缩。 以下是一个ffmpeg的命令&…...

【Java 第四篇章】流程控制、容器

一、流程控制 1、概念 //1.if//2.if...else//3.if...else if...else...//4.switch//5.跳出循环体:break和continue2、语法 //1. ifif(条件表达式){//执行代码块}//2.if...elseif(条件表达式){//条件表达式为真执行的代码块} else {//条件表达式为假执行的代码块}//…...

华为云全域Serverless技术创新:全球首创通用Serverless平台被ACM SIGCOMM录用

华为开发者大会2024(HDC 2024)在东莞松山湖圆满结束,期间华为云主办的“全域Serverless时代:技术创新引领,赋能行业实践”专题论坛,向广大开发者传递了Serverless领域的前沿思考和实践,现场座无…...

除自身以外数组的相乘 C++

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂…...

Element UI 如何配置文件来设置全局的语言选项。

Element UI 允许你通过配置文件来设置全局的语言选项,这样你可以方便地切换组件的语言。以下是如何配置 Element UI 以设置全局语言选项的步骤: 1. 安装 Element UI 确保你已经安装了 Element UI。 npm install element-ui --save2. 引入语言包 Elem…...

Windows 常用命令集锦

目录 一、文件和目录管理 1.1 文件操作 1.2 目录操作 二、系统信息 2.1 基本系统信息 2.2 硬件信息 三、网络管理 3.1 基本网络命令 3.2 网络诊断 四、进程管理 4.1 查看进程 4.2 管理进程 五、磁盘管理 5.1 磁盘操作 5.2 磁盘分区 六、IIS操作 通过上述命令&am…...

第一阶段面试问题(后半部分)

1. c语言中const *p的用法 (1)const int *p; 或 int const *p; 指向常量整数的指针,通过这个指针不能修改它所指向的整数值,但可以修改指针本身来指向其他地址 const int a 10; const int *p &a; // *p 20; // 错误&…...

【AIGC】ComfyUI入门-使用ComfyUI_MagicClothing插件在生成图片时候出现的问题

最近想自己实现自动换装的工作流,在使用ComfyUI_MagicClothing插件的时候,出现了一个奇怪的问题。这个问题不是插件的问题,是环境配置问题。 问题内容如下: Exception during processing!!! D:\a_work\1\s\onnxruntime\python\onnxruntime_pybind_state.cc:891 onnxrunti…...

巴黎奥运会8K转播科技为国产品牌自主研发设计

这个夏天,顶流是属于巴黎奥运会中国队的。 20枚金牌、15枚银牌、12枚铜牌......这个数字正随着赛事推进而不停在增加。赛场之上,中国健儿奋力拼搏、捷报频传,令人热血沸腾;赛场之外,另一支来自中国企业的“奥运选手”…...

【Material-UI】Button 组件中的图标和标签按钮(Buttons with Icons and Label)详解

文章目录 一、基础用法1. 左侧图标(startIcon)2. 右侧图标(endIcon) 二、图标与标签的搭配三、高级用法和最佳实践1. 自定义图标2. 视觉一致性3. 动态图标 四、总结 在现代用户界面设计中,图标在提高用户体验&#xff…...

K个一组翻转链表(LeetCode)

题目 给你链表的头节点 ,每 个节点一组进行翻转,请你返回修改后的链表。 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值&…...

2-56 基于matlab的图像融合增强技术

基于matlab的图像融合增强技术。通过原始图像——傅里叶变换——频率域滤波处理——傅里叶变换——增强后的图像。傅立叶变换以及傅立叶反变换.过程就是将空间的信息分解为在频率上的表示,通过傅立叶正反变换的处理,才使得频率域上的处理可以用于图像的增强。程序已调通&#x…...

序列化定义以及使用和注意事项

什么是序列化和反序列化 序列化:是将对象转换为可传输或存储的过程, 反序列化:通常是将字节流或是其他数据格式或源数据转为对象的过程。 序列化的作用 对象的持久化:将对象的状态保存到磁盘或数据库中,以便在程序…...

吴恩达机器学习COURSE1 WEEK3

COURSE1 WEEK3 逻辑回归 逻辑回归主要用于分类任务 只有两种输出结果的分类任务叫做二元分类,例如预测垃圾邮件,只能回答是或否 实际上,在逻辑回归中,我们要做的任务就类似于在数据集中画出一个这样的曲线,用来作为…...

白骑士的PyCharm教学高级篇 3.1 性能分析与优化

系列目录 上一篇:白骑士的PyCharm教学进阶篇 2.5 数据库连接与管理 在软件开发中,性能分析与优化是提高程序运行效率和用户体验的重要环节。PyCharm提供了强大的性能分析工具,帮助你识别和优化代码中的性能瓶颈。本文将详细介绍PyCharm中的代…...

swiper横向轮播(阶梯式滚动轮播)未生效

问题描述 版本问题 使用swiper4以上的版本可以解决该问题,4以上的swiper采用了this指向。...

基于arcpro3.0.2的北斗网格生成简介

基于arcpro3.0.2的北斗网格生成简介 采用2000坐标系、可基于行政区范围 软件可生成第一级到第十级北斗网格经纬跨度 等分 约赤道处距离 第一级 6X4度 60 和A~V 660 km 第二级 30X30分 12X8 …...

网络流算法:最大流问题

引言 最大流问题是网络流中的一个经典问题,其目标是在给定的流网络中找到从源点到汇点的最大流量。最大流问题在交通运输、计算机网络、供应链管理等领域有广泛的应用。本文将详细介绍最大流问题的定义、解决方法以及具体算法实现。 目录 最大流问题的定义Ford-F…...

C++从入门到入土(四)--日期类的实现

目录 前言 日期类的实现 日期的获取 日期的比较 const成员函数 日期的加减 日期的加等 日期的减等 日期的加减 日期的加加减减 日期的相减 流插入和提取的重载 友元 友元的特点 日期类代码 总结 前言 前面我们介绍了C中类和对象的相关知识和六个默认成员函数&…...

【香橙派系列教程】(七)香橙派下的Python3安装

【七】香橙派下的Python3安装 为接下来的Linux图像识别智能垃圾桶做准备。 图像处理使用京东SDK只支持pyhton和Java接口,目的是引入C语言的Python调用,感受大厂做的算法bug 此接口是人工智能接口,京东识别模型是通过训练后的模型,…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...

三体问题详解

从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found"​, "n…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...