如何使用ffmpeg转换图片格式

ffmpeg简介与图片格式介绍

windows安装ffmpeg,从如下网站下载release版本 https://www.gyan.dev/ffmpeg/builds/

ffmpeg 6.1版本仍然不支持heic的图片格式,未来可能会支持,具体见该issue: https://trac.ffmpeg.org/ticket/6521

图片格式压缩率:jpeg < webp < heif < avif

图片压缩率比较高的还有个jxl格式,但是太新了而且各个平台支持都不到位,只能战未来了。

avif格式的图片由于android、windows、macos、各大浏览器都支持,未来覆盖率必然超过heif,heif由于专利授权原因,在浏览器上覆盖很差,chrome浏览器打不开heif格式图片。不过avif格式由于比较新,目前在老版本的系统、浏览器中支持率还不够。

avif格式其实跟heif格式类似,都是使用视频编码器技术应用到图片领域,heif的编码器用的跟 h.265\hevc 是一样的,avif则是使用av1编码器,av1编码器压缩率比hevc更高,目前国内B站算是比较早使用av1编码视频以及avif编码图片的平台,其技术团队有相关公开分享它们在编码器领域的研究。

网页端的图片格式转换工具,推荐使用https://squoosh.app/ ,图片格式支持非常全面。

查看图片格式详情

ffprobe example.webp

图片格式转换

jpeg 转avif

ffmpeg -i source.jpg -c:v libaom-av1 -still-picture 1 dest.avif

转换jpeg为avif debug级别 日志

ffmpeg -v debug -i source.jpg -c:v libaom-av1 -still-picture 1 dest.avif

转换jpeg为webp

ffmpeg -i source.jpg -c:v libwebp dest.webp

转换jpeg为jxl

ffmpeg -i source.jpg -c:v libjxl dest.jxl

转换avif为webp

ffmpeg -i source.avif -c:v libwebp dest.webp

转换avif为jpeg

ffmpeg -i source.avif  dest.jpg

webp 转webp

ffmpeg -i source.webp -c:v libwebp dest.webp

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

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

相关文章

Django请求生命周期流程

浏览器发起请求。 先经过网关接口&#xff0c;Django自带的是wsgiref&#xff0c;请求来的时候解析封装&#xff0c;响应走的时候打包处理&#xff0c;这个wsgiref模块本身能够支持的并发量很少&#xff0c;最多1000左右&#xff0c;上线之后会换成uwsgi&#xff0c;并且还会加…

人工智能技术发展漫谈

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 人工智能发展历程 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;的发展历史可以追溯到20世纪中叶。以下是一些关键时刻和阶段&#xff1a; 起…

MySQL--日志

日志 错误日志 错误日志是MySQL中最重要的日志之一&#xff0c;它记录了当mysqld启动和停止时&#xff0c;以及服务器在运行过程中发生任何严重错误时的相关信息 当数据库出现任何故障导致无法正常使用时&#xff0c;建议首先查看此日志。 该日志是默认开启的&#xff0c;默认…

Java变量理解

成员变量VS局部变量的区别 语法形式&#xff1a;从语法形式上看&#xff0c;成员变量是属于类的&#xff0c;而局部变量是在代码块或方法中定义的变量或是方法的参数&#xff1b;成员变量可以被 public,private,static 等修饰符所修饰&#xff0c;而局部变量不能被访问控制修饰…

Eigen学习(持续更新)

Eigen 是一个高级 C++ 库,用于线性代数、矩阵和向量操作、数值计算和转换、解决微分方程等。Eigen库提供了许多用于操作矩阵和向量的函数,你可以使用这些函数来执行各种操作,例如矩阵乘法、求逆矩阵、求特征值等。在Eigen内,有Matrix,vector进行线性代数的相关运算,遵守矩…

C++进阶篇5---番外-位图和布隆过滤器

哈希的应用 一、位图 情景&#xff1a;给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中&#xff1f;&#xff1f;&#xff1f; 看到查找元素的范围&#xff0c;暴力肯定是过不了的&#xff0c;我们要么…

自学成为android framework工程师需要准备哪些装备-千里马车载车机系统开发学习

背景 hi&#xff0c;粉丝朋友们&#xff1a; 大家好&#xff01;经常有很多学员买课同学都会问到需要准备哪些装备&#xff0c;我也回答了很多学员了&#xff0c;今天就搞一篇文章来统一说明一下&#xff0c;告诉一下大家如果你想从一个framework新手变成一个framework开发的高…

sprintboot快速初始化【Springboot】

1.首先选择创建项目 2.填写对应的项目信息 一定要勾选maven&#xff0c;否则没有pom文件&#xff0c;选择next 3.选择应用场景 点击 create&#xff0c;DIEA就会根据你的选择自动创建项目骨架&#xff1b; 4.创建一个控制层 随便创建一个控制层&#xff0c;测试一下项目是否…

链接1:编译器驱动程序

文章目录 GNU编译器示例编译 GNU编译器 GNU编译器&#xff08;GNU Compiler&#xff09;是由自由软件基金会&#xff08;Free Software Foundation&#xff0c;FSF&#xff09;开发和维护的一套编译器集合。这些编译器主要用于编译各种编程语言的源代码&#xff0c;将其转换为…

【前端开发】Next.js VS Nest.js–Nest和Next之间的区别

web开发框架起到支持作用&#xff0c;并提供了开发应用程序的有效方法。它具有不同的功能和特性&#xff0c;这使得开发过程更容易&#xff0c;开发人员总是能找到最快的编码方式。这就是为什么&#xff0c;无论是后端还是前端框架&#xff0c;大多数开发人员都喜欢使用它。 一…

深度盘点:100 个 Python 数据分析函数总结

经过一段时间的整理&#xff0c;本期将分享我认为比较常用的100个实用函数&#xff0c;这些函数大致可以分为六类&#xff0c;分别是统计汇总函数、数据清洗函数、数据筛选、绘图与元素级运算函数、时间序列函数和其他函数。 技术交流 技术要学会交流、分享&#xff0c;不建议…

10 动态规划分割回文串III

来源&#xff1a;LeetCode第1278题 难度&#xff1a;苦难 描述&#xff1a;给你一个由小写字母组成的字符串s&#xff0c;和一个整数k&#xff0c;请按照下面的要求分割字符串:首先&#xff0c;你可以将s中的部分字符修改为其他的小写字母。接着你需要把s分割成k个非空不想交…

【Redis实现全局唯一ID】

一、全局唯一ID的需求产生。 在订单业务中&#xff0c;我们需要保证id是绝对唯一的。 使用数据库自增长的id在分布式的情况下把表做了拆分处理后有可能会出现id重复的情况&#xff0c;这就违背了唯一性。而且数据自增长的id有很强的规律性&#xff0c;可以根据id推断出订单的数…

C语言中的static的用法(超级详细)

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:[云小逸的主页] &#x1f4dd;码云&#xff1a;云小逸 (YunXiaoYi003) &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;…

大型网站系统架构演化(Web)

大型网站系统架构演化 大型网站系统架构演化需要关注的维度涉及的技术演进过程单体架构垂直架构使用缓存改善网站性能缓存与数据库的数据一致性问题缓存技术对比Redis分布式存储方案Redis集群切片的常见方式Redis数据类型Redis 淘汰算法 大型网站系统架构演化 需要关注的维度 …

【深入解析git和gdb:版本控制与调试利器的终极指南】

【本节目标】 1. 掌握简单gdb使用于调试 2. 学习 git 命令行的简单操作, 能够将代码上传到 Github 上 1.Linux调试器-gdb使用 1.1.背景 程序的发布方式有两种&#xff0c;debug模式和release模式release模式不可被调试&#xff0c;debug模式可被调试Linux gcc/g出来的二进制…

【Cmake】Cmake基础学习

CMake学习 一、基础学习 1. 利用Cmake进行单个源代码构建可执行文件 (1)基础命令 最基本的 CMake项目是由单个源代码文件构建的可执行文件。对于这样的简单项目,只需要一个包含三个命令的 CMakeLists.txt 文件。 注意: 虽然 CMake 支持大写、小写和混合大小写命令,但是…

Java中的mysql——面试题+答案(存储过程,外键,隔离级别,性能优化)——第23期

当涉及MySQL时&#xff0c;面试题的范围可以涵盖数据库设计、优化、复制、分片等方面。 什么是数据库范式&#xff1f;为什么要遵循数据库范式&#xff1f; 答案&#xff1a; 数据库范式是一组规范&#xff0c;用于设计关系数据库表的结构&#xff0c;以减少数据冗余和提高数据…

Spring事件注解@EventListener【观察】

一、背景 在开发工作中&#xff0c;我们常常会遇到这样一种情况&#xff1a;完成一项任务后&#xff0c;需要向其他模块广播消息或通知&#xff0c;以触发其他事件的处理。逐个发送请求固然可行&#xff0c;但更好的方式是采用事件监听&#xff0c;它是设计模式中的发布-订阅模…

Unity 关于生命周期函数的一些认识

Unity 生命周期函数主要有以下一些&#xff1a; Awake(): 在脚本被加载时调用。用于初始化对象的状态和引用。 OnEnable(): 在脚本组件被启用时调用。在脚本组件被激活时执行一次&#xff0c;以及在脚本组件被重新激活时执行。 Reset(): 在脚本组件被重置时调用。用于重置脚本…