V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
bronyakaka
V2EX  ›  分享创造

写了个 webp 转 jpg 的小工具

  •  
  •   bronyakaka · 61 天前 · 3963 次点击
    这是一个创建于 61 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    56 条回复    2024-07-10 15:04:10 +08:00
    winterbells
        1
    winterbells  
       61 天前
    之前折腾转 avif ,死活编译都有问题(缺库),后来发现下载预编译的 exe ,再写代码调用就行了😀
    yangxin0
        2
    yangxin0  
       61 天前   ❤️ 4
    ffmpeg 一句话就搞定了。
    sunshower
        3
    sunshower  
       61 天前 via Android
    https://anywebp.com 这种不就挺方便的
    goxxoo
        4
    goxxoo  
       61 天前
    挺好 用上了
    NightFlame
        5
    NightFlame  
       61 天前
    可以转 GIF 吗
    lambdaq
        6
    lambdaq  
       61 天前
    > b 站下载下来的壁纸都是 webp 的,很不爽

    理论上,应该 URL 里的 .webp 改成 .jpg 就行。
    ExplodingFKL
        7
    ExplodingFKL  
       61 天前   ❤️ 3
    项目不错,但 ... webp 转 jpg 倒反天罡了属于是
    augustheart
        8
    augustheart  
       61 天前
    无损??
    wxf666
        9
    wxf666  
       61 天前
    转换图片,不是 CPU 密集型应用吗? 100 并发转换,有啥意义吗?

    另外,webp 效率,不是比 jpg 好得多吗?兼容性也不错吧。。

    win8.1 能运行吗?我试了下,好像不支持?
    augustheart
        10
    augustheart  
       61 天前
    @wxf666 别说,还真有意义,能跑满 cpu
    qq316107934
        11
    qq316107934  
       61 天前
    协程数跟着 GOMAXPROCS 走好一点吧
    wxf666
        12
    wxf666  
       61 天前
    @augustheart #10 那为啥不搞 1000 、10000 并发呢?

    挑 100 这个数字,是有什么考究吗? CPU 100 核?

    augustheart
        13
    augustheart  
       61 天前
    @wxf666 这就要问楼主了啊,大概拍脑袋定的。
    反正 goroutine 便宜。
    1002xin
        14
    1002xin  
       61 天前
    我一般,直接改后缀了
    183387594
        15
    183387594  
       61 天前
    楼主写代码很简单,但 v 友们要考虑的就比较多了。
    highFreqSurfer
        16
    highFreqSurfer  
       61 天前
    不是, 我 ffmpeg 用 bash 一个 for 的事情
    kyznever
        17
    kyznever  
       61 天前
    写一个浏览器插件吧。如果没人来的话,那我来好了
    diagnostics
        18
    diagnostics  
       61 天前
    @augustheart #10 如果你不是计算机专业,请看一下 Little's law, 如果你是计算机专业,麻烦你复习一下再回复
    augustheart
        19
    augustheart  
       61 天前
    webp 和 jpeg 是两种完全不同的东西,无论容器还是算法都是不同的。直接改扩展名能用只是因为某些解码器不以扩展名定类型
    augustheart
        20
    augustheart  
       61 天前
    @diagnostics 麻烦你别当谜语人,打开任务管理器的性能一栏直接说我哪个地方说错了吧
    x66
        21
    x66  
       61 天前
    find . -iname '*.webp' -exec bash -c 'ffmpeg -y -i "$1" "${1%.*}.jpg"' _ {} \;
    goxxoo
        22
    goxxoo  
       61 天前   ❤️ 2
    作者好心, 你们在这秀? 不是谁都会 bash,装个 linux? 谁都知道 ffmpeg, 你在让人家下载个 ffmpeg?
    tool2dx
        23
    tool2dx  
       61 天前
    @goxxoo 现在看图软件基本都支持 webp 格式了吧,只要能看,一般就能转换。

    又不是什么新格式,苹果的 HDR 格式转换才麻烦。
    diagnostics
        24
    diagnostics  
       61 天前
    @augustheart #20 我都把定律(原因)发给你了,怎么谜语人了?

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

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

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

    @BYDH 能并发,但并发数 100 和 GOMAXPROCS 相比,前者不会更高,只会更差。
    winterpotato
        41
    winterpotato  
       61 天前
    你这怎么反过来了,大家都是转 webp avif 啊
    augustheart
        42
    augustheart  
       61 天前
    @diagnostics 可是我只是帮楼主的作品找意义啊……
    jjtang11
        43
    jjtang11  
       61 天前
    协程开多了最终还是并行运行 GOMAXPROCS 个,可能是懒得查 api 怎么获取核数就直接写 100 覆盖掉绝大部分人的 cpu 线程数,反正本地小工具都是怎么简单怎么来,况且 100 个协程对于现代 cpu 来说根本不算什么
    bronyakaka
        44
    bronyakaka  
    OP
       61 天前
    统一回复下,
    1 、 无损是看起来无损 不是真的质量无损
    2 、用 100 个协程是拍脑袋定的,而且每个人电脑情况不同所以不会设置的很高,或者说榨干性能,毕竟只是一个小工具,100 个协程影响很小
    2ako
        45
    2ako  
       61 天前
    会有这个需求,要点名批评傻逼 QQwx ,对 webp 支持很差,还要自己手动转成 jpg 、gif 才能发
    zhiyu1998
        46
    zhiyu1998  
       61 天前
    png 能转换不?🤔
    fyq
        47
    fyq  
       61 天前
    东西不错,可有个小问题:
    有的文件虽然后缀名是 webp ,可它实际上是动画,你统统给转成 jpg 不就动图变单图了。
    wakaka
        48
    wakaka  
       61 天前 via Android
    webp 转 jpg...你这是开倒车啊
    mikewang
        49
    mikewang  
       61 天前
    看起来...无损 好吧。🤦‍♂️
    vsheyan
        50
    vsheyan  
       61 天前   ❤️ 1
    怎么样楼主,现场 review 的感觉还不错吧,我就知道盖楼这帮人工作不饱和哈哈哈哈哈
    N5GNbi8Q47N7pJJV
        51
    N5GNbi8Q47N7pJJV  
       60 天前
    想知道楼主的这个网站用的什么程序
    BUHeF254Lpd1MH06
        52
    BUHeF254Lpd1MH06  
       60 天前
    我进来就是来看 codereview 的,果然哈哈哈
    magicdawn
        53
    magicdawn  
       60 天前 via iPhone
    我来个 node.js 的, 来 review 啊🙀
    https://github.com/magicdawn/handy-img

    使用 pnpx handy-img -d 文件夹 -y
    支持设置压缩质量, 默认 mozjpeg q85 好像
    magicdawn
        54
    magicdawn  
       60 天前 via iPhone
    @winterpotato
    新的不一定最适合使用场景哦
    jpeg 有最广泛的兼容性和不俗的压缩表现
    一个别人做的评测 供参考 https://tsev.dev/posts/2023-11-10-should-avif-be-the-dominant-image-format/
    expy
        55
    expy  
       60 天前
    有损格式进一步转码是大忌。
    ilylx2008
        56
    ilylx2008  
       59 天前
    很棒,能用上
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1075 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:35 · PVG 07:35 · LAX 16:35 · JFK 19:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.