2

我制作了一个 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>")

在这里找到。

手动输入 youtube-dl 的视频分辨率和 URL 选项可以正常工作。但是,我想制作一个脚本,使输入更容易,这样我就不必每次播放视频时都记住整个命令。

剧本:

#!/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。任何见解将不胜感激。

4

1 回答 1

2

问题在于 的定义first_string。单引号可防止参数扩展,这将停止youtube-dl在子 shell 中运行的命令。

与其构造一个字符串供 shell 执行,不如使用正确的参数运行所需的命令。阅读提示后立即:

mplayer -ontop -cookies -cookies-file ./cookie.txt $(youtube-dl -gf "$resolution"    --cookies ./cookie.txt "https://www.youtube.com/watch?v=${video_id}")
于 2013-12-09T16:58:34.977 回答