Youtube-dl
命令行程序,用于从YouTube.com和其他视频网站下载视频,是目前最热门下载的工具之一,拥有多个选项,由社区多人维护。
它依赖Python2.6、2.7或3.2+版本,可在Unix、Windows、macOS机器上运行
安装
-
UNIX(Linux/macOS/...):
shellsudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl sudo chmod a+rx /usr/local/bin/youtube-dl
12如果没有
curl
可以使用wget
替换shellsudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl sudo chmod a+rx /usr/local/bin/youtube-dl
12 -
Windows
-
MacOS:
命令说明
youtube-dl [OPTIONS] URL [URL...]
-h
/--help
:打印帮助信息和退出命令--version
:打印版本信息和退出命令-U
/--update
:更新到最新版本,或许需要管理员权限-i
/--ignore-errors
:忽略下载错误,跳过播放列表中不可用的--abort-on-error
:如果遇到错误,中止其他视频的下载--dump-user-agent
:显示当前浏览器的UA信息--list-extractors
:显示所有支持的网站--extractor-descriptions
:显示所有支持的网站的描述--force-generic-extractor
:强制使用命令提取数据--default-search PREFIX
:使用前缀表示不合格的URL,比如gvsearch2
,使用google搜索关键词,从视频中,寻找两个YouTube上的视频,使用auto
,让youtube-dl猜测,auto_warning在猜测时会发出警告,error
,会引发错误,fixup_error
则会修复URL错误--ignore-config
:不使用配置文件,如果提供了全局配置文件的话/etc/youtube-dl.conf
,不使用用户配置文件,~/.config/youtube-dl/config (Windows上:%APPDATA%/youtube-dl/config.txt)
--config-location <PATH>
:配置文件的位置,包含文件目录--flat-playlist
:不提取播放列表,仅列出来--mark-watched
:标记观看过(仅限YouTube)--no-mark-watched
:不标记观看过(仅限YouTube)--no-color
:输出时,不显示颜色- 网络选项
--proxy <URL>
:使用指定的http/https/socks代理,socks需指定协议头,比如socks://127.0.0.1:1080
,使用--proxy ""
表示直连模式--socket-timeout <SECONDS>
:超时时间(秒)--source-address <IP>
:绑定的客户端IP地址-4
,--force-ipv4
:通过IPv4建立所有连接-6
,--force-ipv6
:通过IPv6建立所有连接- 地理限制
--geo-verification-proxy <URL>
:使用此代理验证IP地址对于某些受地理位置限制的网站。--proxy
指定的代理将用于实际下载。--geo-bypass
:通过绕过地理限制,伪造X-Forwarded-For HTTP标头--no-geo-bypass
:不绕过地理限制,通过伪造X-Forwarded-For HTTP标头--geo-bypass-country <CODE>
:强制绕过地理限制,明确提供两个字母的ISO 3166-2
国家/地区代码--geo-bypass-ip-block <IP_BLOCK>
:强制绕过地理限制,带有明确提供的IP块 CIDR符合- 视频选项
--playlist-start <NUMBER>
:播放列表视频的开始位置(默认为1)--playlist-end <NUMBER>
:播放列表视频的结尾位置(默认为最后一个)--playlist-items <ITEM_SPEC>
:指明要下载的播放列表视频项目,在播放列表中以逗号分隔,比如--playlist-items 1,2,5,8
,--playlist-items 1-3,5,10-13
--match-title <REGEX>
:仅下载匹配标题的视频(正则表达式 或 不区分大小写的字符串)--reject-title <REGEX>
:跳过下载以找到匹配标题的视频 (正则表达式或不区分大小写的字符串)--max-downloads <NUMBER>
:最大下载文件数,超过后中止--min-filesize <SIZE>
:限制最小下载文件的大小,比如50k
或44.6m
--max-filesize <SIZE>
:限制最大下载文件的大小,比如500k
或100m
--date <DATE>
:仅下载在该日期上传的视频--datebefore <DATE>
:仅下载通过的视频或在该日期之前上传的视频(包括该日期)--dateafter <DATE>
:仅下载通过的视频或在该日期之后上传的视频(包括该日期)--min-views <COUNT>
:不下载少于<COUNT>
次数观看的视频--max-views <COUNT>
:不下载超过<COUNT>
次数观看的视频--match-filter <FILTER>
:筛选视频条件过滤器,指定任何键(可用键参考OUTPUT TEMPLATE
)匹配到的值,!key
判断key是否存在,如果key > number
,比如comment_count > 12
,>=,<,<=,!=,=
同样可以用来比较,如果key = 'LITERAL'
,比如uploader = 'Smith'
,!=
也可以使用,&
并且,?
或。比如--match-filter "like_count > 100 & dislike_count <? 50 & description"
--no-playlist
:如果URL是视频和播放列表,则仅下载视频。--yes-playlist
:如果URL是视频和播放列表,则下载播放列表--age-limit <YEARS>
:仅下载匹配给定<YEARS>
的视频--download-archive <FILE>
:仅下载未列出的视频存档文件。记录所有的ID 下载了其中的视频。--include-ads
:下载时包括广告 (实验性)- 下载选项
-r RATE
/--limit-rate RATE
:最大下载速率/秒(以字节为单位),比如50K
或4.2M
-R RETRIES
/--retries RETRIES
:重连次数,默认10
,或者不限infinite
--fragment-retries RETRIES
:片段的重连次数,默认10
,或者不限infinite
,(DASH, hlsnative and ISM)--skip-unavailable-fragments
:跳过不可用的片段(DASH, hlsnative和ISM)--abort-on-unavailable-fragment
:当某些片段不可用时中止下载--keep-fragments
:下载完成后保留下载的片段,默认是不保留--buffer-size SIZE
:下载缓冲区的大小(例如1024
或16K
),默认值为1024
--no-resize-buffer
:不要自动调整缓冲区大小。缓冲区默认会自动从初始调整大小SIZE的值。--http-chunk-size SIZE
:基于块的HTTP下载的块大小(例如10485760或10M) (默认为禁用)。可能有用,用于绕过带宽限制,由网络服务器强加(实验性)--playlist-reverse
:反向下载播放列表视频--playlist-random
:随机下载播放列表视频--xattr-set-filesize
:将文件xattributeytdl.filesize
设置为预期文件大小--hls-prefer-native
:改用本地HLS下载器替代ffmpeg--hls-prefer-ffmpeg
:使用ffmpeg代替本地HLS 下载器--hls-use-mpegts
:将mpegts容器用于HLS 视频,允许下载时播放视频(某些播放器不支持)--external-downloader COMMAND
:使用指定的外部下载器。 目前支持aria2c,avconv,axel,curl,ffmpeg,httpie,wget--external-downloader-args ARGS
:将这些参数提供给外部下载器- 文件系统选项
-a FILE
/--batch-file FILE
:包含要下载的URL地址文件(“-”:stdin),一行一个url,从#
开始,;
视为评论,]
视为忽略--id
:在文件名中仅使用视频ID-o, --output TEMPLATE
:输出文件名模板,参考OUTPUT TEMPLATE
--output-na-placeholder PLACEHOLDER
:输出文件名模板中不可用时的占位符,默认为NA
--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
头来设置文件修改时间--write-description
:将视频描述写入到.description
文件--write-info-json
:将视频元数据写入到.info.json
文件--write-annotations
:将视频注释写入到.annotations.xml
文件--load-info-json FILE
:JSON文件包含视频信息(由--write-info-json
选项创建)--cookies FILE
:读取cookies文件或从cookie jar
引入--cache-dir DIR
:youtube-dl缓存一些已经下载的固定数据所在的文件目录,默认是$XDG_CACHE_HOME/youtube-dl
or~/.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
:模拟,安静但可打印URL-e, --get-title
:模拟,安静但打印标题--get-id
:模拟,安静但可打印ID--get-thumbnail
:模拟,安静但打印缩略图UR--get-description
:模拟,安静但可打印视频 描述--get-duration
:模拟,安静但可打印视频长度--get-filename
:模拟,安静但打印输出文档名称--get-format
:模拟,安静但打印输出格式-j, --dump-json
:模拟,安静但打印JSON 信息。参见“OUTPUT TEMPLATE”-J, --dump-single-json
:模拟,安静但打印JSON 每个命令行的信息 争论。如果url是一个播放列表,转储整个播放列表单行显示信息。--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
:自定义UA--referer URL
:如果视频访问受限,可自定义referer头--add-header FIELD:VALUE
:自定义HTTP请求头,以冒号;
分隔,可以多次使用此选项--bidi-workaround
:解决缺少的终端 双向文本支持。需要 bidiv或fribidi可执行文件在PATH中--sleep-interval SECONDS
:每次下载间隔的时间,如果提供了--max-sleep-interval
值,则SECONDS`为最小间隔--max-sleep-interval SECONDS
:每次下载最大间隔时间,只能与最小间隔一起使用- 视频格式
-f, --format FORMAT
:视频格式代码,参考FORMAT SELECTION
,--all-formats
:下载所有可用的视频格式--prefer-free-formats
:首选免费视频格式,除非指定一个-F, --list-formats
:列出视频的所有可用格式--youtube-skip-dash-manifest
:不要下载DASH清单和 YouTube视频上的相关数据--merge-output-format FORMAT
:如果需要合并,输出一个允许的格式,在mkv、mp4、ogg、webm、flv,如果不需要合并,则忽略- 字幕选项
--write-sub
:写字幕文件--write-auto-sub
:编写自动生成的字幕文件(仅YouTube)--all-subs
:下载该视频所有可用的字幕--list-subs
:列出该视频所有可用的字幕--sub-format FORMAT
:字幕格式,接受多种格式,比如,srt
或ass/srt/best
--sub-lang LANGS
:字幕语言下载,用逗号分隔,使用--list-subs
列出可用的语言tags- 身份验证选项
-u, --username USERNAME
:使用该帐户ID登录-p, --password PASSWORD
:账户密码。如果这个选项没有,youtube-dl会询问。-2, --twofactor TWOFACTOR
:两步验证验证码-n, --netrc
:使用.netrc
身份验证数据--video-password PASSWORD
:视频密码(vimeo,优酷)- Adobe Pass选项
--ap-mso MSO
:Adobe Pass多系统运营商(电视 提供程序)标识符,使用--ap-list-mso 有关可用的MSO的列表--ap-username USERNAME
:多系统操作员帐户登录--ap-password PASSWORD
:多系统操作员帐户 密码。如果忽略此选项, youtube-dl将进行互动询问。--ap-list-mso
:列出所有支持的多系统运营人员- 下载后选项
-x, --extract-audio
:将视频转换为仅音频文件(需要ffmpeg/avconv和ffprobe/avprobe)--audio-format FORMAT
:指定音频格式,"best", "aac", "flac", "mp3", "m4a", "opus", "vorbis", 或 "wav",默认是"best",如果没有-x
,则没有效果--audio-quality QUALITY
:指定ffmpeg/avconv音频质量,介于0(更好)和9(更差)之间的值,用于VBR或特定比特率,比如128K
(默认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
相似,具名的正则表达式捕获组也可以使用,解析的参数将替换现有的值,比如,--metadata-from-title "%(artist)s - %(title)s"
,匹配了标题 "Coldplay - Paradise",再比如使用正则,--metadata-from-title "(?P<artist>.+?) - (?P<title>.+)"
--xattrs
:将元数据写入视频文件的 xattrs,使用dublin核心和xdg 标准--fixup POLICY
:自动更正已知的故障文件,never:什么也不做;warn:只发出警告;detect_or_warn :默认值,如果可以,则修复文件,否则发出警告。--prefer-avconv
:在ffmpeg上优先使用avconv来运行 后处理器--prefer-ffmpeg
:优先使用ffmpeg而不是avconv来运行 后处理器(默认值)--ffmpeg-location PATH
:ffmpeg/avconv二进制文件的位置,二进制文件的路径包含目录。--exec CMD
:在文件下载和后处理后执行命令,类似find
的-exec
语法,比如--exec 'adb push {} /sdcard/Music/ && rm {}'
--convert-subs FORMAT
:将字幕转换为其他格式,当前支持srt|ass|vtt|lrc
OUTPUT TEMPLATE
-o
选项允许用户指示输出文件名的模板
id
(string): 视频IDtitle
(string): 视频标题url
(string): 视频URLext
(string): 视频文件后缀alt_title
(string): 视频的辅助标题display_id
(string): 视频的备用标识符uploader
(string): 视频上传者的全名license
(string): 视频的许可协议名称creator
(string):视频的创建者release_date
(string):视频发布的日期 (YYYYMMDD)timestamp
(numeric): 视频可用时的UNIX时间戳upload_date
(string): 视频上传日期(YYYYMMDD)uploader_id
(string): 视频上传者的昵称或IDchannel
(string): 上传视频的频道的全名channel_id
(string): 频道IDlocation
(string): 录制视频的实际位置duration
(numeric): 视频长度(以秒为单位)view_count
(numeric): 用户观看的次数like_count
(numeric): 用户点赞的次数dislike_count
(numeric): 用户踩的次数repost_count
(numeric): 视频分享的次数average_rating
(numeric): 用户给出的平均评分,所使用的比例取决于网页comment_count
(numeric): 视频评论数age_limit
(numeric): 视频的年龄限制(年)is_live
(boolean): 该视频是实时流还是固定长度的视频start_time
(numeric): 复制开始的时间(以秒为单位),如URL中所指定end_time
(numeric): 复制应结束的时间(以秒为单位),如URL中所指定format
(string): 格式的易于理解的描述format_id
(string):--format
指定的格式format_note
(string): 有关格式的其他信息width
(numeric): 视频宽度height
(numeric): 视频高度resolution
(string): 宽度和高度的文字描述tbr
(numeric): 音频和视频的平均比特率,单位为KBit/sabr
(numeric): 音频平均比特率,单位为KBit/sacodec
(string): 使用中的音频编解码器的名称asr
(numeric): 音频采样率,以HZ为单位vbr
(numeric): 视频平均比特率,单位为KBit/sfps
(numeric): 帧数vcodec
(string): 视频编解码器的名称container
(string): 容器格式的名称filesize
(numeric): 文件大小字节数(如果事先知道)filesize_approx
(numeric): 预估文件大小字节数protocol
(string): 用于实际下载的协议extractor
(string): 提取器的名称extractor_key
(string): 提取器的密钥名称epoch
(numeric): 创建文件时的Unix epochautonumber
(numeric): 每次下载都会增加的编号,从--autonumber-start
开始playlist
(string): 包含视频的播放列表的名称或IDplaylist_index
(numeric): 播放列表中视频的索引,根据播放列表的总长度用前导零填充playlist_id
(string): 播放列表标识符playlist_title
(string): 播放列表标题playlist_uploader
(string): 播放列表上传者的全名playlist_uploader_id
(string): 播放列表上传者的昵称或ID- 适用于属于某些逻辑章节的视频
chapter
(string): 视频所属章节的名称或标题chapter_number
(numeric): 视频所属章节的编号chapter_id
(string): 视频所属章节的ID- 可用于某些系列或节目的短片的视频
series
(string): 视频片段所属的系列或节目的标题season
(string): 影片集所属季节的标题season_number
(numeric): 该视频集所属的季节数season_id
(string): 该视频集所属的季节IDepisode
(string): 视频剧集的标题episode_number
(numeric): 一个季节中的视频片段数episode_id
(string): 视频剧集的ID- 可用于作为曲目或音乐专辑一部分的媒体
track
(string): 曲目标题track_number
(numeric): 专辑或光盘中的曲目编号track_id
(string): 曲目编号artist
(string): 曲目艺术家genre
(string): 曲目类型album
(string): 曲目所属专辑的标题album_type
(string): 相册类型album_artist
(string): 所有出现在专辑中艺术家的名单disc_number
(numeric): 轨道所属的光盘或其他物理介质的编号release_year
(numeric): 发行专辑的年份(YYYY)
当提供的模板,不存在值时,将采用--output-na-placeholde
提供的值进行替换,该值默认为NA
比如有一个title
为youtube-dl test video
和id
为BaW_jenozxkL的mp4视频,提供了如下参数,
-o %(title)s-%(id)s.%(ext)s,结果将会在当前目录新建一个文件名为
youtube-dl test video-BaW_jenozKcj.mp4`的视频
比如数字格式的模板,可以使用数字相关的格式,比如%(view_count)05d
,将会生成一个用0填充的5位数,例如00024
输出模板还可以包含多级结构/
,比如-o '%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s'
,这将导致将每个视频下载到与此路径模板相对应的目录中,如果不存在目录,将会自动创建
如果需要在模板中使用百分比,请使用%%
,如果要标准输出,请使用-o -
当前模板的默认值是,%(title)s-%(id)s.%(ext)s
一些情况下,你不想在下载之后保留特殊的字符,比如"中"、空格或者"&",可以通过--restrict-filenames
来获取较短的标题
如果在WIndows批处理文件中使用输出模板,必须使用%
来转义模板,比如,-o "%(title)s-%(id)s.%(ext)s"
将变成-o "%%(title)s-%%(id)s.%%(ext)s"
,但是不应该在其他位置使用,比如环境变量,-o "C:\%HOMEPATH%\Desktop\%%(title)s.%%(ext)s"
需要注意的是,在Windows上,可能需要使用双引号而不是单引号
评论 (0)