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-dl12如果没有
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-dl12 -
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-dlor~/.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)