【问题标题】:Batch process .png to .webp [closed]批处理.png到.webp [关闭]
【发布时间】: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

标签: image bash png webp


【解决方案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运行它,看到这个答案stackoverflow.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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
相关资源
最近更新 更多