我的GitHub | 我的博客 | 我的微信 | 我的邮箱 |
---|---|---|---|
baiqiantao | baiqiantao | bqt20094 | baiqiantao@sina.com |
目录
youtube-dl
Command-line program to download videos from YouTube.com and other video sites
youtube-dl 可以将 YouTube 等视频网站的各种视频全部下载下来,虽然它的名字只写了 YouTube,但其实支持现在大多数的视频网站,绝对称得上是老司机必备的神兵利器。
youtube-dl is a
command-line program
to download videos from YouTube.com and a few more sites. It requires thePython
interpreter, version 2.6, 2.7, or 3.2+, and it is not platform specific. It should work on your Unix box, on Windows or on macOS. It is released to the public domain, which means you can modify it, redistribute it or use it however you like.
环境配置
Python
youtube-dl 是基于 Python 编写的软件,要使用 youtube-dl,我们首先需要安装 Python。
下载 python 最新版本并安装,,注意勾选下面的 Add Python *.* to PATH
输入以下指令判断是否安装成功
python --version
ffmpeg
FFmpeg主要用来合并视频分段以及对视频重新编码/封装,与 youtube-dl 配合使用,不是必须的,但建议安装。
进入FFmpeg官网,进入下载页面,根据自己的操作系统选择下载最新的 static 版本。下载后解压,不用管它里面的东西,在 PATH
里添加解压之后的 bin
文件夹路径
输入以下指令判断是否安装成功
ffmpeg -version
youtube-dl
Windows users can download an
youtube-dl.exe
file and place it in any location on theirPATH
方式一:下载 youtube-dl.exe 程序使用
Windows users can download an
youtube-dl.exe
file and place it in any location on theirPATH
可以通过下面的命令来更新 youtube-dl
youtube-dl -U
方式二:接使用命令行来安装(推荐)
在安装了 Python 之后,在cmd
中输入下面的代码即可自动下载安装 youtube-dl
pip install youtube-dl //直接安装youtube-dl
pip install --upgrade youtube-dl //安装youtube-dl并更新
输入以下指令判断是否安装成功
youtube-dl --version
简易使用教程
查看所有音视频类型
查看所有音视频类型,只看不下载
youtube-dl -F [url]
如果不加 -F 参数的话,会自动选择(猜测是)清晰度最高的视频下载
这是一个列清单参数,执行后并不会下载视频,但能知道这个目标视频都有哪些格式存在,这样就可以有选择的下载啦!
λ youtube-dl.exe -F https://youtu.be/UAqmF1o-Qyo
[youtube] UAqmF1o-Qyo: Downloading webpage
[info] Available formats for UAqmF1o-Qyo:
format code extension resolution note
249 webm audio only tiny 49k , opus @ 50k (48000Hz), 107.48KiB
250 webm audio only tiny 65k , opus @ 70k (48000Hz), 140.36KiB
251 webm audio only tiny 127k , opus @160k (48000Hz), 267.96KiB
140 m4a audio only tiny 130k , m4a_dash container, mp4a.40.2@128k (44100Hz), 279.95KiB
278 webm 82x144 144p 40k , webm container, vp9, 30fps, video only, 64.46KiB
160 mp4 82x144 144p 44k , avc1.4d400b, 30fps, video only, 73.13KiB
242 webm 136x240 144p 92k , vp9, 30fps, video only, 117.69KiB
133 mp4 136x240 144p 103k , avc1.4d400c, 30fps, video only, 160.30KiB
243 webm 202x360 240p 170k , vp9, 30fps, video only, 198.97KiB
134 mp4 202x360 240p 211k , avc1.4d400d, 30fps, video only, 304.17KiB
244 webm 270x480 240p 260k , vp9, 30fps, video only, 316.28KiB
135 mp4 270x480 240p 370k , avc1.4d4015, 30fps, video only, 546.42KiB
247 webm 406x720 360p 495k , vp9, 30fps, video only, 601.83KiB
136 mp4 406x720 360p 719k , avc1.64001e, 30fps, video only, 1011.73KiB
248 webm 608x1080 480p 952k , vp9, 30fps, video only, 1006.20KiB
137 mp4 608x1080 480p 1469k , avc1.64001f, 30fps, video only, 1.84MiB
271 webm 810x1440 720p 2006k , vp9, 30fps, video only, 2.56MiB
313 webm 1080x1920 1080p 2848k , vp9, 30fps, video only, 3.36MiB
18 mp4 202x360 240p 248k , avc1.42001E, 30fps, mp4a.40.2@ 96k (44100Hz), 533.71KiB
22 mp4 406x720 360p 600k , avc1.64001F, 30fps, mp4a.40.2@192k (44100Hz) (best)
下载指定质量的音视频
通过上一步获取到了所有视频格式的清单,最左边一列就是编号,对应着不同的格式
youtube-dl -f [format code] [url]
youtube-dl -f 22 https://youtu.be/UAqmF1o-Qyo
[download] Destination: 【王者荣耀-短视频】这韩信李白不对劲-UAqmF1o-Qyo.mp4
[download] 100% of 1.26MiB in 00:31
由于 YouTube 的 1080p 及以上的分辨率都是音视频分离的,所以我们需要分别下载视频和音频,可以使用 313+251
这样的组合
youtube-dl -f 313+251 https://youtu.be/UAqmF1o-Qyo
[youtube] UAqmF1o-Qyo: Downloading webpage
[download] Destination: 【王者荣耀-短视频】这韩信李白不对劲-UAqmF1o-Qyo.f313.webm
[download] 100% of 3.36MiB in 00:20
[download] Destination: 【王者荣耀-短视频】这韩信李白不对劲-UAqmF1o-Qyo.f251.webm
[download] 100% of 267.96KiB in 00:09
[ffmpeg] Merging formats into "【王者荣耀-短视频】这韩信李白不对劲-UAqmF1o-Qyo.webm"
Deleting original file 【王者荣耀-短视频】这韩信李白不对劲-UAqmF1o-Qyo.f313.webm (pass -k to keep)
Deleting original file 【王者荣耀-短视频】这韩信李白不对劲-UAqmF1o-Qyo.f251.webm (pass -k to keep)
如果系统中安装并正确配置了 ffmpeg 的话,youtube-dl 会自动合并下下好的视频和音频,然后自动删除单独的音视频文件
下载字幕
youtube-dl --write-sub [url]
这样会下载一个 vtt 格式的英文字幕和 mkv 格式的 1080p 视频下来
youtube-dl --write-sub --skip-download [url] //下载单独的vtt字幕文件,而不会下载视频
youtube-dl --write-sub --all-subs [url] //下载所有语言的字幕(如果有的话)
youtube-dl --write-auto-sub [url] //下载自动生成的字幕(YouTube only)
下载视频列表
youtube-dl -f [format code] [palylist_url]
这种方式可以下载指定清晰度的 mp4 视频
youtube-dl [playlist_url] //下载视频列表,这种方式下载的视频可能是mkv格式或者webm格式
youtube-dl -cit [playlist_url] //下载视频列表,这种方式下载的视频可能是mkv格式或者webm格式
youtube-dl --yes-playlist [url] //当链接为视频列表,则下载该列表视频,跟上面的一样,可能是mkv或者webm格式
命令大全
youtube-dl [OPTIONS] URL [URL...]
通用选项
-h, --help 打印帮助文档
--version 打印版本信息
-U, --update 更新到最新版(需要权限)
-i, --ignore-errors 遇到下载错误时跳过
--abort-on-error 遇到下载错误时终止
--dump-user-agent 显示当前使用的浏览器(User-agent)
--list-extractors 列出所有的提取器(支持的网站)
--extractor-descriptions 同上
--force-generic-extractor 强制使用通用提取器下载
--default-search PREFIX 使用此前缀补充不完整的URLs,例如:"ytsearch2 yt-dl" 从youtube搜索并下载两个关于yt-dl视频. 使用"auto"youtube-dl就会猜一个,一般效果等价于"ytsearch"("auto_warning"猜测时加入警告).我已知支持的PREFIX:ytsearch (youtube), ytsearchdate (youtube), yvsearch (yahoo videos), gvsearch (google videos)
--ignore-config 不读取配置文件,当时用了全局配置文件/etc/youtube-dl.conf:不再读取 ~/.config/youtube-dl/config (%APPDATA%/youtube-dl/config.txt on Windows)
--config-location PATH 使用指定路径下的配置文件
--flat-playlist 列出列表视频但不下载
--mark-watched 标记看过此视频 (YouTube only)
--no-mark-watched 不标记看过此视频 (YouTube only)
--no-color 打印到屏幕上的代码不带色
网络选项
--proxy URL 使用HTTP/HTTPS/SOCKS协议的代理.如:socks5://127.0.0.1:1080/.
--socket-timeout SECONDS 放弃连接前等待时间
--source-address IP 绑定的客户端IP地址
-4, --force-ipv4 所有连接通过IPv4
-6, --force-ipv6 所有连接通过IPv6
地理限制
--geo-verification-proxy URL 使用此代理地址测试一些有地理限制的地址
--geo-bypass 绕过地理限制通过伪装X-Forwarded-For HTTP头部的客户端ip
--no-geo-bypass 不 绕过地理限制通过伪装X-Forwarded-For HTTP头部的客户端ip
--geo-bypass-country CODE 强制绕过地理限制通过提供准确的ISO 3166-2标准的国别代码
--geo-bypass-ip-block IP_BLOCK 强制绕过地理限制通过提供精确的无类别域间路由IP段
视频选择
--playlist-start NUMBER 指定列表中开始下载的视频(默认为1)
--playlist-end NUMBER 指定列表中结束的视频(默认为last)
--playlist-items ITEM_SPEC 指定列表中要下载的视频项目编号.如:"--playlist-items 1,2,5,8"或"--playlist-items 1-3,7,10-13"
--match-title REGEX 下载标题匹配的视频(正则表达式或区分大小写的字符串)
--reject-title REGEX 跳过下载标题匹配的视频(正则表达式或区分大小写的字符串)
--max-downloads NUMBER 下载NUMBER个视频后停止
--min-filesize SIZE 不下载小于SIZE的视频(e.g. 50k or 44.6m)
--max-filesize SIZE 不下载大于SIZE的视频(e.g. 50k or 44.6m)
--date DATE 仅下载上传日期在指定日期的视频
--datebefore DATE 仅下载上传日期在指定日期或之前的视频 (i.e. inclusive)
--dateafter DATE 仅下载上传日期在指定日期或之后的视频 (i.e. inclusive)
--min-views COUNT 不下载观影数小于指定值的视频
--max-views COUNT 不下载观影数大于指定值的视频
--match-filter FILTER 通用视频过滤器
--no-playlist 当视频链接到一个视频和一个播放列表时,仅下载视频
--yes-playlist 当视频链接到一个视频和一个播放列表时,下载视频和播放列表
--age-limit YEARS 下载合适上传年限的视频
--download-archive FILE 仅下载档案文件中未列出的影片,已下载的记录ID
--include-ads 同时下载广告(实验)
下载选项
-r, --limit-rate RATE 最大bps (e.g. 50K or 4.2M)
-R, --retries RETRIES 重试次数 (默认10), or "infinite".
--fragment-retries RETRIES 一个分段的最大重试次数(default is 10), or "infinite" (DASH, hlsnative and ISM)
--skip-unavailable-fragments 跳过不可用分段(DASH, hlsnative and ISM)
--abort-on-unavailable-fragment 放弃某个分段当不可获取时
--keep-fragments 下载完成后,将下载的片段保存在磁盘上; 片段默认被删除
--buffer-size SIZE 设置缓冲区大小buffer (e.g. 1024 or 16K) (default is 1024)
--no-resize-buffer 不自动调整缓冲区大小.默认情况下自动调整
--playlist-reverse 以相反的顺序下载播放列表视频
--playlist-random 以随机的顺序下载播放列表视频
--xattr-set-filesize Set file xattribute ytdl.filesize with expected file size (experimental)
--hls-prefer-native 使用本机默认HLS下载器而不是ffmpeg
--hls-prefer-ffmpeg 使用ffmpeg而不是本机HLS下载器
--hls-use-mpegts 使用TS流容器来存放HLS视频,一些高级播放器允许在下载的同时播放视频
--external-downloader COMMAND 使用指定的第三方下载工具,当前支持:aria2c,avconv,axel,curl,ffmpeg,httpie,wget
--external-downloader-args ARGS 给第三方下载工具指定参数,如:--external-downloader aria2c --external-downloader-args -j8
文件系统选项
-a, --batch-file FILE 文件中包含需要下载的URL
--id 仅使用文件名中的视频ID
-o, --output TEMPLATE Output filename template, see the "OUTPUT TEMPLATE" for all the info
--autonumber-start NUMBER 指定%(autonumber)s的起始值(默认为1)
--restrict-filenames 将文件名限制为ASCII字符,并避免文件名中的“&”和空格
-w, --no-overwrites 不要覆盖文件
-c, --continue 强制恢复部分下载的文件。 默认情况下,youtube-dl仅在可能时将恢复下载。
--no-continue 不要恢复部分下载的文件(从头开始重新启动)
--no-part 不使用.part文件 - 直接写入输出文件
--no-mtime 不使用Last-modified header来设置文件最后修改时间
--write-description 将视频描述写入.description文件
--write-info-json 将视频元数据写入.info.json文件
--write-annotations 将视频注释写入.annotations.xml文件
--load-info-json FILE 包含视频信息的JSON文件(使用“--write-info-json”选项创建)
--cookies FILE 文件从中读取Cookie(经测试,export cookies插件可以使用,但firebug导出的cookies导致错误,chrome下请用cookies.txt)注意:不同平台windows、Linux、OSX之间需要转换CE LF才能使用!
--cache-dir DIR 文件存储位置。youtube-dl需要永久保存一些下载的信息。默认为$XDG_CACHE_HOME/youtube-dl或/.cache/youtube-dl。目前,只有YouTube播放器文件(对于具有模糊签名的视频)进行缓存,但可能会发生变化。
--no-cache-dir 不用缓存
--rm-cache-dir 删除所有缓存文件
缩略图
--write-thumbnail 把缩略图写入硬盘
--write-all-thumbnails 将所有缩略图写入磁盘
--list-thumbnails 列出所有可用的缩略图格式
详细/模拟选项
-q, --quiet 激活退出模式
--no-warnings 忽略警告
-s, --simulate 不下载不存储任何文件到硬盘,模拟下载模式
--skip-download 不下载视频
-g, --get-url 模拟下载获取视频直连
-e, --get-title 模拟下载获取标题
--get-id 模拟下载获取id
--get-thumbnail 模拟下载获取缩略图URL
--get-description 模拟下载获取视频描述
--get-duration 模拟下载获取视频长度
--get-filename 模拟下载获取输出视频文件名
--get-format 模拟下载获取输出视频格式
-j, --dump-json 模拟下载获取JSON information.
-J, --dump-single-json 模拟下载获取每条命令行参数的JSON information.如果是个播放列表,就获取整个播放列表的JSON
--print-json 下载的同时获取视频信息的JSON
--newline 进度条在新行输出
--no-progress 不打印进度条
--console-title 在控制台标题栏显示进度
-v, --verbose 打印各种调试信息
--dump-pages 打印下载下来的使用base64编码的页面来调试问题(非常冗长)
--write-pages 将下载的中间页以文件的形式写入当前目录中以调试问题
--print-traffic 显示发送和读取HTTP流量
-C, --call-home 联系youtube-dl服务器进行调试
--no-call-home 不联系youtube-dl服务器进行调试
解决方法
--encoding ENCODING 强制指定编码(实验)
--no-check-certificate 禁止HTTPS证书验证
--prefer-insecure 使用未加密的连接来检索有关视频的信息(目前仅支持YouTube)
--user-agent UA 指定user agent
--referer URL 指定自定义的referer,仅限视频来源于同一网站
--add-header FIELD:VALUE 指定一个自定义值的HTTP头文件,使用分号分割,可以多次使用此选项
--bidi-workaround 围绕缺少双向文本支持的终端工作。需要在PATH中有bidiv或fribidi可执行文件
--sleep-interval SECONDS 在每次下载之前休眠的秒数,或者每次下载之前的随机睡眠的范围的下限(最小可能的睡眠秒数)与-max-sleep-interval一起使用。
--max-sleep-interval SECONDS 每次下载前随机睡眠范围的上限(最大可能睡眠秒数)。只能与--min-sleep-interval一起使用。
视频格式选项
-f, --format FORMAT 视频格式代码,查看"FORMAT SELECTION"获取所有信息
--all-formats 获取所有视频格式
--prefer-free-formats 开源的视频格式优先,除非有特定的请求
-F, --list-formats 列出请求视频的所有可用格式
--youtube-skip-dash-manifest 不要下载关于YouTube视频的DASH清单和相关数据
--merge-output-format FORMAT 如果需要合并(例如bestvideo + bestaudio),则输出到给定的容器格式。mkv,mp4,ogg,webm,flv之一。如果不需要合并,则忽略
字幕选项
--write-sub 下载字幕文件
--write-auto-sub 下载自动生成的字幕文件 (YouTube only)
--all-subs 下载所有可用的字幕
--list-subs 列出所有字幕
--sub-format FORMAT 字幕格式,接受格式偏好,如:"srt" or "ass/srt/best"
--sub-lang LANGS 要下载的字幕的语言(可选)用逗号分隔,请使用--list-subs表示可用的语言标签
验证选项
-u, --username USERNAME 使用ID登录
-p, --password PASSWORD 账户密码,如果此选项未使用,youtube-dl将交互式地询问。
-2, --twofactor TWOFACTOR 双因素认证码
-n, --netrc 使用.netrc认证数据
--video-password PASSWORD 视频密码(vimeo, smotri, youku)
Adobe Pass 选项
--ap-mso MSO Adobe Pass多系统运营商(电视提供商)标识符,使用--ap-list-mso列出可用的MSO
--ap-username USERNAME MSO账号登录
--ap-password PASSWORD 账户密码,如果此选项未使用,youtube-dl将交互式地询问。
--ap-list-mso 列出所有支持的MSO
后处理选项
-x, --extract-audio 将视频文件转换为纯音频文件(需要ffmpeg或avconv和ffprobe或avprobe)
--audio-format FORMAT 指定音频格式: "best", "aac", "flac", "mp3", "m4a", "opus", "vorbis", or "wav"; "best" by default;-x存在时无效
--audio-quality QUALITY 指定ffmpeg/avconv音频质量,为VBR插入一个0(best)-9(worse)的值(默认5),或者指定比特率
--recode-video FORMAT 必要时将视频转码为其他格式(当前支持: mp4|flv|ogg|webm|mkv|avi)
--postprocessor-args ARGS 给后处理器提供这些参数
-k, --keep-video 视频文件在后处理后保存在磁盘上; 该视频默认被删除
--no-post-overwrites 不要覆盖后处理文件; 默认情况下,后处理文件将被覆盖
--embed-subs 在视频中嵌入字幕(仅适用于mp4,webm和mkv视频)
--embed-thumbnail 将缩略图嵌入音频作为封面艺术
--add-metadata 将元数据写入视频文件
--metadata-from-title FORMAT 从视频标题中解析附加元数据,如歌曲标题/艺术家。格式语法和--output相似.也可以使用带有命名捕获组的正则表达式。解析的参数替换现有值。Example: --metadata-from-title "%(artist)s - %(title)s" matches a title like "Coldplay - Paradise". Example (regex): --metadata-from-title "(?P<artist>.+?) - (?P<title>.+)"
--xattrs 将元数据写入视频文件的xattrs(使用dublin core 和 xdg标准)
--fixup POLICY 自动更正文件的已知故障。never(不做警告), warn(只发出警告), detect_or_warn (默认;如果可以的话修复文件,否则警告)
--prefer-avconv 后处理时相较ffmpeg偏向于avconv
--prefer-ffmpeg 后处理优先使用ffmpeg
--ffmpeg-location PATH ffmpeg/avconv程序位置;PATH为二进制所在文件夹或者目录.
--exec CMD 在下载后对文件执行命令,类似于find -exec语法.示例:--exec\'adb push {} /sdcard/Music/ && rm {}\'
--convert-subs FORMAT 转换字幕格式(当前支持: srt|ass|vtt)
2020-07-02