写了个 webp 转 jpg 的小工具

2024-07-08 12:59:10 +08:00
 bronyakaka

批量转换,性能卓越,画质无损,一键使用。

golang 编写,默认 100 个协程并发转换。

把 exe 丢到要转换的目录,双击会自动把当前及子目录下的 webp 都递归转换。

我在 b 站下载下来的壁纸都是 webp 的,很不爽,于是开发了这个工具,分享给大家。

地址: https://github.com/Bronya0/webp-to-jpg

只编译了 windows ,go 单文件编译很方便,mac 、linux 用户可以自己编译

6899 次点击
所在节点    分享创造
56 条回复
x66
2024-07-08 15:38:21 +08:00
find . -iname '*.webp' -exec bash -c 'ffmpeg -y -i "$1" "${1%.*}.jpg"' _ {} \;
goxxoo
2024-07-08 15:57:49 +08:00
作者好心, 你们在这秀? 不是谁都会 bash,装个 linux? 谁都知道 ffmpeg, 你在让人家下载个 ffmpeg?
tool2dx
2024-07-08 16:00:45 +08:00
@goxxoo 现在看图软件基本都支持 webp 格式了吧,只要能看,一般就能转换。

又不是什么新格式,苹果的 HDR 格式转换才麻烦。
diagnostics
2024-07-08 16:01:20 +08:00
@augustheart #20 我都把定律(原因)发给你了,怎么谜语人了?

再深入解释就是,CPU 密集型应用都在做计算,多开的协程、线程只会在那个空等待,不会实现并发的效果。

多出来的上下文切换反而还会增加额外的开销。所以开 100 没意义,Java 有个 API: Runtime availableProcessors() 就是处理器数量,设置成这个也能跑满 CPU 。

CPU 密集型应用,没法空出手来去干其他活
diagnostics
2024-07-08 16:02:28 +08:00
用 go 写其实麻烦点,用 python 还不需要编译(当然你可能考虑到批量性能这一点)
goxxoo
2024-07-08 16:03:17 +08:00
不行, 我这很多小大姐姐都不知道, 经常问, 改名, 她们连后缀名都不知道怎么显示出来, 你让她们装个软件看图?
不是所有人都有计算机知识
goxxoo
2024-07-08 16:03:33 +08:00
goxxoo
2024-07-08 16:04:54 +08:00
go 编译后的 exe 是最方便的, 比 python 方便多了,再给她们电脑上装个 py 环境?
yafoo
2024-07-08 16:05:43 +08:00
好东西,已下载
tool2dx
2024-07-08 16:08:14 +08:00
@goxxoo 汗,看图软件还是要安装一个的吧。好歹是效率工具。
goxxoo
2024-07-08 16:09:46 +08:00
@tool2dx 你跟她们讲效率?一堆女人一句话就淹死你
mikasyou
2024-07-08 16:12:45 +08:00
@wxf666 没看代码,但估计还是有点用的. 读 webp, 写 jpg. 图片多的话, 也算 io 密集了
augustheart
2024-07-08 16:15:02 +08:00
@diagnostics 不开协程,楼主就是一个队列逐个执行。开协程,go 就会根据系统核心数调度,本质上就是一个线程池。go 的协程不太会出现同时运行大量线程导致的开销。所以我下面也说了,反正 goroutine 便宜,下面也有人说了,为什么不设置为 GOMAXPROCS 。
我的说法,本身就是基于目前系统上已经普及多核 cpu 的现状,我不觉得我的说法有大问题。
BYDH
2024-07-08 16:17:04 +08:00
@diagnostics 虽然看不懂你在说什么,但是我的实践告诉我图片编码可以并发
augustheart
2024-07-08 16:17:46 +08:00
@goxxoo 好办,改一改,双击启动后弹出一个目录选择对话框,让小姐姐选择目录。至少我的观察,到这步很多小姐姐是没问题的。反正这招对我家的小/老姐姐够用了。
goxxoo
2024-07-08 16:21:18 +08:00
暂时没有这反馈, 我可不想找事, 上赶着不是买卖 哈哈 她们用这还行, 都是懒狗, 能点一下的绝对不点第二下
techphoebe
2024-07-08 16:40:28 +08:00
我就弱问下,无损是怎么做到的? jpg 常用的都是有损压缩,编译软件保存时一般都会设置压缩率。你是通过设置一个很大的压缩率来做到无损的吗?还是用了某种无损的 jpg 格式?
BYDH
2024-07-08 16:53:45 +08:00
@abcysn 当然不是无损,虽然没用过 golang ,但就这一句 jpeg.Encode(outputFile, img, nil),应该是默认参数 75 吧。作者大概没考虑过编码质量的问题,
janeyee110
2024-07-08 17:10:17 +08:00
现在主要用的这个图片转换工具,感觉蛮方便的:
https://imagestool.com/zh_CN/
diagnostics
2024-07-08 18:10:08 +08:00
@augustheart #33 不是开不开协程的问题,是 100 的问题,需要设置为 GOMAXPROCS ,协程便宜不代表可以随便滥用,都是你这种程序员的话,代码得多捞,他开 100 个,你开 100 个,加起来是多少个呢?

@BYDH 能并发,但并发数 100 和 GOMAXPROCS 相比,前者不会更高,只会更差。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1055630

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX