我制作了一个bash脚本,我可以使用youtube-dl流式传输YouTube视频并使用mplayer播放。我基于这个终端命令:
$ mplayer -ontop -cookies -cookies-file ./cookie.txt $(youtube-dl -gf 34 --cookies ./cookie.txt "https://www.youtube.com/watch?v=<VIDEO ID>")
找到here。
手动输入youtube-dl的视频分辨率和网址选项可以正常工作。但是我想创建一个可以使输入更容易的脚本,所以每次我想播放视频时都不必记住整个命令。
剧本:
#!/bin/bash
echo "Input YouTube ID (the string that follows 'http://www.youtube.com/watch?v='):"
echo ""
read video_id
echo ""
echo "Input Video Resolution (17=144, 5=240, 18=360, 35=480, 22=720, or 37=1080):"
echo ""
read resolution
first_string='mplayer -ontop -cookies -cookies-file ./cookie.txt $(youtube-dl -gf res --cookies ./cookie.txt "https://www.youtube.com/watch?v=VIDEO-ID")'
second_string="${first_string/VIDEO-ID/$video_id}"
last_string="${second_string/res/$resolution}"
$last_string
我已经获得了youtube-dl选项,可以正常使用我设置的字符串替换。当终端尝试读取与youtube-dl相关的选项给出输出时,会出现问题:
Unknown option on the command line: -gf
Error parsing option on the command line: -gf
MPlayer svn r34540 (Ubuntu), built with gcc-4.6 (C) 2000-2012 MPlayer Team
删除-gf并没有太大帮助,给我输出:
Unknown option on the command line: --cookies
Error parsing option on the command line: --cookies
MPlayer svn r34540 (Ubuntu), built with gcc-4.6 (C) 2000-2012 MPlayer Team
我不确定为什么手动输入/复制粘贴命令可以正常使用-gf和--cookies,但是对于bash脚本效果不佳。我使用的是Elementary OS 0.2 Luna 64位(基于Ubuntu 12.04 LTS),Linux内核3.2.057-generic和Bash 4.2.25。任何见解将不胜感激。
答案 0 :(得分:2)
问题在于first_string
的定义。单引号可防止参数扩展,这将停止在子shell中运行的youtube-dl
命令。
不是为shell执行构造字符串,而是使用正确的参数运行所需的命令更好。阅读提示后立即:
mplayer -ontop -cookies -cookies-file ./cookie.txt $(youtube-dl -gf "$resolution" --cookies ./cookie.txt "https://www.youtube.com/watch?v=${video_id}")