wallpapers: add crop generation helper
This commit is contained in:
72
dotfiles/lib/bin/generate-wallpaper-crops
Executable file
72
dotfiles/lib/bin/generate-wallpaper-crops
Executable file
@@ -0,0 +1,72 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat >&2 <<'EOF'
|
||||||
|
Usage: generate-wallpaper-crops [WIDTHxHEIGHT] [WALLPAPER_DIR]
|
||||||
|
|
||||||
|
Generate centered crop-to-fill PNG wallpapers from WALLPAPER_DIR/originals.
|
||||||
|
|
||||||
|
Defaults:
|
||||||
|
WIDTHxHEIGHT 2560x1600
|
||||||
|
WALLPAPER_DIR /var/lib/syncthing/sync/Wallpaper
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
resolution="${1:-2560x1600}"
|
||||||
|
wallpaper_dir="${2:-/var/lib/syncthing/sync/Wallpaper}"
|
||||||
|
|
||||||
|
if [[ "$resolution" == "-h" || "$resolution" == "--help" ]]; then
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! "$resolution" =~ ^([0-9]+)x([0-9]+)$ ]]; then
|
||||||
|
usage
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
width="${BASH_REMATCH[1]}"
|
||||||
|
height="${BASH_REMATCH[2]}"
|
||||||
|
originals_dir="$wallpaper_dir/originals"
|
||||||
|
output_dir="$wallpaper_dir/$resolution"
|
||||||
|
|
||||||
|
if ! command -v ffmpeg >/dev/null 2>&1; then
|
||||||
|
echo "generate-wallpaper-crops: ffmpeg is required" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -d "$originals_dir" ]]; then
|
||||||
|
echo "generate-wallpaper-crops: missing originals directory: $originals_dir" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$output_dir"
|
||||||
|
|
||||||
|
shopt -s nullglob
|
||||||
|
inputs=(
|
||||||
|
"$originals_dir"/*.jpg
|
||||||
|
"$originals_dir"/*.jpeg
|
||||||
|
"$originals_dir"/*.png
|
||||||
|
"$originals_dir"/*.webp
|
||||||
|
)
|
||||||
|
|
||||||
|
if [[ "${#inputs[@]}" -eq 0 ]]; then
|
||||||
|
echo "generate-wallpaper-crops: no source images found in $originals_dir" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for input in "${inputs[@]}"; do
|
||||||
|
name="$(basename "$input")"
|
||||||
|
stem="${name%.*}"
|
||||||
|
output="$output_dir/$stem.png"
|
||||||
|
|
||||||
|
ffmpeg -hide_banner -loglevel error -y \
|
||||||
|
-i "$input" \
|
||||||
|
-vf "scale=${width}:${height}:force_original_aspect_ratio=increase:flags=lanczos,crop=${width}:${height}" \
|
||||||
|
-frames:v 1 \
|
||||||
|
-compression_level 9 \
|
||||||
|
"$output"
|
||||||
|
|
||||||
|
echo "$output"
|
||||||
|
done
|
||||||
Reference in New Issue
Block a user