【问题标题】:How to sort images by aspect ratio如何按宽高比对图像进行排序
【发布时间】:2021-10-14 06:42:58
【问题描述】:

我想按宽高比对图片进行排序,然后使用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=-

它有效,但并不完美。它不能处理带空格的文件名,而且identifyexiftool 慢,尤其是在处理WebP 格式时,此外,exiftool 有一个-r 选项,所以我想使用exiftool 来获得这个输出相反,但我不知道如何处理exiftool -r -s -ImageSize 的输出,有人可以帮助我吗?

【问题讨论】:

  • edit 你的问题要显示简洁、可测试的样本输入(如果是identify *,则输出,而不是通过管道传输到你现有的 awk+sed 命令的输出,这些命令不能执行你想要的操作)以及在给定该输入的情况下您想要的最终预期输出。显然,如果您想从exiftool -r -s -ImageSize 输出而不是identify 输出开始,则显示该输出而不是identify * 的输出作为示例输入。
  • 图片没有Exif信息怎么办?

标签: shell sorting awk sed exiftool


【解决方案1】:

使用exiftool,您可以使用
exiftool -p '$filename ${ImageSize;m/(\d+)x(\d+)/;$_=$1/$2}' /path/to/files | sort -gk 2

这将使输出的格式与您的示例相同,我假设相同的sort 命令可以使用它。如果没有,则需要编辑 sort 部分。

【讨论】:

    【解决方案2】:

    使用identify显示纵横比和图像文件名,无需额外计算

    identify -format '%f %[fx:w/h]\n' *.jpg | sort -n -k2,2
    file1.jpg 1
    file2.jpg 1.46789
    file6.jpg 1.50282
    file5.jpg 1.52
    file7.jpg 1.77778
    file3.jpg 1.90476
    

    关于identifyexiftool 的性能,identify 的调用次数更少,但exiftool 看起来更快

    strace -c identify -format '%f %[fx:w/h]\n' *.jpg 2>&1 | grep -E 'syscall|total'
    % time     seconds  usecs/call     calls    errors syscall
    100.00    0.001256                   867        43 total
    
    strace -c exiftool -r -s -ImageSize *.jpg 2>&1 | grep -E 'syscall|total'
    % time     seconds  usecs/call     calls    errors syscall
    100.00    0.000582                  1138       311 total
    

    【讨论】:

    • identify * 更慢,identify -format '%f %[fx:w/h]\n' * 最慢,这就是为什么我选择exiftool 并且任何图像都有ImageSizeinfo。
    猜你喜欢
    • 2013-10-14
    • 2020-05-07
    • 1970-01-01
    • 2017-01-26
    • 2015-02-14
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多