超硬核!图片压缩15%画质,节省85%空间!ffmpeg权威指南 [1]入门

2022-11-09 19:41:29 6点赞 14收藏 5评论

本文索引

  • ffmpeg是什么


  • 官方参考资料


  • 了解相关常识


  • 学习如何使用

首先,自我介绍

手机编辑:因为smzdm不允许引用Github链接,所以请读者搜索引擎自行检索

本文与上篇不同,属技术类指南,旨在保证内容质量和严谨,用词无法做到欢乐恶狗

本文具有权威性,但个人水平还是过于拙劣,出现错误还请指出,我将直接自行举报打回修改

本文仅作为快速上手教程,细节补充,内容冲突或过时,以官方文档为准

本文由zmxyz原创,同步发布在个人博客,使用CC-BY-ND 4.0许可证共享(原作署名,禁止商业使用,禁止二次创作分发),垃圾营销号照搬小心我向搜索引擎/托管平台发dmca嗷,规范转载请在评论区留下你转完的url

同时,本人会对文章内部引用的内容进行链接,尊重他人创作成果

本文参加数码达人评选,按照tag检索了解到,数码板块包括软件技巧

同时因为符合标准,我必须向这篇文章植入一个商品链接,可以保证没有利益关联,自营官方直达,没有返利(对于我来说没有,smzdm会不会有就不确定了)

当然也是站在个人角度推荐,应该是大厂里相对便宜的128g卡了,支持u3(顺序写入高于30MByte/s)a2(随机iops大于4000)标准,十年质保,送卡套,玩坏了直接保修,在我这个dev眼里作为开发板的引导盘算是合格了

双十一没有便宜,日常价一直都是64.9块128g,还算稳定,毕竟消耗品,缺时买就完了

三星(SAMSUNG)128GBTF(MicroSD)存储卡EVOPlusU3V30A2读130MB/s高速游戏机平板内存卡64.9元京东去购买


做个测试,证实我的标题

Pexels:Athena(图片来源)

忽略我用Windows终端但使用bash语法,因为开发用到gcc使用了一个叫msys2的工具链

语法自行转义,Windows用户尽量使用PowerShell而不是cmd

Linux用户请在glibc环境下使用,musl翻车后果自负

左侧终端内有文件体积左侧终端内有文件体积

处理完成后文件比对处理完成后文件比对

超硬核!图片压缩15%画质,节省85%空间!ffmpeg权威指南 [1]入门

超硬核!图片压缩15%画质,节省85%空间!ffmpeg权威指南 [1]入门

5205808/369016=14.10726906150411

369016/5205808*100%=7.088544179885236%

压缩后体积减少了不只85%!!!

而画质没有明显下降,无论放大与否

所以我们要开始学习:

ffmpeg是什么

FFmpeg 是一个开放源代码的自由软件,可以执行音频和视频多种格式的录影、转换、串流功能,包含了libavcodec——这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。

--Wikipedia

ffmpeg项目,它是个库,同时也是个工具

你可能觉得命令行调用非常原始,但更疯狂的是,它可以由开发者编写代码嵌入在其他程序里使用

你曾经用过带图形界面的转码工具,有90%以上的可能调用ffmpeg执行的

你所使用的每一个和音视频图片相关的app,也都可能有引用过它的代码

同时,作为一个开源项目,任何人可以在遵循其许可证的情况下任意使用项目产出

这么一看,哇,是不是很厉害,更厉害的还在后面,建议看完自己动手试试

我所期望读者具备的能力,如果你不会但愿意认真学习,那也是好样的!

  • 会操作任意平台的shell


  • 了解相对与绝对路径


  • 对音视频图片常识有些许了解


  • 能阅读英文文档(开翻译工具也行)


  • 会提取错误信息,尝试检索并解决


  • 尝试后无法解决可以寻求帮助,注意遵循 提问的艺术(Github:ryanhanwu/How-To-Ask-Questions-The-Smart-Way)

官方参考资料

首先,全部为官方或官方认可的资料,没有误导和过时

本文仅作为快速上手教程,细节补充,内容冲突或过时,以官方文档为准

非官方参考资料

首先我们要知道,ffmpeg官方并不直接提供二进制可执行文件,他们的下载页面指向了志愿者提供的自动化构建服务,而btbN的仓库对于Linux和Windows下多种硬件图形卡都有支持,所以推荐使用

构建命名解释

ffmpeg-master-latest-linux64-gpl-shared.tar.xz

ffmpeg-[分支]-[git提交hash]-[平台]-[许可证]-[库的链接类型].[归档格式]

分支是指大版本号,git提交hash代表每个pull request的唯一id,如同安卓9和安卓10,两者同时存在,但也同时进行维护,直到EOL生命周期结束,如果不追求特定老版本,就直接使用master或最新代号(目前是n5.5)即可

平台我就不用解释了,Linux就Linux,Windows就Windows

许可证分为gpl和lgpl,后者相比前者更为宽松,可以以链接库的形式引用于商业软件

链接方式如果有提示shared,就表示文件是散装的,库 文档 头文件都在目录里,适合开发者调用,没有shared的压缩包里就只有三个可执行文件

归档格式也不提了,什么平台用什么工具就行

ffmpeg官方文档

建议仔细阅读,这几个官方链接比搜索到的一堆二手教程有用的多,有什么参数不懂就 Ctrl+F 搜

比如我想了解后续文章中,"-vf scale=iw/2:ih/2"的意义,我可以直接搜索flag名"-vf",而不是带全部参数,我们就可以得到

Simple filtergraphs are configured with the per-stream -filter option


(with -vf and -af aliases for video and audio respectively).


A simple filtergraph for video can look for example like this:

而不是打开浏览器 -> 输入"ffmpeg -vf scale 是什么意思" -> 然后在一堆过时内容里寻找二手信息

了解相关常识

命令行从入门到精通

首先我们先下载一个ffmpeg预构建包,解压并cd到目录下

拿处理一张照片举例,因为照片处理时间短,效果显著,不需要了解各种参数和配置硬件加速

./ffmpeg -i input.jpg output.webp

#usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

这段命令中,

"./ffmpeg.exe"指命令行执行当前目录下的ffmpeg,你也可以写入环境变量或者用绝对路径执行

"-i input.jpg"这个flag表示应该将相对路径下的input.jpg作为输入文件

"output.webp"表示文件将以webp格式输出

没有指定任何质量参数时,webp默认会保持原像素,以质量75%进行采样,以libwebp编码器处理

此时没有指定编码器,是因为webp格式和编码高度绑定,ffmpeg将.webp扩展名作为默认参数,但在视频处理上常常有不同编码共用一个容器格式的情况发生,这时如果不想出现问题,就应该手动指定

  • vcodec(视频)


  • acodec(音频)


  • codec(图片)

理解这些以后,你会发现所有参数都是以flag形式传入的,flag应当放在input文件名和output文件名中间(其他位置无效),带单或双横杠的叫flag,没跟杠的叫做flag传递的参数

所以"-i input.jpg"是一组flag参数

而output.webp则是ffmpeg的参数

编码质量小课堂

上述提到,如果使用libwebp不指定编码质量会以75%采样,这是大家所认可性价比比较高的一个值

测试过50%和25%,感觉性价比不高,带来的体积减小有限,反而对画面大砍了一道,所以没啥用

但如果你有别的想法,像极限压缩,或者无损转码,那么可以追加以下flag参数

设置质量

-q [0-100]

设置无损,1=True,0=False

--lossless [0,1]

那么进阶一下,我要开始追加参数了

我是怎么压缩图片的

编码器参数硬件加速乱七八糟的东西可以专门水114514篇文章,这次只拿webp举例,这是一个压缩比很高,很适合网络传输的标准,兼容性也很强,适用于全部现代浏览器和第三方看图工具

配合开头的几张图片食用更佳

我的参数

./ffmpeg -i input.jpg -vf scale=iw/2:ih/2 output.webp

这个命令就是我开篇所演示的,但我为什么要这么设置呢?(当然,以下素材为私人使用,就不放上来了)

因为多数情况下,单反拍摄出6720*4480的图片画幅过大,而常规笔记本仅有1080p分辨率,所以直接通过追加flag参数

-vf scale=iw/2:ih/2

长宽重设为原有的一半(0.5*0.5,所以总像素是以前的是0.25)

在文档中,-vf指video filter,视频过滤器,在ffmpeg中,图像会被当做1帧视频处理

没有指定质量,保持默认参数

所以,在webp重编码,质量取75%,分辨率重设到四分之一,这么一套灵活操作,我们的体积从

12.7MB -> 155KB

FREAKING AWESOME RIGHT?!在不缩放的情况下浏览,效果基本一致

当然,我们也鼓励大家尝试不同的参数,如果你想折腾质量,参考上面的"编码质量小课堂",测试出更适用于你的图像

对于编码用时,我的机器是Intel i5 1035G1,10nm工艺,4核心8线程,16g内存,pcie3.0总线的sn730固态

frame= 1 fps=0.9 q=-0.0 Lsize= 156kB time=00:00:00.04 bitrate=31167.6kbits/s speed=0.0359x
video:156kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%

可以看到,用时无限接近0,一秒钟可以处理25张这么高质量的图像,如果用脚本并行处理还会更快

我想草率结尾

一张Meme送给看到这里的你们,理解万岁!

超硬核!图片压缩15%画质,节省85%空间!ffmpeg权威指南 [1]入门

因为上一篇文章反响一般,还是做我想做的事吧!后面会继续更新ffmpeg处理音频,视频,工具链,硬件加速,码率控制器,编码格式和生态相关文章的!

最后,一张Meme送给我自己

超硬核!图片压缩15%画质,节省85%空间!ffmpeg权威指南 [1]入门






作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起

Microsoft 微软 在线发码 正版多年office365家庭microsoft365 Microsoft365 -

Microsoft 微软 在线发码 正版多年office365家庭microsoft365 Microsoft365 -

289元起

卡巴斯基(kaspersky)网络解决方案中小企业版杀毒软件1服务器10台PC三年升级

卡巴斯基(kaspersky)网络解决方案中小企业版杀毒软件1服务器10台PC三年升级

3990元起

Microsoft 微软 OFFICE 365 家庭版 会员

Microsoft 微软 OFFICE 365 家庭版 会员

106元起

华三(H3C) SecPath F100-BAS AV 防病毒 License,3年

华三(H3C) SecPath F100-BAS AV 防病毒 License,3年

6904元起

华三(H3C) SecPath F100-BAS URL特征库升级服务授权函,3年

华三(H3C) SecPath F100-BAS URL特征库升级服务授权函,3年

2701元起

Microsoft 微软 OfficePLUS 订阅会员

Microsoft 微软 OfficePLUS 订阅会员

暂无报价

微软Office 365 15个月家庭版 职场利器 智能功能 电脑必备1年6人同享

微软Office 365 15个月家庭版 职场利器 智能功能 电脑必备1年6人同享

628元起

微软(Microsoft)365/Office 个人版 文档自动保存 各设备通用 1年盒装 5设备同享

微软(Microsoft)365/Office 个人版 文档自动保存 各设备通用 1年盒装 5设备同享

暂无报价

360企业级终端防病毒系统(涉密计算机平台)单机版

360企业级终端防病毒系统(涉密计算机平台)单机版

暂无报价

苍穹 边缘缓存节点管理系统

苍穹 边缘缓存节点管理系统

43800元起

WPS 金山软件 WPS 超级会员 3年卡

WPS 金山软件 WPS 超级会员 3年卡

369元起

苍穹 载体“全类型、全流程”精确管控业务办公软件 非国产化

苍穹 载体“全类型、全流程”精确管控业务办公软件 非国产化

60000元起

微软支持重装绑 office2021永久激活码2019终身版macoffice软件 Office2021小型企业版for Mac

微软支持重装绑 office2021永久激活码2019终身版macoffice软件 Office2021小型企业版for Mac

389元起

WPS 金山软件 会员季卡

WPS 金山软件 会员季卡

59.85元起

Microsoft 微软 Office 365 个人版

Microsoft 微软 Office 365 个人版

106元起

Microsoft 微软 Office 2019 家庭学生版 密钥

Microsoft 微软 Office 2019 家庭学生版 密钥

159元起
5评论

  • 精彩
  • 最新
  • 自己更新技术类文章其实挺不容易的 [喜极而泣] 但是必须要支持一下。
    可以试试把复杂的主题拆分成多篇文章,逐篇深入地把每一点细节和每一个名词都讲清楚。 [观察]

    校验提示文案

    提交
    大佬有心了 [喜极而泣]

    校验提示文案

    提交
    收起所有回复
  • 坏了,怎么发啥沉啥

    校验提示文案

    提交
    因为大妈这里不适合发这种文。一般这里推荐软件,要么是gui简单,傻瓜包式安装。要么复杂无比,恨不得自己改脚本改配置自己编译。你这种shell里面敲参数,但说的又不深入,基本是懂的不屑看,不懂的懒得看。

    校验提示文案

    提交
    收起所有回复
  • 支持一下 [赞]

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
14
扫一下,分享更方便,购买更轻松