$1
dentro da função não é o mesmo que $1
fora da função.
então você precisa salvá-lo no script begin: dir="$1"
, ... e usar $dir
em qualquer outro lugar.
desta forma você vai resolver a primeira coisa estranha que você percebeu (bash: o caminho não existe) ... mas provavelmente resolverá tudo o resto.
A sua maneira de resolver não estava completa, você deve colocar aspas entre aspas, mas a expansão do globo estará errada ... e a única coisa que você pode fazer é limpar o código porque a versão simplificada do script funciona bem :
#!/bin/bash
shopt -s nullglob ; set -o xtrace #xtrace for debug
dir="$1" ; [ -d "$dir" ] || dir=.
for file in "$dir"/*.{jpg,jpeg,JPG}; do mogrify -format png "$file"; rm "$file"; done
for file in "$dir"/*.png; do convert "$file" -resize 3840x2160 "$file"; done
for file in "$dir"/*.png; do composite -gravity center "$file" -geometry 3840x2160 /home/d/bin/youtube_tools/4kclear.png "$file"; done