Tente pegar a duração em segundos, pois isso tornará tudo mais fácil:
Sua função de conversão pode acabar sendo:
convert() {
# Get duration in milliseconds, then convert to seconds
duration=$(($(mediainfo --Inform="General;%Duration%" "${in_file}" ) / 1000 ))
# Calculate random time
random_time=$(date -u -d @$(shuf -i 0-${duration} -n 1) +"%T")
# Take screenshot
ffmpeg -ss ${random_time} -i "$in_file" -vframes 1 -q:v 2 "$output_dir/$output_file"
}