我想从 YouTube 视频中下载所有内容(字幕、卡片、标签、注释、缩略图等(当然还有带音频的视频))(例如,这个)。
我正在使用youtube-dl
,由于要使用的开关数量太多,我似乎找不到任何能满足我需求的东西。我还想以尽可能高的质量下载视频/音频,而不会造成任何质量损失。虽然不是 YouTube,但我也想下载我购买的一些 udemy 课程,这样我就可以在长途旅行时观看它们。
我已经ffmpeg
安装了,而且我听说需要这个才能从 YouTube 进行无损下载,但我不确定如何将它与 链接起来youtube-dl
。
这是我第一次使用youtube-dl
,因此任何帮助都将不胜感激。
答案1
您需要的相关选项:
# Filesystem
--write-annotations
--write-description
--write-info-json
# Thumbnail images
--write-all-thumbnails
# Video format
--format bestvideo+bestaudio/best
--merge-output-format mkv
# Subtitle
--all-subs
--write-auto-sub
--write-sub
# Post-processing
--add-metadata
--embed-subs
将其复制到您的配置文件(/etc/youtube-dl.conf
或~/.config/youtube-dl/config
)。
使用该配置,我下载了这个视频并youtube-dl
写入以下文件:
$ ls
The Problem with Time & Timezones - Computerphile.annotations.xml
The Problem with Time & Timezones - Computerphile.description
The Problem with Time & Timezones - Computerphile.info.json
The Problem with Time & Timezones - Computerphile.jpg
The Problem with Time & Timezones - Computerphile.mkv
我无法mediainfo
在此处发布输出,因为它超出了字符限制,但你可以看到它在 github。
我还想以尽可能高的质量下载视频/音频,并且不造成质量损失。
youtube-dl
默认情况下以最高质量下载视频,但您可以使用强制此行为--format bestvideo+bestaudio/best
。
虽然它不是 YouTube,但我确实也想下载一些我购买的 udemy 课程,以便在长途旅行时观看它们。
请阅读文章我可以将课程下载到我的电脑吗?:
默认情况下,完整的课程不能从电脑上下载。我们这样做是出于对盗版的担忧。
请注意,您始终可以在Udemy 移动应用程序。有关如何下载视频讲座至您的 iOS 移动设备,请点击这里。有关如何下载视频以供在 Android 设备上离线观看的步骤,请单击这里。
我已经
ffmpeg
安装了,而且我听说需要这个才能从 YouTube 进行无损下载,但我不确定如何将它与 链接起来youtube-dl
。
youtube-dl
默认情况下使用avconv
,但--prefer-ffmpeg
允许您使用ffmpeg
。无论如何,此选项对于“无损下载“。在我提供的例子中,youtube-dl
仅用于ffmpeg
将所有下载的格式合并为一个mkv文件。
答案2
要简单地下载视频,你可以使用以下命令:
youtube-dl --all-subs "https://www.youtube.com/watch?v=KYBok-XGsKM"
要选择视频质量,您应该首先使用 -F 选项列出可用的格式。
youtube-dl -F "https://www.youtube.com/watch?v=KYBok-XGsKM"
这是你的视频的输出:
[youtube] KYBok-XGsKM: Downloading webpage
[youtube] KYBok-XGsKM: Downloading video info webpage
[youtube] KYBok-XGsKM: Extracting video information
WARNING: unable to extract uploader nickname
[info] Available formats for KYBok-XGsKM:
format code extension resolution note
249 webm audio only DASH audio 52k , opus @ 50k, 4.19MiB
250 webm audio only DASH audio 75k , opus @ 70k, 5.42MiB
140 m4a audio only DASH audio 129k , m4a_dash container, mp4a.40.2@128k, 10.59MiB
171 webm audio only DASH audio 131k , vorbis@128k, 7.66MiB
251 webm audio only DASH audio 135k , opus @160k, 9.58MiB
278 webm 256x144 144p 98k , webm container, vp9, 30fps, video only, 6.59MiB
160 mp4 256x144 144p 114k , avc1.4d400c, 15fps, video only, 9.04MiB
242 webm 426x240 240p 205k , vp9, 30fps, video only, 11.47MiB
133 mp4 426x240 240p 265k , avc1.4d4015, 30fps, video only, 20.11MiB
243 webm 640x360 360p 362k , vp9, 30fps, video only, 21.93MiB
134 mp4 640x360 360p 602k , avc1.4d401e, 30fps, video only, 20.42MiB
244 webm 854x480 480p 662k , vp9, 30fps, video only, 37.82MiB
135 mp4 854x480 480p 1020k , avc1.4d401f, 30fps, video only, 42.62MiB
247 webm 1280x720 720p 1353k , vp9, 30fps, video only, 81.53MiB
136 mp4 1280x720 720p 2013k , avc1.4d401f, 30fps, video only, 84.69MiB
137 mp4 1920x1080 1080p 2438k , avc1.640028, 30fps, video only, 157.71MiB
248 webm 1920x1080 1080p 2593k , vp9, 30fps, video only, 162.48MiB
264 mp4 2560x1440 1440p 6973k , avc1.640032, 30fps, video only, 459.58MiB
271 webm 2560x1440 1440p 7523k , vp9, 30fps, video only, 485.66MiB
313 webm 3840x2160 2160p 19991k , vp9, 30fps, video only, 1.34GiB
36 3gp 320x? small , mp4v.20.3, mp4a.40.2
17 3gp 176x144 small , mp4v.20.3, mp4a.40.2@ 24k
43 webm 640x360 medium , vp8.0, vorbis@128k
18 mp4 640x360 medium , avc1.42001E, mp4a.40.2@ 96k
22 mp4 1280x720 hd720 , avc1.64001F, mp4a.40.2@192k (best)
以下是一些有用的字幕选项:
--write-sub
Write subtitle file
--write-auto-sub
Write automatically generated subtitle file (YouTube only)
--all-subs
Download all the available subtitles of the video
--list-subs
List all available subtitles for the video
缩略图如下:
--write-thumbnail
Write thumbnail image to disk
--write-all-thumbnails
Write all thumbnail image formats to disk
--list-thumbnails
Simulate and list all available thumbnail formats
您还可以找到有关视频质量的更多信息这里
答案3
@leetbacoon 请参阅最底部的评论回复。(声誉低下,仍抱歉)
笔记:我将使用较长的开关名称以避免混淆。许多使用的开关都有较短的版本。请参阅文档:选项。
笔记:
- 为了视觉方便,\
用于单独显示开关;全部\
可以省略;如果使用,\
请确保 后面没有空格字符\
。
概要: ytdl 命令用于下载具有最高可用视频和音频质量的单个视频文件。将视频保存到其自己的目录中(由您指定)。下载所有可用的元数据,将每个元数据写入相应的文件格式并保存在同一目录中。将视频元数据添加到视频输出文件。
用你自己的替换:
- 用您选择的目录路径替换
/archive/videos/TED_Archive/
开关--download-archive
和。--output
- 示例存储路径 /archive/videos
- 示例视频链接:https://www.youtube.com/watch?v=0bFs6ZiynSU
- 示例频道目录 /TED_Archive
====
youtube-dl \
--limit-rate '0.25M' \
--retries '3' \
--no-overwrites \
--call-home \
--write-info-json \
--write-description \
--write-thumbnail \
--all-subs \
--convert-subs 'srt' \
--write-annotations \
--add-metadata \
--embed-subs \
--download-archive '/archive/videos/TED_Archive/TED_Archive.ytdlarchive' \
--format 'bestvideo+bestaudio/best' \
--merge-output-format 'mkv' \
--output '/archive/videos/TED_Archive/%(upload_date)s_%(id)s/TED_Archive_%(upload_date)s_%(id)s_%(title)s.%(ext)s' \
'https://www.youtube.com/watch?v=0bFs6ZiynSU' ;
笔记:' '
为了保证解析安全, 用 括起来所有参数。
解释推荐的开关:
--limit-rate '0.25M'
用于限制每个 youtube-dl 实例可用的最大下载速度,单位为 B/s(每秒字节数)。
参数:任何带有大写单位后缀的正整数。
单位后缀:K 代表千字节;M 代表兆字节;不清楚是否支持千兆字节。
添加:
1. 避免互联网连接堵塞。2
. 有助于管理多个并发 ytdl 实例的下载速度。
省略:
1. 堵塞互联网;无法浏览,YouTube 视频播放滞后。2
. 将尽快下载视频。
笔记:您可以同时运行多个 youtube-dl 实例。--retries '5'
用于在视频下载失败时自动重试。在下载播放列表或整个频道(在 Youtube 术语中,也是(该特定频道的)播放列表)时很有用。
值:选择任意正整数。默认值为10
。最大值为infinite
(以文字字符串形式输入)。--continue
参数:没有任何
添加:
1. 将强制恢复部分文件的下载
笔记:ytdl 分块下载视频;如果 ytdl 在下载过程中意外终止,则会保留分块。
省略:
1. 默认情况下,ytdl 将恢复下载(如果可能)。--no-overwrites
参数:没有任何
添加:将要不是用相同的名称覆盖现有的元数据文件。
省略:将覆盖具有相同名称的现有元数据文件,但不会覆盖视频文件。--call-home
用于联系ytdl服务器进行调试。“如果您的服务器有多个 IP 或您怀疑存在审查,添加 --call-home 可能是获得更多诊断信息的好主意。” – 文档:错误,检索日期 20180408,
--write-info-json
参数:没有任何
输出格式:json;
信息内容:观看次数、喜欢、上传日期、视频和音频质量信息等(但不包括视频文字描述(上传者发布在视频下方(2018 youtube 布局)))
添加:将视频元数据写入单独的.info.json
文件。保存在与视频文件相同的文件夹中。
省略:不会影响--add-metadata
仍会将视频元数据写入视频输出文件。--write-description
参数:没有任何
输出格式:纯文本;
添加:将视频上传者在视频描述部分(视频下方(2018 youtube 布局))发布的文本写入单独的Write .description
文件中。保存在与视频文件相同的文件夹中。--write-thumbnail
将最高分辨率的可用缩略图(maxresdefault.jpg
由 YouTube 调用)写入.jpg
文件。根据指定的模板重命名--output
。保存在与视频文件相同的目录中。
参数:没有任何
输出格式:仅 JPEG;
笔记:用于youtube-dl --list-thumbnails '<video_url>'
调查特定视频的可用缩略图(不适用于播放列表链接);例如:youtube-dl --list-thumbnails 'https://www.youtube.com/watch?v=odwfHu6MDuU'
--write-annotations
将视频注释写入.annotations.xml
文件。根据 指定的模板重命名--output
。保存在与视频文件相同的目录中。
参数:没有任何
输出格式:.xml;--all-subs
将 视频中所有自定义创建的可用字幕写入各自的文件(例如:subtitles.en.vtt
、、subtitles.fr.vtt
)subtitles.es.vtt
参数:没有任何
输出格式:默认.vtt
;可以使用--sub-format
错误消息: 如果没有可用的字幕,则会将警告消息打印到标准输出 - 格式:WARNING: video doesn't have subtitles
有用的命令:
笔记:用于youtube-dl --list-subs '<video_url>'
调查特定视频的可用缩略图(不适用于播放列表链接);
例如:youtube-dl --list-subs 'https://www.youtube.com/watch?v=odwfHu6MDuU'
--convert-subs 'srt'
参数:字符串:格式扩展名 ass、srt 或 best
输出格式:默认.vtt;或根据规范
添加:将字幕写入指定文件格式(例如.srt
:)。保存在与视频文件相同的文件夹中。
省略:字幕将写为.vtt
错误消息:如果没有可用的字幕,则会将 INFO 消息打印到标准输出 - 格式:[ffmpeg] There aren't any subtitles to convert
笔记:转换将在文件下载后作为后处理步骤执行.vtt
。如果 ytdl 执行意外终止,某些字幕文件可能无法转换(在这种情况下再次执行命令)。--add-metadata
参数:没有任何
行为:将元数据写入视频输出文件。
笔记:不需要.info.json
由生成--write-info-json
--embed-subs
参数:没有任何
行为:
1. 将字幕写入视频输出文件;
2. 仅适用于 mp4、webm 和 mkv 视频
错误消息: 如果没有可用的字幕,则会将 INFO 消息打印到标准输出 - 格式:[ffmpeg] There aren't any subtitles to embed
笔记:不需要.vtt
由生成--write-sub
,--write-auto-sub
或--all-sub
--download-archive '<archive_path>/<channel_name>/<channel_name>.ytdlarchive'
行为:用于创建包含之前下载的视频链接的文本文件。下载整个频道时可跳过这些视频。仅下载单个视频时无需此操作。
参数:字符串:视频存档路径的组合,以频道命名的目录。文件名由频道名称和.ytdlarchive
文件扩展名组成。(也可以是 .txt;但独特的格式可以轻松区分)
输出格式:纯文本;每行一个 videoID
添加:
1. ytdl 读取此文件,忽略并跳过其中列出的所有带有 videoID 的视频,即使尚未下载。2
. 自动将最后下载的视频的 videoID 添加到此文件
省略:如果视频文件和元数据文件存在,ytdl 将再次下载它们。--format ''
参数:推荐字符串:bestvideo+bestaudio/best
确保最高的视频和音频质量组合。
添加:完全控制视频质量和音频质量及其组合以及回退质量
省略:默认youtube-dl will guess it for you by default
-文档
笔记:看文档:格式选择示例--merge-output-format '<video_format>'
参数:视频文件格式。(例如:mp4、mkv、3gp 等)
添加:可以指定视频文件格式
省略:默认youtube-dl will guess it for you by default
-文档
笔记:看文档:格式选择
有用的命令:
笔记:用于youtube-dl --list-formats '<video_url>'
调查特定视频的可用视频和音频质量和格式(不适用于播放列表链接);
例如:youtube-dl --list-formats 'https://www.youtube.com/watch?v=odwfHu6MDuU'
--output '<template>'
参数:
1. 视频文件格式。(例如:mp4、mkv、3gp 等);
2. 推荐:%(upload_date)s_%(id)s_%(title)s.%(ext)s
添加:影响视频文件和所有元数据文件的文件命名约定
省略:默认情况下,视频标题将是文件名。默认模板:%(id)s.%(ext)s
将输出例如:testvideo.mkv
笔记:不要忘记%
前缀和s
后缀(其他后缀也存在);_
模板元素之间的只是一个分隔符,可以是任何其他字符。例如:%(upload_date)s-%(id)s
笔记:看文档:输出模板'<video_url>'
参数:字符串:特定视频的 URL
错误信息:
1. 如果没有提交视频网址,ytdl 将不会执行并显示帮助。2
. 如果提交的视频网址无效,则错误消息将打印到 stdout - 格式:ERROR: u'' is not a valid URL. Set --default-search "ytsearch" (or run youtube-dl "ytsearch:" ) to search YouTube
存储建议:
在您的视频档案中创建一个
misc
目录并将所有单个视频存储在其中。当您从某个频道下载一个或多个视频时,请为该频道创建一个专用目录。在这种情况下,频道名称为
TED Archive
,目录名称为TED_Archive
。(我预先将所有空格字符替换为下划线,以便在使用 bash(或 python)脚本时更轻松地进行目录导航和文件 I/O 操作)。
回复你的评论@leetbacoon
我只是想知道,既然有 1440p 可用,为什么 1080p 的副本被认为是最好的?为什么显示的是 2160p?我这边没有显示该选项(上限为 1440p)– leetbacoon
来自文档
You can also use a file extension (currently 3gp, aac, flv, m4a, mp3, mp4, ogg, wav, webm are supported) to download the best quality format of a particular file extension served as a single file
best: Select the best quality format represented by a single file with video and audio.
bestvideo: Select the best quality video-only format
我认为当你选择best
并指定输出格式时,youtube 会发送它认为最好的视频+音频格式连击针对该格式。这可能受制于 YouTube 的一些内部平衡决策(推测)。
根据我的使用经验,我必须特别指定bestvideo+bestaudio
分别获取视频和音频的最高质量,然后将它们组合在 .mkv 容器中。
我使用它/best
作为后备论点只是为了确保万无一失。