我想使用 mplayer 从我的终端循环播放 YouTube 视频,为此我编写了以下代码:
#!/bin/bash
if [[ $(echo $*) ]]; then
searchterm="$*"
else
read -p "Enter the video ID: " searchterm
fi
searchterm=$(echo $searchterm | sed -e 's/\ /+/g')
video=$(youtube-dl -g https://youtube.com/v/$searchterm)
while true;
do
mplayer $video
sleep 2;
done
要播放视频,您需要将视频 ID 提供给脚本。例如,如果这是您正在观看的视频:https://www.youtube.com/watch?v=daQhI1JFXn4v=
那么视频ID就是后面的部分daQhI1JFXn4
一切工作正常,除了每次循环时它仍然会下载视频。我想知道是否有任何方法可以更改此设置,以便仅下载文件一次并反复播放。
答案1
我发现avplay
(如果您愿意,可以替换为ffplay
)对此效果更好,但我将其保留为 mplayer。tee
-将其保存到文件中并通过管道在第一次播放时有效。我添加了一项检查以查看之前是否已下载过该文件。
#!/bin/bash
if [[ $(echo $*) ]]; then
searchterm="$*"
else
read -p "Enter the video ID: " searchterm
fi
searchterm=$(echo $searchterm | sed -e 's/\ /+/g')
video=$(youtube-dl -g https://youtube.com/v/$searchterm)
[[ -f $searchterm.mp4 ]] || wget -O - $video 2>/dev/null | tee $searchterm.mp4 | mplayer -
while true;
do
sleep 2;
mplayer $searchterm.mp4
done
答案2
通过重定向将 YouTube-dl 的输出存储在文件中。而不是将命令本身保存在视频变量中。