Shuf
Используйте команду shuf
:
shuf -en1 dir/*.mp4
Если у вас нет shuf
(например, в BSD), вы можете написать свой собственный shuf -en1
очень легко:
shufen1() {
shift "$((RANDOM % $#))" # slightly biased towards small numbers, at most 32767
printf %s\\n "$1"
}
Чистое bash решение с использованием массивов
Для полноты, вот чистое bash решение. Однако это имеет те же проблемы, что и самописная функция shufen1
.
a=(dir/*.mp4)
printf %s\\n "${a[RANDOM % ${#a[@]}]}"
Использование этих решений
Обе команды работают при условии, что существует хотя бы один файл mp4 написано строчными буквами. Вы можете использовать сопоставление без учета регистра, используя shopt -s nocaseglob
.
. Возможно, вы захотите установить shopt -s failglob
, чтобы получить ошибку, если такого файла нет, в противном случае будет напечатана литеральная строка dir/*.mp4
.
Чтобы использовать любое из этих решений, запишите их в подоболочку:
ffmpeg -re -stream_loop -1 -i "$(shuf -en1 videos/*.mp4)"
ffmpeg -re -stream_loop -1 -i "$(a=(videos/*.mp4); printf %s\\n "${a[RANDOM % ${#a[@]}]}")"