我曾经使用 youtube-dl 命令行工具下载视频,过去两天,每当我尝试下载任何视频时,都会收到如下所示的错误。
$ youtube-dl https://www.youtube.com/watch?v=bFew8mgQJ9o
[youtube] Setting language
[youtube] bFew8mgQJ9o: Downloading video webpage
[youtube] bFew8mgQJ9o: Downloading video info webpage
[youtube] bFew8mgQJ9o: Extracting video information
Traceback (most recent call last):
File "/usr/bin/youtube-dl", line 4645, in <module>
main()
File "/usr/bin/youtube-dl", line 4636, in main
_real_main()
File "/usr/bin/youtube-dl", line 4620, in _real_main
retcode = fd.download(all_urls)
File "/usr/bin/youtube-dl", line 869, in download
ie.extract(url)
File "/usr/bin/youtube-dl", line 1135, in extract
return self._real_extract(url)
File "/usr/bin/youtube-dl", line 1406, in _real_extract
url_map = dict((ud['itag'][0], ud['url'][0] + '&signature=' + ud['sig'][0]) for ud in url_data)
File "/usr/bin/youtube-dl", line 1406, in <genexpr>
url_map = dict((ud['itag'][0], ud['url'][0] + '&signature=' + ud['sig'][0]) for ud in url_data)
KeyError: 'sig'
这是怎么回事?
答案1
遇到了完全一样的问题。
通过以下方式更新 youtube-dl:
sudo youtube-dl -U
通过 sudo 运行 youtube-dl
sudo youtube-dl
它会通知他们已经更改了发行版,需要更新。按回车键,一切就绪。
答案2
您需要先导出代理设置,然后才能使用youtube-dl
它从 YouTube 下载视频。为此,请使用以下方法导出代理设置:
export http_proxy=http://username:password@host:port_no/
export https_proxy=https://username:password@host:port_no/
export HTTP_PROXY=http://username:password@host:port_no/
export HTTPS_PROXY=https://username:password@host:port_no/
用以下代码替换用户名、密码、主机名和端口号你的相应的变量。请记住将用户名或密码中的任何特殊字符(如果有)替换为其 HTML 代码。如果没有用户名和密码,请忽略它们并将其导出为:
export HTTP_PROXY=http://host:port_no/
ETC。
例如:
export HTTP_PROXY=http://123431212:[email protected]:3128/
您还可以将其写入您的~/.bashrc
文件中,以避免在将来的会话中一遍又一遍地写入它们。
完成此操作后,重新尝试下载视频。
答案3
当我尝试使用 sudo 升级时,如另一个答案所示:
sudo youtube-dl -U
我收到一条消息,说 youtube-dl 已使用包管理器安装,我应该使用相同的包管理器来升级它。但我已经完成了
sudo easy_install -U youtube-dl
最后,只需使用 sudo 运行它就可以了。
sudo youtube-dl
答案4
youtube-dl
从命令行安装sudo apt-get install youtube-dl
,然后使用:
sudo youtube-dl "https://www.youtube.com/watch?v=bFew8mgQJ9o"
确保sudo
在上述命令之前使用!