youtube-dl; 如何仅下载播放列表,而不下载其中的文件

use*_*675 21 linux playlists youtube

试图从一个 url 中只获取播放列表内容(应该是 600 多个条目),因此:

youtube-dl -i -v --flat-playlist --skip-download https://www.youtube.com/watch?v=CNotezuR73g&list=PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr
Run Code Online (Sandbox Code Playgroud)

根据手册页应该列出播放列表条目,同时防止文件下载。

相反,它在生成此输出后挂起:

~ $ youtube-dl -i -v --flat-playlist --skip-download https://www.youtube.com/watch?v=CNotezuR73g&list=PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr  
[1] 4531  
~ $ [debug] System config: []  
[debug] User config: []  
[debug] Custom config: []  
[debug] Command-line args: ['-i', '-v', '--flat-playlist', '--skip-download', 'https://www.youtube.com/watch?v=CNotezuR73g']  
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8  
[debug] youtube-dl version 2018.07.10  
[debug] Python version 3.6.6 (CPython) - Linux-4.17.6-1-ARCH-x86_64-with-arch  
[debug] exe versions: ffmpeg 4.0.1, ffprobe 4.0.1, rtmpdump 2.4  
[debug] Proxy map: {}  
[youtube] CNotezuR73g: Downloading webpage  
[youtube] CNotezuR73g: Downloading video info webpage  
[debug] Default format spec: bestvideo+bestaudio/best  
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

小智 32

您是否阅读了wysiwig在他的评论中建议的页面?(感谢@wysiwig!

使用 youtube-dl 列出 Youtube 播放列表

无论如何,在这里我将尝试解释您可以做什么(摘自之前的网站)

尝试使用此命令:

youtube-dl -j --flat-playlist "https://<yourYoutubePlaylist>" | jq -r '.id' | sed 's_^_https://youtu.be/_' > result.log
Run Code Online (Sandbox Code Playgroud)

这将在 result.log 中产生与此类似的输出:

https://youtu.be/0gvUCLL-UGE
https://youtu.be/CPV7zcUy4J0
https://youtu.be/4wyZNwIrH9I
...
Run Code Online (Sandbox Code Playgroud)

这应该是您需要的(YT 视频的离散链接列表)。

命令解释 使用-j选项 youtube-dl 将生成一个 JSON 输出,其中包含有关您传递的链接的所有信息(在本例中为播放列表)。

然后将此 JSON 输出传递给jqJSON 处理器(您必须在查看 JQ 网站之前安装它)搜索包含在 JSON 输出中的所有“id”键(0gvUCLL-UGE、CPV7zcUy4J0、4wyZNwIrH9I,...)。然后我们将这些“id”传递给sed每个前缀,并https://youtu.be/给出我之前显示的结果。

注 1:要安装 JQ,您可以简单地使用: sudo apt-get install jq

注 2:此方法仅适用于Youtube

  • 您可以使用 `jq` 格式化 url,而不使用带有 `jq -r '"https://youtu.be/\(.id)"'` 的 sed (2认同)

use*_*675 5

@wysiwig的方法确实在 linux 上产生输出,但不是我所寻求的,因此:

$ youtube-dl --flat-playlist --skip-download https://www.youtube.com/playlist?list=PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr  
Run Code Online (Sandbox Code Playgroud)

输出 :

[YouTube的:播放列表] PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr:下载网页
[点击下载]下载播放列表:全长Arthouse旅馆电影
[YouTube的:播放列表] PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr:下载页面#1
[YouTube的:播放列表] PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr:下载网页#2
[YouTube的:播放列表] PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr:下载页面#3
[youtube:playlist] PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr:下载页面 #4
[youtube:playlist] PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr:下载页面 #5
[youtube:playlist] PLmhy9l7NuItj3sG8h3xAZbjIxr 下载页面:Fullhy9l7NuIth3youtubes 视频下载页面:Fullhy9l7NuIth3youtubes 视频下载页面:Fullhy9l7NuIth36YouTube
视频播放列表
[下载] 正在下载 636 的视频 1
[下载] 正在下载 636 的视频 2
[下载] 正在下载 636 的视频 3
...

我真正想从播放列表中得到的是视频名称,这样我就可以只挑选我想下载的那些,我得到了:

$ youtube-dl -i --get-filename --skip-download https://www.youtube.com/playlist?list=PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr  
Run Code Online (Sandbox Code Playgroud)

输出 :

The Waiters(全长电影,整部电影,整部电影)_免费观看完整电影-CNotezuR73g.mp4
Malcolm X(摩根·弗里曼,完整电影,英文,全长电影)_免费观看完整电影-3C8j1C7HMj8.mp4
The Arizona Kid - 西部片,全长电影,罗伊·罗杰斯主演的全长故事片,经典电影-8McZ6G2Uud8.mp4
Desperado Man aka Sagebrush Trail(西方电影,全长电影,故事片,经典电影)-7udmB5M6IIE.mp4
...