批处理.png到.webp [关闭]
Posted
技术标签:
【中文标题】批处理.png到.webp [关闭]【英文标题】:Batch process .png to .webp [closed] 【发布时间】:2014-12-21 07:28:02 【问题描述】:我有大约 100 张 .png
图片,所有图片都必须转换为 .webp
(Google 的图片格式)。我正在使用 Google 的 CLI 工具。知道如何批量处理它们。
【问题讨论】:
使用find ... -exec
只为下一代:for F in *.jpg; do cwebp $F -o `basename $F%.jpg`.webp; done
【参考方案1】:
您可以借助一个简单的bash
脚本来完成。
导航到您的图像所在的目录并执行以下操作:
$ for file in *
> do
> cwebp -q 80 "$file" -o "$file%.png.webp"
> done
您可以根据需要更改输出文件名。但应该以.webp
扩展名结尾。
【讨论】:
我可以在哪里写这个脚本? @InfinitePrime,我刚刚对您的回答做了一个小小的修改。在 cwebp 参数中添加了引号(因此如果输入文件名中有空格,您的代码不会中断) 不幸的是,这会导致文件名为file.png.webp
,至少在我在 Mingw 上的使用中是这样。
在windows上你可以下载cwebp二进制文件并使用powershell运行它,看到这个答案***.com/a/49602450/7448956
@AdrianSmith 您可以使用 for file in *.png ; do cwebp -q 50 "$file" -o "$file%.png.webp"; done
从输出文件扩展名中删除 png。【参考方案2】:
如果你有这么多,你需要使用 GNU Parallel,否则你将在那里一整年!
请先将一些文件复制到一个备用的临时目录中,然后在此尝试以确保它在 100,000 张图像上使用它之前符合您的要求:
parallel -eta cwebp -o ..webp ::: *.png
这将启动并继续运行,与您拥有的 CPU 内核一样多的进程,每个进程都执行cwebp
。处理的文件将是当前目录下的所有PNG
文件。
如果命令行太长,你可以像这样使用find
传递文件列表:
find . -name "*.png" | parallel -eta cwebp -o ..webp
【讨论】:
很好地使用并行。但是你错过了点!它应该是 ..webp @iNFINITEi 很好发现 - 谢谢。我相信我现在已经更正了 - 但如果你知道不同,请说出来! @MarkSetchell 你能解释一下这个点的作用吗?我的命令find JPEG/ -iname "*.jpeg" -print -exec cwebp -jpeg_like -af -o Webp/.webp \;
在没有点的情况下工作(Ubuntu)。先感谢您。谷歌搜索没有帮助。附言点指的是..webp
中的第一个点
如何执行此命令并在另一个文件夹中输出.webp
@Hosamalzagh 你可以使用mkdir other/folder
然后parallel -eta cwebp -o other/folder/ ::: *.png
以上是关于批处理.png到.webp [关闭]的主要内容,如果未能解决你的问题,请参考以下文章