Tìm kiếm và tạo danh sách phát video dưới định dạng PLS, có thể dùng với phần mềm Kodi và các Media Player khác.
Đoạn mã sau hỗ trợ tìm kiếm và tạo playlist các video trong một thư mục được chỉ định theo định dạng PLS. Danh sách có thể được sắp xếp thứ tự theo tên, thời gian chỉnh sửa (modified time) hoặc thời lượng (duration) theo 2 chiều xuôi hoặc ngược.
gen_pls.sh
#!/bin/bash order="name" sort_args="" valid_orders=(name date duration) usage() { echo "Usage:" echo " $(basename ${0}) [-o ORDER] [-r] <DIR...>" echo " -o Sort by given ORDER" echo " -r Sort in reversed ORDER" echo " ORDER: name date duration" exit } error() { echo "$@" >&2 } # Check if an element exists in an array contains() { local el for el in "${@:2}"; do if [[ "${el}" == "${1}" ]]; then return 0 fi done return 1 } print_from() { awk '{for(i='${1}';i<=NF;++i)printf $i""FS ; print ""}' } # Sorting order order_by() { local sort_args="" if [ "$2" = "reversed" ]; then sort_args="-r" fi case "$1" in name) sort -n ${sort_args} ;; date) while read f; do echo "$(stat -c %y "$f") $f" done | sort -n ${sort_args} | print_from 4 ;; duration) while read f; do echo "$(mediainfo --Inform="Video;%Duration%" "$f") $f" done | sort -n ${sort_args} | print_from 2 ;; esac } # Find all videos in a given directory find_videos() { find "${1}" -type f -not -name "*.part" -exec file -N -i -- {} + | \ sed -n 's!: video/[^:]*$!!p' } while getopts "o:rh" opt 2>/dev/null; do case ${opt} in o) order=${OPTARG,,} if ! contains ${order} "${valid_orders[@]}"; then error "Invalid order" usage fi ;; r) direction="reversed" ;; h) usage;; *) usage;; esac done shift $((OPTIND-1)) count=1 # Mandatory header echo "[playlist]" # Dump the list of videos for dir in "$@"; do find_videos "${dir}" | \ order_by ${order} ${direction} | \ while read video; do echo "File${count}=${video}" count=$((count + 1)) done done
Ví dụ tạo playlist cho Kodi có tên là test.pls
từ các video trong thư mục ~/Videos
, sắp xếp theo ngày tăng dần.
KODI_PLS_DIR=~/.kodi/userdata/playlists/video gen_pls.sh -o date ~/Videos > ${KODI_PLS_DIR}/test.pls