V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
爱意满满的作品展示区。
bronyakaka

写了个 webp 转 jpg 的小工具

  •  
  •   bronyakaka · Jul 8, 2024 · 7414 views
    This topic created in 659 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    使用 pnpx handy-img -d 文件夹 -y
    支持设置压缩质量, 默认 mozjpeg q85 好像
    magicdawn
        54
    magicdawn  
       Jul 9, 2024 via iPhone
    @winterpotato
    新的不一定最适合使用场景哦
    jpeg 有最广泛的兼容性和不俗的压缩表现
    一个别人做的评测 供参考 https://tsev.dev/posts/2023-11-10-should-avif-be-the-dominant-image-format/
    expy
        55
    expy  
       Jul 9, 2024
    有损格式进一步转码是大忌。
    ilylx2008
        56
    ilylx2008  
       Jul 10, 2024
    很棒,能用上
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5565 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 121ms · UTC 07:31 · PVG 15:31 · LAX 00:31 · JFK 03:31
    ♥ Do have faith in what you're doing.