按宽高比对图像进行排序,然后使用 MPV 进行浏览

按宽高比对图像进行排序,然后使用 MPV 进行浏览

我想按宽高比对图像进行排序,然后使用多用途乘用车浏览它们,我从谷歌得到了一些代码:

identify * | gawk '{split($3,sizes,"x"); print $1,sizes[1]/sizes[2]}' | sed 's/\[.\]//' | sort -gk 2

这是一个输出:

28.webp 0.698404
1.webp 0.699544
27.webp 0.706956
10.webp 0.707061
25.webp 0.707061
9.webp 0.707061
2.webp 0.707241
22.webp 1.41431
23.webp 1.41431
24.webp 1.41431

然后我做了一些调整以满足我的需要:

identify * | gawk '{split($3,sizes,"x"); print $1,sizes[1]/sizes[2]}' | sed 's/\[.\]//' | sort -gk 2 | gawk '{print $1}' | mpv --no-resume-playback --really-quiet --playlist=-

它有效,但并不完美。它无法处理带空格的文件名,而且identify速度太慢,exiftool尤其是在处理 WebP 格式时,此外,它exiftool有一个-r选项,所以我想用exiftool它来获取此输出,但我不知道如何处理exiftool -r -s -ImageSize,任何人都可以帮助我吗?

答案1

我不知道mpv,但在zshshell 中,要根据某些标准(例如宽高比)对文件列表进行排序,您可以使用o+functionglob 限定符根据 . 返回的信息来排序 glob 扩展function

例如:

by_aspect_ratio() REPLY=$(
  exiftool -q -if 'printf "%d", $ImageWidth*1e8/$ImageHeight;0' -- $REPLY
)

print -rC1 -- *.webp(no+by_aspect_ratio)

将按纵横比排序的文件print列表(列上的 aw )。webpr1 C

您可能想使用:

your-image-viewer -- *.webp(no+by_aspect_ratio)

将排序后的文件列表传递到您最喜欢的图像查看器。

替换*.webp为以递归方式**/*.webp查找webp文件。

或者使用任何 shell,但假设使用 GNU 实用程序,并根据问题的最新编辑使用exiftool's :-r

exiftool -r -ext webp -q -if '
  printf "%g\t%s\0", $ImageWidth/$ImageHeight, "$directory/$filename";0' . |
  sort -zn |
  cut -zf2- |
  xargs -r0 your-image-viewer

相关内容