アスペクト比に従って画像を並べ替え、MPVを使用して検索します。

アスペクト比に従って画像を並べ替え、MPVを使用して検索します。

画像を縦横比で並べ替えてから使いたいです。多目的乗用車それらを探索しながら、Googleからいくつかのコードを取得しました。

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=-

動作しますが、完璧ではありません。スペースを含むファイル名を処理できないため、特にWebP形式を処理する場合はidentify遅すぎます。また、オプションがあるので、この出力を得るために使用したいのですが、処理方法がわかりません。誰でも助けることができますか?exiftoolexiftool-rexiftoolexiftool -r -s -ImageSize

答え1

わかりませんが、シェルmpv内のzshいくつかの基準(縦横比など)でファイルのリストを並べ替えるには、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

または、GNUユーティリティを想定し、質問の最新の編集に従ってシェルを使用してくださいexiftool-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

関連情報