使用命令行参数
为了丰富软件功能,我提供了很多命令行参数,在本页我将详细介绍这些参数的作用。
N_m3u8DL-CLI
USAGE:
N_m3u8DL-CLI <URL|JSON|FILE> [OPTIONS]
OPTIONS:
--workDir 设定程序工作目录
--saveName 设定存储文件名(不包括后缀)
--baseUrl 设定Baseurl
--headers 设定请求头,格式 key:value 使用|分割不同的key&value
--maxThreads (Default: 32) 设定程序的最大线程数
--minThreads (Default: 16) 设定程序的最小线程数
--retryCount (Default: 15) 设定程序的重试次数
--timeOut (Default: 10) 设定程序网络请求的超时时间(单位为秒)
--muxSetJson 使用外部json文件定义混流选项
--useKeyFile 使用外部16字节文件定义AES-128解密KEY
--useKeyBase64 使用Base64字符串定义AES-128解密KEY
--useKeyIV 使用HEX字符串定义AES-128解密IV
--downloadRange 仅下载视频的一部分分片或长度
--liveRecDur 直播录制时,达到此长度自动退出软件(HH:MM:SS)
--stopSpeed 当速度低于此值时,重试(单位为KB/s)
--maxSpeed 设置下载速度上限(单位为KB/s)
--proxyAddress 设置HTTP/SOCKS5代理, 如 http://127.0.0.1:8080
--enableDelAfterDone 开启下载后删除临时文件夹的功能
--enableMuxFastStart 开启混流mp4的FastStart特性
--enableBinaryMerge 开启二进制合并分片
--enableParseOnly 开启仅解析模式(程序只进行到meta.json)
--enableAudioOnly 合并时仅封装音频轨道
--disableDateInfo 关闭混流中的日期写入
--disableIntegrityCheck 不检测分片数量是否完整
--noMerge 禁用自动合并
--noProxy 不自动使用系统代理
--registerUrlProtocol 注册m3u8dl链接协议
--unregisterUrlProtocol 取消注册m3u8dl链接协议
--enableChaCha20 enableChaCha20
--chaCha20KeyBase64 ChaCha20KeyBase64
--chaCha20NonceBase64 ChaCha20NonceBase64
--help Display this help screen.
--version Display version information.
第一个参数
首先,第一个参数是 必要的,它意味着程序将从哪里接收一个地址、文件以开始下载。
例如,下列命令将使从指定地址下载一个视频:
N_m3u8DL-CLI "https://moviets.tc.qq.com/p0027jbwye1.321004.ts.m3u8?ver=4"
N_m3u8DL-CLI "C:\Users\nilao\Desktop\小猪佩奇第一集.m3u8"
--workDir
此命令将指定视频保存的位置,参数是一个文件夹路径。
例如,下列命令将使你的视频保存至D:\MyVideo
:
N_m3u8DL-CLI "C:\Users\nilao\Desktop\小猪佩奇第一集.m3u8" --workDir "D:\MyVideo"
--saveName
此命令将指定视频保存的名称,参数是一个有效字符串。
通常情况下,视频名称由程序自动识别,假如你想自定义一个名字,可以使用本命令。
例如,下列命令将使你的视频保存为小猪佩奇第一集.mp4
N_m3u8DL-CLI "C:\Users\nilao\Desktop\小猪佩奇第一集.m3u8" --saveName "小猪佩奇第一集"
--baseUrl
此命令常用于下载本地m3u8文件,例如:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:15
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:12.000,
00_p0027jbwye1.321004.1.ts?index=0&start=0&end=12000&brs=0&bre=1137963&ver=4
#EXTINF:12.000,
01_p0027jbwye1.321004.1.ts?index=1&start=12000&end=24000&brs=1137964&bre=2658695&ver=4
#EXTINF:8.200,
02_p0027jbwye1.321004.1.ts?index=2&start=24000&end=32200&brs=2658696&bre=3083011&ver=4
...
...
#EXT-X-ENDLIST
这样的m3u8文件是无法直接下载的,你需要指定对应的baseUrl
,就像这样:
N_m3u8DL-CLI "C:\Users\nilao\Desktop\raw.m3u8" --baseUrl "https://apd-1b75827c3b093392908ce37d3e2c2481.v.smtcdns.com/moviets.tc.qq.com/AaycNil6WINh7T1JAIHdFjn5ANcF7Q8mk3QXxQHl-7Ik/uwMROfz2r5xhIaQXGdGnC2df64gZXNTMZvhtgq7maR8xuHpV/ihA_Kl1SzFmdh7RlzCAOqn64fVVL3Myzr20LmxKiuA2qr7rgjvqMS8k6gQI6VHwjuQMUrctWXB6kDQYYbHDsR1ZGIaDOtcm5wbE36xN9CC34Itm7ZoYdDjJHYH-wfETSwFsTXa4iJpZcXytyCVCRlFIyBdDIYgqNJiSIJsBu_m0/"
--headers
某些时候,视频服务器会阻止你的请求,除非你能够伪造一些请求头
,本命令即可伪造一些请求头,目前支持大部分常见请求头:
Referer
User-Agent
Range
Accept
...
如芒果TV
的m3u8会验证Cookie,必须含有MQGUID
才能正确访问下载,你可以这样指定:
N_m3u8DL-CLI "C:\Users\nilao\Desktop\小猪佩奇第一集(MGTV).m3u8" --headers "Cookie:MQGUID"
当然,支持自定义多种请求头,使用|
分隔,例如:
N_m3u8DL-CLI "C:\Users\nilao\Desktop\M.m3u8" --headers "Cookie:sessionId=1236983428;cns=xpopqwe305|User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
这样可以使程序使用如下请求头:
...
Cookie:sessionId=1236983428;cns=xpopqwe305
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
...
--maxThreads & --minThreads
程序的下载线程数可由--maxThreads
和--minThreads
指定,默认情况下,这两个值分别是32
和16
,你可以手动指定它,例如下列命令可将程序线程限制到1
:
N_m3u8DL-CLI "C:\Users\nilao\Desktop\小猪佩奇第一集.m3u8" --maxThreads 1 --minThreads 1
--retryCount
指定程序最大重试次数。某些时候我们并不能一次性成功下载所有分片,在一次任务结束后,程序会检测已下载的TS
分片数量和m3u8
文件中的分片数量是否相等,不一致则进入重试环节。默认值为15
--timeOut
指定程序进行网络请求的超时时长,默认值为10
秒
--muxSetJson
指定一个json
文件用于混流,能够识别的格式如下:
{
"muxFormat": "mp4",
"fastStart": "True",
"poster": "文件路径,\需写为\\",
"audioName": "",
"title": "",
"copyright": "",
"comment": ""
}
例如你想要将一个图片作为视频的海报
,同时为视频添加标题
,你可以在桌面新建一个小猪佩奇.json
,并在文件中写入如下内容:
{
"muxFormat":"mp4",
"fastStart":"True",
"poster":"C:\\Users\\nilao\\Desktop\\小猪佩奇.jpg",
"audioName":"",
"title":"小猪佩奇第一集",
"copyright":"",
"comment":"我爱小猪佩奇",
"encodingTool": ""
}
然后使用如下命令使用它:
N_m3u8DL-CLI "C:\Users\nilao\Desktop\小猪佩奇第一集.m3u8" --saveName "小猪佩奇第一集" --muxSetJson "C:\Users\nilao\Desktop\小猪佩奇.json"
这样,你的视频将在Windows文件资源管理器
中呈现出这样的效果:
在Mediainfo
中,显示如下:
格式 : MPEG-4
格式概况 : Base Media
编解码器ID : isom (isom/iso2/avc1/mp41)
文件大小 : 38.6 MiB
持续时间 : 5 分 2 秒
平均混合码率 : 1 072 kb/s
电影名称 : 小猪佩奇第一集
录制日期 : 2019-07-08T23:12:46.9349258+08:00
编码程序 : Lavf58.20.100
封面 : Yes
评论 : 我爱小猪佩奇
--useKeyBase64
强制使用AES-128
解密,并使用输入的Base64String
来作为解密KEY
N_m3u8DL-CLI "C:\Users\nilao\Desktop\AES.m3u8" --useKeyBase64 "di5rZXkAAAAAAAAAAAAAAA=="
--useKeyFile
强制使用AES-128
解密,并使用输入的文件来作为解密KEY
N_m3u8DL-CLI "C:\Users\nilao\Desktop\AES.m3u8" --useKeyFile "C:\Users\nilao\Desktop\key"
--downloadRange
2.0.4
及以后版本的新功能。可以使你从一段视频中下载你想要的一部分,支持分片参数与时间码参数,具体的使用示例如下:
--downloadRange 0-10
下载视频的第0个分片到第10个分片,即[0-10]
--downloadRange 200-
下载视频的第200个分片到最后一个分片
--downloadRange -100
下载视频的第0个分片到第100个分片,即[0-100]
--downloadRange 00:23:00-00:25:20
下载视频00:23:00-00:25:20的内容
--downloadRange -00:10:00
下载视频的前10分钟的内容
--downloadRange 00:30:00-
下载视频的30分钟到结束的内容
注意:在使用时间码参数时,格式必须为00:00:00才能被程序正确识别
--liveRecDur
2.5.1
及以后版本的新功能。在直播录制时,这将非常有用。
--downloadRange 00:10:00
直播流录制长度为10分钟
--downloadRange 01:10:10
直播流录制长度为1小时10分钟10秒
--stopSpeed
当下载速度低于此值(单位为KB/s)时,程序进入重试阶段。
默认值为0
--maxSpeed
设置下载速度上限(单位为KB/s)。
默认值为0
, 不限速
--proxyAddress
设置HTTP代理,配合代理软件使用。
默认情况下,程序会使用系统代理;现在你可以自定义一个http地址用作代理了。
N_m3u8DL-CLI "C:\Users\nilao\Desktop\小猪佩奇第一集.m3u8" --saveName "小猪佩奇第一集" --proxyAddress "http://127.0.0.1:8080"
注意,当启用--noProxy
时,此处设置将不生效
--enableDelAfterDone
用于开启程序的下载完成后自动删除临时目录
功能,无需任何参数。
--enableMuxFastStart
使用本命令后,合并生成的mp4
文件将能够在网络传输时边下边看
,适用于流媒体。
缺点是合并时间会变慢。
本命令无需任何参数。
--enableBinaryMerge
使用本命令后,所有关于mp4合并的参数将会失效,程序将采用二进制合并
,即直接拼接服务器提供的Raw
流,不使用ffmpeg
进行混流。
本命令无需任何参数。
--enableParseOnly
使用本命令后,程序将只分析用户输入的m3u8
文件而不进行下载。
本命令无需任何参数。
--enableAudioOnly
使用本命令后,程序将只合并音频轨道。
本命令无需任何参数。
--disableDateInfo
默认情况下,下载合并生成的mp4
文件会默认加入一个录制日期
,你可以使用本命令来规避此操作。
本命令无需任何参数。
--noMerge
默认情况下,下载后会自动合并为mp4
文件,你可以使用本命令来规避此操作。
本命令无需任何参数。
--noProxy
默认情况下,下载器会使用当前系统的代理设置,你可以使用本命令来规避此操作。
本命令无需任何参数。
--disableIntegrityCheck
默认情况下,下载器在下载过程完毕后,会提取下载目录所有ts
文件数量与meta.json
中读取到的文件数量做比对,如果数量不一致(这意味着丢失了某些分片),程序将进入重试阶段。你可以使用此选项来规避此操作(不推荐)。
本命令无需任何参数。
你可能不知道
现在你可以在程序EXE
目录下新建N_m3u8DL-CLI.args.txt
,存一些命令行参数,举个例子:
--enableDelAfterDone --disableDateInfo --noProxy --workDir "C:\Users\nilao\Downloads"
此时,如果你的参数只有0个(双击打开程序)或1个(使用命令行调用且只输入了m3u8地址),程序会自动补充参数,例如N_m3u8DL-CLI "http://x.x/1.m3u8"
将成为N_m3u8DL-CLI "http://x.x/1.m3u8" --enableDelAfterDone --disableDateInfo --noProxy --workDir "C:\Users\nilao\Downloads"
,这在没有GUI的情况下将十分有用。
你可以将.m3u8
文件的默认打开方式设置为N_m3u8DL-CLI
,便能双击下载且能保证程序会按照一定的默认行为去正确地工作,像你期待的那样。