☰
N_m3u8DL-RE 从装到用:3 个场景讲透流媒体下载、直播录制与解密参数
2026/10/16 2:11:59 网站建设 项目流程

N_m3u8DL-RE 从装到用:3 个场景讲透流媒体下载、直播录制与解密参数

【免费下载链接】N_m3u8DL-RECross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文.项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE

N_m3u8DL-RE 是一个跨平台的命令行流媒体下载工具,专门处理 DASH、HLS、MSS 三种清单格式(对应 mpd / m3u8 / ism 文件),点播下载和直播录制都能做。本文讲三件事:第一条命令怎么跑通、点播/直播/加密流三个高频场景的参数怎么配、出问题时按什么顺序排查。读完你应该能拿着一个清单链接,自己挑出想要的画质和音轨,产出能直接播放的文件。

环境准备与首次运行

获取程序有两条路:clone 源码自己构建,或直接下载官方发布渠道对应平台的发行版。构建前提是你本机装好了 .NET 10 运行时,程序目标框架是net10.0,版本不对会起不来。

clone 仓库:

git clone https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE

拿到可执行文件后,一条链接加一个文件名就能跑:

N_m3u8DL-RE "你的视频链接" --save-name 自定义文件名

启动后的流程是固定的:先请求并解析清单,把所有可选轨道(各档视频、各语言音轨、字幕)打印出来;再按选中的轨道并发拉取分片;最后合并成完整文件,默认删掉临时分片(--del-after-done默认开)。

装好没装好,跑一次"只解析不下载"就知道。仓库根目录的TestStreams.md列了一批公开测试流,挑一个填进下面这条命令:

N_m3u8DL-RE "你挑选的测试流地址" --skip-download

预期输出特征:终端先列出清单里的视频轨道(分辨率、编码、码率)、音轨(语言、声道)和字幕轨道,然后直接结束,不产生任何下载。轨道列表能完整打印,说明解析链是通的;去掉--skip-download完整跑一遍,文件能落地且能播放,就算验证完毕。

场景实战

场景一:点播存档,自动挑最好的轨道

你拿到了一个课程 m3u8 链接,变体列表里有 720p、1080p 好几档,诉求是一个能直接播放的完整文件,不想逐条轨道挑。

N_m3u8DL-RE "你的课程m3u8链接" --save-name Python实战 --auto-select -M format=mp4
  • --save-name Python实战:决定文件名主干。不写它程序会生成一个很长的自动名,事后不好找;要批量下多个流时再配--save-pattern "<SaveName>_<Resolution>",文件名会带上分辨率避免撞名。
  • --auto-select:变体轨道一多,手写-sv正则容易漏掉音频和字幕,这个参数让所有类型各自自动选最佳,一步到位。想控制结果时替代方案是-sv best -sa best,逐类型指定。
  • -M format=mp4:不加它,视频和音轨是分开落盘的两个文件,你得多一步手动合并;加它下载完直接混流成 mp4。想要 mkv 容器就写format=mkv:muxer=mkvmerge。

场景二:直播录制,边录边成型 📺

输入是直播链接,诉求是文件在录制过程中就持续成型、录满 3 小时自动停,而不是录两小时后再干等合并。

N_m3u8DL-RE "你的直播链接" --save-name 技术大会 --live-record-limit 03:00:00 --live-real-time-merge --thread-count 8
  • --live-record-limit 03:00:00:录满 3 小时自动结束,格式HH:mm:ss。不加它程序会一直录到你手动中断。
  • --live-real-time-merge:默认 False,即分片要等录制全部结束才合并成成品。开它意味着分片滚入时就实时合并进成品文件,中途断了也能拿到前面已合并的部分。
  • --thread-count 8:默认是 10。直播分片按固定节奏产出,并发拉满意义不大,压低一点给实时合并的写入留带宽。

两个坑提前说:保持默认的--live-keep-segments(默认 True,实时合并的同时保留分片),丢数据后还能用分片重拼;反过来--live-pipe-mux是走管道加 ffmpeg 实时混流,README 明确提醒网络不稳时别开,管道里读数据的 ffmpeg 更容易丢分片。

场景三:带外部密钥的加密流,参数最复杂的一档

部分平台的 CENC 类加密流里只有 KID(密钥 ID),KEY 得你自己从别处拿到再喂给程序。

N_m3u8DL-RE "你的加密流链接" --key "你的KID:你的KEY" -sv best -sa best --decryption-engine FFMPEG
  • --key "你的KID:你的KEY":格式KID1:KEY1,多组密钥就重复传参;整个流共用一把钥匙时直接--key 你的KEY也行,不用带 KID 前缀。十六进制值别加0x。
  • -sv best -sa best:加密流分辨率档位往往不少,best直接各取最佳,比手写res=正则在不确定编码名时省事。要精确挑再上组合正则,例如-sv res="3840*":codecs=hvc1:for=best只挑 4K HEVC。
  • --decryption-engine FFMPEG:默认引擎是 MP4DECRYPT,对 MP4 分片加密最对口,但遇到它解不动的方案就报错;FFMPEG 覆盖面更宽,这里先换它试。需要系统里能找到 ffmpeg,或用--ffmpeg-binary-path给全路径。

解密仍报错的话,还有--custom-hls-method手动指定清单加密方式(AES_128、CHACHA20、SAMPLE_AES等),再配--custom-hls-key/--custom-hls-iv直接喂密钥材料,下一节展开。

关键参数速查

只列你大概率会主动去动的,默认值以 README 帮助输出为准:

分组参数默认值什么时候需要动它
输出--save-name/--save-dir当前目录要控制文件名和落地目录
输出--save-pattern "<SaveName>_<Resolution>"无一次下多个同类流避免撞名
输出-M format=mp4关闭音视频分开落盘,想混成一个文件
输出--sub-formatSRT想要 VTT 输出时
轨道选择--auto-selectFalse轨道太多,不想写正则
轨道选择-sv/-sa/-ss全部下载要按分辨率、语言、编码精确挑轨
网络--thread-count10带宽和并发不匹配,卡或打满
网络--http-request-timeout100 秒弱网下频繁超时重试
网络--download-retry-count7分片失败率高,要加预算
网络--custom-proxy跟随系统代理必须走指定代理才能访问源
加密--key KID:KEY无流需要外部提供密钥
加密--decryption-engineMP4DECRYPT默认引擎解不开时换 FFMPEG
加密--mp4-real-time-decryptionFalseMP4 分片想边下边解缩短总时长
诊断--skip-downloadFalse只验证解析、查看轨道清单
诊断--log-levelINFO出问题后用 DEBUG 定位环节

完整参数列表运行N_m3u8DL-RE --help查看,-sv、-M这类组合参数的详细语法用--morehelp select-video、--morehelp mux-after-done在程序内看。

出问题时看哪里

按症状走排查链,每一步对应一个具体动作:

下不动、极慢或满屏超时重试

  1. 先拉并发:--thread-count 16试一次,确认是不是线程太少拖住了。
  2. 日志里反复出现超时重试的话,把--http-request-timeout从默认 100 提到 120 以上,同时--download-retry-count给点余量(默认 7)。
  3. 需要代理的源,确认--custom-proxy指向的代理本身是通的;程序默认跟随系统代理(--use-system-proxy默认开),公司内网尤其注意。
  4. 都正常却下 403 / 空清单,多半是反爬要登录态:用--cookies 你的cookies.txt喂浏览器导出的 Cookie 文件,或-H "Cookie: 你的值"手动加头。

下载调度在src/N_m3u8DL-RE/DownloadManager/,网络请求层在src/N_m3u8DL-RE.Common/Util/HTTPUtil.cs,定位到卡在哪一环后可以对照看。

解密报错或播放花屏

  1. 核对密钥格式:--key只认KID:KEY或纯KEY,十六进制不带0x,多组密钥逐条传,最常见的翻车点就是这里。
  2. 换引擎:--decryption-engine FFMPEG,再确认第三方程序在 PATH 中,或者--decryption-binary-path/--ffmpeg-binary-path给全路径。
  3. 怀疑 HLS 清单加密方式被误判时,--custom-hls-method手动指定(AES_128、CHACHA20、SAMPLE_AES等),配--custom-hls-key/--custom-hls-iv直接喂密钥材料。

内置解密实现在src/N_m3u8DL-RE/Crypto/(AES 与 ChaCha20),工具调用的解密流程也集中在DownloadManager目录。

输出缺音、缺画或选错轨道

  1. --log-level DEBUG跑一遍,对照解析阶段打印的轨道清单和你实际选中的是不是同一批。
  2. 读不懂轨道列表就单独--skip-download重跑一次,只看解析结果。
  3. 音画分离想合并,补-M format=mp4或-M format=mkv:muxer=mkvmerge;要引入外部字幕/音轨用--mux-import path=你的字幕.srt:lang=chi:name="中文 (简体)",注意它依赖-M开启混流,单独用会直接报错。
  4. 字幕时间轴对不上,先确认--auto-subtitle-fix没有被从默认值改掉。

程序起不来或终端表现异常

先跑一条自检命令,它会把版本和系统环境打印出来:

N_m3u8DL-RE doctor

旧版 Windows(NT6.0 及以下)自带终端跑不动本程序,换 cmder 执行;Arch 系从 AUR 装n-m3u8dl-re-bin;macOS 必须先装 .NET 运行时,否则命令行找不到程序本体。终端颜色显示乱码加--no-ansi-color关掉彩色输出,不影响功能。

进一步阅读

  • README.md:参数全集、配置文件格式、--morehelp详细帮助都在这,比任何二手文档都准。
  • TestStreams.md:一批公开测试流,含多音轨多字幕 DASH、直播、带 KID/KEY 的加密流,冒烟测试和复现问题直接用。
  • src/N_m3u8DL-RE.Parser/StreamExtractor.cs:解析入口,想弄清轨道列表怎么来的从这里进;配套测试在 src/N_m3u8DL-RE.Tests/。

最后一句:项目基于 MIT License 开源,仅限学习和技术研究使用,只下载你拥有合法权限的内容,侵权用途的责任由使用者自行承担。

【免费下载链接】N_m3u8DL-RECross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文.项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询