在系统上播放随机视频;小改进包括 DVD

在系统上播放随机视频;小改进包括 DVD

在我的 .bashrc 中,我有一个用于播放随机视频的函数(下面没有写,仅供参考),另一个函数用于播放所有媒体文件,例如:

createmediafiles() {
find ~+ -type f -iregex '.*\.\(mp3\|wav\|ogg\|flac\|mp4\|mov\|avi\)' > ~/mediafiles.txt
find ~+ -type d -name VIDEO_TS >> ~+/mediafiles.txt
}

playmediafiles() {
    while true; do
        while read -r line; do
            shuf -n 1 |
            tee -a ~/played-log.txt |
            xargs -d "\n" mpv
        done < ~/mediafiles.txt
    done
}

我想将 VIDEO_TS 行添加到createmediafiles,但在playmediafiles函数中我想添加一个 IF 语句,这样如果混洗到 in 的行mediafiles.txt是 VIDEO_TS 那么而不是使用 mpv 来播放文件,它将执行以下操作:

tee -a ~/played-log.txt | xargs -d "\n" vlc --fullscreen

管道的读取方式mediafiles.txt与 mpv 的读取方式相同。

如何将其放入 IF 语句中,条件是该行以 VIDEO_TS 结尾?

答案1

我想你可能会尝试做这样的事情:

playmediafiles() {
    local line cmd

    while true; do
        line=$(shuf -n 1 ~/mediafiles.txt)
        case $line in
            *VIDEO_TS* ) cmd=( 'echo' 'vlc' '--fullscreen' ) ;;
            * )          cmd=( 'echo' 'mpv' ) ;;
        esac
        cmd+=( "$line" )
        printf '%s\n' "$line" >> ~/played-log.txt
        "${cmd[@]}"
    done
}

或者:

playmediafiles() {
    local line cmd

    while true; do
        while IFS= read -r line; do
            case $line in
                *VIDEO_TS* ) cmd=( 'echo' 'vlc' '--fullscreen' ) ;;
                * )          cmd=( 'echo' 'mpv' ) ;;
            esac
            cmd+=( "$line" )
            printf '%s\n' "$line" >> ~/played-log.txt
            "${cmd[@]}"
        done < <(shuf ~/mediafiles.txt)
    done
}

第一个脚本永远循环调用,shuf一次随机选择一行mediafiles.txt并将该行存储在变量中line

第二个脚本永远循环调用以随机顺序shuf打印 的全部内容,然后进行第二次循环,每次从输出中打印 1 行并将该行存储在变量 中。mediafiles.txtreadshufline

然后,两者都测试$line它是否包含,并使用或使用适当的命令和参数VIDEO_TS填充数组。然后,他们使用 将 的内容添加到数组的末尾,然后打印数组的内容,然后使用 执行存储在数组中的命令。cmdcmd=( 'echo' 'vlc' '--fullscreen' )cmd=( 'echo' 'mpv' )linecmd+=( "$line" )played-log.txt"${cmd[@]}"

两者之间的唯一区别是第一个生成一个子 shell,为每个要播放的文件调用一次,而第二个生成一个子 shell ,为整个输入文件shuf调用一次,然后每行调用一次。第二个可能会运行得更快一点,但我怀疑您是否会注意到或关心它,因为您是在每行输入之间播放媒体。shufread

完成测试后删除'echo's 以确保它符合您的要求。

相关内容