如何查找+转换这些.gif?

如何查找+转换这些.gif?

我想要find一个 .gif 文件列表,convert它们都是带有文件名标识符的图像系列png,并将这些系列循环起来乳胶。我在这里思考如何组合find+ convert

  1. 我可以通过以下方式列出 .gif 文件:

    find -L *.gif -type f
    
  2. 我可以将 .gif 图像转换为一系列 png 图像,但没有自己的标识符

    # TODO take filename from find list and give to convert and to the resulted filename
    convert -coalesce giphy.gif out%05d.png
    

伪代码{}.png试图说从文件名列表中获取新文件名,但我认为它无法工作,因为该列表还包含.gif扩展名,因此应该将其删除:

find -L *.gif -type f -exec convert -coalesce {} {}.png +

操作系统:Debian 8.7

答案1

使用 zsh

autoload -U zmv # best in ~/.zshrc

splitgif() convert -coalesce "$@"
zmv -p splitgif './(***/)(*).gif(#q-.)' './${1//\%/%%}${2//\%/%%}%05d.png'

请注意,需要./避免gif:whatever.gif例如命名的文件出现问题,并${1//\%/%%}转义%可能在文件路径中找到的字符。

  • ***与相同,**但在像您一样沿着目录树下降时遵循符号链接-L
  • (#q...)全局限定符
  • -:对符号链接的目标应用以下检查以获取符号链接(stat()相反lstat()),就像您的-L.
  • .:仅常规文件(相当于-type f

答案2

Steeldriver 在评论中给出了很好的答案

 find -L . -name '*.gif' -execdir sh -c 'for f; 
      do convert -coalesce "$f" "${f%.gif}%05d.png"; 
 done' sh {} +

相关内容