通过Linux命令将Webp图像转换为PNG

时间:2019-03-14 11:26:50

标签: linux image command webp

我的文件夹中有许多 webp 格式的图像,但扩展名为 .jpg ,例如

  

abc-test.jpg

这是 webp 格式的图片。我希望它以与我使用此命令相同的名称转换为.png格式,并且有效

  

查找。 -name“ * .jpg” -exec dwebp {} -o {} .png \;

它已将所有<​​strong> webp 图片转换为 .png ,但问题是它正在保存这样的图片:

  

abc-test.jpg.png

如何保存没有

之类的 .jpg 扩展名
  

abc-test.png

3 个答案:

答案 0 :(得分:1)

如果要转换/重命名的文件很多,我建议您使用 GNU Parallel ,不仅可以通过并行执行它们来更快地转换它们,还可以利用修改文件名的功能。

您想要的命令是:

parallel dwebp {} -o {.}.png ::: *.jpg

其中{.}表示“不带原始扩展名的文件名”

如果您也想递归到子目录,则可以使用:

find . -name "*.jpg" -print0 | parallel -0 dwebp {} -o {.}.png

如果您需要进度表或“预计到达时间” ,则可以在--progress命令后添加--etaparallel。 / p>

如果要查看 GNU Parallel 将运行什么,而又不实际运行任何内容,请添加--dry-run

在这个CPU越来越“笨拙” (越来越多的内核)而不是更快的时代,我向您推荐 GNU Parallel

答案 1 :(得分:0)

一件好事是将sed与mv一起使用。它与模式匹配,并替换为较新的模式。

for file in *.jpg;
do
   mv "$file" "`echo $file | sed s/.jpg/.png/`"
done

如果要保留旧文件而不是 mv ,则可以使用 cp

答案 2 :(得分:0)

我是用短的oneliner做到的,不需要在系统中安装parallel

for x in `ls -1 *.jpg`; do dwebp {} -o ${x%.*}.png ::: $x; done

这适用于当前目录

我会尝试修改@ mark-setchell递归解决方案,使其看起来像这样:

for x in `find . -name "*.jpg"`; do dwebp {} -o ${x%.*}.png ::: $x; done

${x%.*}部分是需要在此处进行解释的部分-它告诉bash使用.以及x变量中点之后的所有内容。 带有更多点的名称容易出现异常,因为我没有检查这里的正则表达式是懒还是贪婪-因此可以进一步调整答案。