N_m3u8DL-RE 流媒体下载完整指南:从第一条命令到直播录制与加密解密
2026/8/21 14:57:14 网站建设 项目流程

N_m3u8DL-RE 流媒体下载完整指南:从第一条命令到直播录制与加密解密

【免费下载链接】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(MPD)、HLS(M3U8)和 MSS(ISM)清单对应的在线视频保存到本地,同时支持点播下载与直播录制。上周有个同事要做一场市场调研,需要把一批课程视频逐段下载下来归档,那些视频在网页里只能在线播放,没有下载按钮,分片还多达几百个。我帮他敲了一行命令,二十分钟后整段课程就以一个完整的 MP4 躺在了指定目录里。如果你也遇到过"只能看、不能存"的尴尬,这篇文章就是为你准备的。

序幕:先认识一下你要用的工具

下载的原理其实不复杂:视频网站不会把整段视频放在一个文件里,而是切成许多小分片,再用一个清单文件描述它们的地址和顺序。N_m3u8DL-RE 做的事情就是读取这份清单、把分片全部拉下来、最后合并成一个完整文件。

  • 点播(VOD):把已经上传完的视频下载到本地
  • 直播(Live):持续刷新清单,把正在播的内容一段段录下来
  • 三种格式:MPD(DASH)、M3U8(HLS)、ISM(Smooth Streaming)
  • 三大平台:Windows / macOS / Linux 全部支持

如果想深入了解它的内部实现,源码目录也组织得很清晰:

源码目录职责
src/N_m3u8DL-RE.Parser/解析 MPD / M3U8 / ISM 清单,提取音视频轨道信息
src/N_m3u8DL-RE/DownloadManager/下载调度,包含直播录制管理器
src/N_m3u8DL-RE/Crypto/AES、ChaCha20 等加解密逻辑
src/N_m3u8DL-RE/Util/合并、字幕、工具类等通用能力
src/N_m3u8DL-RE.Common/实体定义、日志、HTTP 工具等公共层

下载本身零依赖,但合并与解密阶段会用到 FFmpeg,建议提前装好并在终端确认一下:

ffmpeg -version

第一幕:装好工具,跑通第一行命令

三分钟完成的两种安装方式

方式一:直接下载预编译版本(推荐)

去项目的 Release 页面,按系统选择压缩包即可:Windows 选 win-x64,macOS 选 darwin,Linux 选 linux-x64。解压后直接运行可执行文件,不需要装任何运行时环境。

方式二:从源码构建

想追最新改动,可以克隆仓库后用 .NET 编译:

git clone https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE.git cd N_m3u8DL-RE/src/N_m3u8DL-RE dotnet build -c Release

Arch Linux 用户也可以用 AUR 源安装,n-m3u8dl-re-bin是正式发行版,n-m3u8dl-re-git是开发版。

装完之后先验证一下程序能正常启动:

N_m3u8DL-RE --version

第一条下载命令,越简单越好

程序的用法极其直接:把链接或本地清单文件直接丢给它。下面用官方测试流练手(多音轨多字幕,非常适合第一次体验完整流程):

N_m3u8DL-RE "https://dash.akamaized.net/dash264/TestCases/2c/qualcomm/1/MultiResMPEG2.mpd"

运行后你会看到程序解析清单、自动挑选最佳画质、并发下载分片、合并输出,全程有进度条和速度显示,像在看一段顺畅的流水线作业。

推荐随手加上的三个参数

实际使用时,我会习惯性地带上输出目录、文件名和线程数:

N_m3u8DL-RE "https://dash.akamaized.net/dash264/TestCases/2c/qualcomm/1/MultiResMPEG2.mpd" \ --save-dir ./videos \ --save-name "第一次下载" \ --thread-count 8
  • --save-dir:保存目录,不存在会自动创建
  • --save-name:自定义文件名,比默认的一长串 ID 好认
  • --thread-count:并发线程数,默认取 CPU 线程数,宽带足够时可以调到核心数的 2 倍左右

补充技巧

  • 想要中文界面,加--ui-language zh-CN(支持 en-US / zh-CN / zh-TW)
  • 不想要日志文件刷屏,加--no-log
  • 输入也支持本地文件:把.m3u8清单存到本地后,N_m3u8DL-RE playlist.m3u8一样能跑

第二幕:从一堆轨道里精准挑出你想要的

很多 DASH 清单里塞着三四档清晰度、五六条音轨、好几组字幕。默认只下"最佳"一套,想精细控制就用轨道选择参数。

按分辨率、语言、字幕精挑细选

三个选择参数都支持正则表达式,格式是字段=正则,用冒号拼接,最后用for=best|worst|all决定取几条:

# 只选 4K 且 HEVC 编码的最佳视频轨 N_m3u8DL-RE "清单链接" -sv res="3840*":codecs=hvc1:for=best # 选最佳英语音轨 N_m3u8DL-RE "清单链接" -sa lang=en:for=best # 所有名字带"中文"的字幕全要 N_m3u8DL-RE "清单链接" -ss name="中文":for=all

对应的还有-dv / -da / -ds,用来反向剔除不需要的轨道。想按播放列表时长过滤,还能用plistDurMin/plistDurMax这样的条件,比如只选时长大于 1 小时 20 分的视频轨:

N_m3u8DL-RE "清单链接" -sv plistDurMin="1h20m30s":for=best

一次拿全所有轨道

懒人模式是让程序把全部轨道都下回来:

N_m3u8DL-RE "清单链接" --auto-select

想提速的话,加上-mt--concurrent-download)让音视频和字幕并发下载,总耗时能明显缩短。

只想下字幕怎么办

只需要字幕时,用--sub-only跳过音视频,配合--sub-format选择输出格式(默认 SRT,可切 VTT):

N_m3u8DL-RE "清单链接" --sub-only --sub-format VTT

用命名模板避免文件重名

多轨道同时下载时,用--save-pattern让文件名自动带上清晰度和码率:

N_m3u8DL-RE "清单链接" --save-name "video" \ --save-pattern "<SaveName>_<Resolution>_<Bandwidth>"

最终会得到类似video_1920x1080_5000000.mp4的文件。模板还支持<Language><Codecs><FrameRate><MediaType><Channels><VideoRange>等变量,自由组合即可。


第三幕:直播录制,把"正在播"变成"已保存"

直播流的特点是分片无限增长、边播边删,所以需要专门的参数配合。

边播边录:实时合并

直播默认是"先下载完再合并",录几个小时的直播会拖很久。开启实时合并后,录完即得成品:

N_m3u8DL-RE "https://livesim.dashif.org/dash/live/testpic_2s/Manifest.mpd" \ --live-real-time-merge

(这是 DASH-IF 官方提供的直播模拟流,适合用来验证录制流程。)

限制录制时长

不想让它一直录下去,用--live-record-limit设定上限,格式是时:分:秒

N_m3u8DL-RE "直播链接" \ --live-real-time-merge \ --live-record-limit 02:00:00

直播转点播与管道混流

  • 想把正在播的直播当点播一次性拉取,用--live-perform-as-vod
  • 追求低延迟成品,可以尝试--live-pipe-mux,通过管道把数据实时喂给 FFmpeg 混流输出
  • 如果画面和字幕对不上,试试--live-fix-vtt-by-audio,程序会读取音频起始时间来修正 VTT 字幕
  • 想自己控制首次拉取分片数量,用--live-take-count;手动设置清单刷新间隔用--live-wait-time

⚠️ 网络不够稳定时别开--live-pipe-mux——管道内数据读取由 FFmpeg 负责,弱网环境下容易丢直播数据。另外录制时默认保留分片文件(--live-keep-segments),想省空间可以关掉。


第四幕:面对加密流,如何用密钥解密下载

HLS / DASH 常见加密方式包括 AES-128、CENC(ClearKey)等。N_m3u8DL-RE 支持手动指定密钥解密。

先判断是否加密

看清单里有没有#EXT-X-KEY(HLS)或ContentProtection(DASH)字段,也可以直接看程序解析时的提示。加密流一般需要KID:KEY形式的密钥。

手动指定 KID:KEY

每个密钥用一次--key,格式为KID:KEY。下面用 Smooth Streaming 加密测试流演示(该测试流在项目文档的 TestStreams 中有记录):

N_m3u8DL-RE "https://azclwds01.akamaized.net/4e8f6858-5d05-4e28-83ab-48c7a2b259e1/XVuosg_tab_hd.ism/Manifest" \ --key e5114f87b3e54b9faca331e6e6d646a6:55c5d9f1cedfd018b75623f2565a1d29

如果多个分片共用同一个 KEY,也可以直接简写--key 密钥值。密钥多了还能写进文件用--key-text-file按 KID 自动查找。

选择解密引擎

解密依赖第三方程序,通过--decryption-engine切换,默认是 MP4DECRYPT:

N_m3u8DL-RE "加密流链接" \ --key "KID:KEY" \ --decryption-engine FFMPEG

可选引擎为FFMPEG | MP4DECRYPT | SHAKA_PACKAGER,若程序没装在 PATH 里,用--decryption-binary-path指定完整路径。

HLS 场景直接硬指定

如果知道加密方法、密钥和 IV,也可以直接硬指定,省去猜测流程:

N_m3u8DL-RE "链接" \ --custom-hls-method AES_128 \ --custom-hls-key 000102030405060708090a0b0c0d0e0f \ --custom-hls-iv 000102030405060708090a0b0c0d0e0f

温馨提示:请只对你有合法权限的内容使用解密功能。本工具仅用于学习与技术研究,任何侵权或非法使用行为均需使用者自行承担后果。


第五幕:下载慢、报错、中断,按这张排查地图走

症状一:提示找不到 FFmpeg

合并或解密阶段报 FFmpeg 相关错误,多半是没装。Ubuntu/Debian 上执行:

sudo apt install ffmpeg

Windows 用户从 FFmpeg 官网下载后把bin目录加进 PATH,或者直接用--ffmpeg-binary-path指定 exe 全路径。

症状二:速度上不去

先检查线程数是否太低,可以加大--thread-count;如果反过来想限速,用-R(支持 Mbps / Kbps):

N_m3u8DL-RE "链接" --thread-count 16 -R 15M

症状三:网络不稳定,分片下载失败

分片下载失败会自动重试,默认 3 次,弱网环境可以调高重试次数和超时时间:

N_m3u8DL-RE "链接" --download-retry-count 10 --http-request-timeout 60

走代理的用--custom-proxy,例如--custom-proxy http://127.0.0.1:8888;不想用系统代理时用--use-system-proxy控制。

症状四:合并后文件不完整

程序默认会做分片数量校验(--check-segments-count),发现下载数和预期不符会给出提示。把--del-after-done关掉能保留临时分片,方便二次排查。

通用排查手段:打开调试日志

N_m3u8DL-RE "链接" \ --log-level DEBUG \ --log-file-path ./download.log

--log-level支持DEBUG / INFO / WARN / ERROR / OFF,出问题先开 DEBUG 看日志,基本都能定位到原因。

老版本 Windows 自带的终端可能不支持本程序的界面渲染,换用 cmder 之类的终端即可正常显示。


第六幕:几个"知道的人都说香"的进阶参数

参数作用示例
--custom-range只下载指定分片区间,适合先试看一段--custom-range 05:00-20:00(只下第 5 到 20 分钟)
--task-start-at定时执行任务,格式yyyyMMddHHmmss--task-start-at 20260815230000
-M/--mux-after-done下载完成后混流成指定容器-M format=mp4-M format=mkv:muxer=mkvmerge
--mux-import混流时引入外部音轨/字幕--mux-import path=zh-Hans.srt:lang=chi:name="中文 (简体)"
--ad-keyword用正则匹配广告分片 URL 并跳过--ad-keyword "ad|promo"
--append-url-params给分片追加 URL 参数,部分网站必须开--append-url-params
--write-meta-json把解析出的流信息写成 JSON 文件默认开启,便于查看轨道细节

想查看某个复杂参数的具体用法,随时可以问程序本身:

N_m3u8DL-RE --morehelp select-video N_m3u8DL-RE --morehelp custom-range

终章:一张自查清单,和三个出发方向

把整篇教程浓缩成一张清单,跟着走就不会迷路:

  1. ✅ 装好 N_m3u8DL-RE 与 FFmpeg,用--version验证可用
  2. ✅ 用官方测试流跑通第一条N_m3u8DL-RE "链接"命令
  3. ✅ 用--save-dir / --save-name / --thread-count规范输出
  4. ✅ 多轨道用-sv / -sa / -ss精确挑选,-mt并发提速
  5. ✅ 直播用--live-real-time-merge+--live-record-limit边录边合并
  6. ✅ 加密流用--key KID:KEY配合--decryption-engine解密
  7. ✅ 出问题先开--log-level DEBUG,再看日志对症下药

想继续深入的话,推荐三个方向:一是通读项目内的 README,里面有全部命令行参数的详细说明;二是翻一翻TestStreams.md,里面整理了覆盖点播、直播、加密、多字幕等场景的官方测试流,是练手的最佳素材;三是对照源码目录了解解析器(Parser)、下载管理器(DownloadManager)与解密模块(Crypto)的实现,想给项目贡献功能或定制行为时用得上。

工具再多,不如亲手跑通一次。现在就去复制一条测试流链接,把属于你的第一段视频下载下来吧——从此"只能在线看"这四个字,基本可以从你的字典里删掉了。🎬

【免费下载链接】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),仅供参考

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

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

立即咨询