72小时直播抢救实录:N_m3u8DL-RE 流媒体下载从0到1
【免费下载链接】N_m3u8DL-RECross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文.项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE
周四晚上十一点,你刷新会议回放页面,得到一条「链接已失效」——回放只保留72小时,明早它就没了。录下来是一回事,把成百上千个分片拼成能播的文件是另一回事。你要的是一个丢进链接、吐出 MP4 的流媒体下载工具,N_m3u8DL-RE 就是干这个的。
一句话说清它是什么
N_m3u8DL-RE 是一个支持 DASH/HLS/MSS 三大协议的跨平台流媒体下载工具。它和右键另存为、浏览器嗅探插件的区别在于:它直接解析 mpd/m3u8 流文件,按分片并发下载,再合并成完整视频。加密流带上密钥就能解,直播也可以录,Windows、Linux、macOS 上行为一致。
最短路径:两条命令跑通
下面这个代码块分两步:第一行是把程序弄到机器上,三个平台各一句话;第二行丢一条链接,剩下全自动。
# Windows 从 release 页下预编译包放进 PATH;Linux(以 Arch 为例) yay -Syu n-m3u8dl-re-bin;macOS 克隆 https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE 后构建 N_m3u8DL-RE "https://example.com/stream.m3u8"这一步的意思是:程序先拉取 m3u8 或 mpd 清单,识别出里面挂了多少条音视频轨道,默认帮你挑码率最高的一组,然后多线程把分片拉回本地,最后按顺序合并成一个文件。
默认输出位置就是当前目录,想固定存放加--save-dir,想显式起名字加--save-name。跑完目录里还会多一个 json,是解析出来的轨道信息,留着排查参数时有用。程序是单文件运行,不写数据库,临时分片默认在任务结束后删掉。
把一场直播变成 MP4
原理:边拉新分片边实时合并,文件边录边长。
# 录直播,实时合并进文件,2小时后自动收手 N_m3u8DL-RE "https://live.example.com/stream.m3u8" --live-real-time-merge --live-record-limit 02:00:00录制开始后文件实时增长,终端里能看到当前时长和进度;录满两小时自动停,不用你守在屏幕前。中途要提前走也没关系,已合并出来的部分本身就是完整可播的文件。终端还会滚动输出每次刷新拿到的新分片数,如果数字一直停在 0,多半是流本身停更了,先确认再怀疑工具。
从加密课程页里取出视频
原理:把解密密钥带上,边下边解。
# KID 和 KEY 从浏览器开发者工具的网络面板里拿,格式 KID:KEY N_m3u8DL-RE "https://course.example.com/video.m3u8" --key abcdef1234567890:0123456789abcdef效果是输出一个正常 MP4,双击直接能播,不需要二次处理。
密钥如果多条流通用,--key KEY单写一行即可;KID 不同就成对传,密钥多的话--key-text-file能批量导入。CENC 加密的流默认引擎不一定管用,加--decryption-engine FFMPEG换 ffmpeg 来解。
一次拉完一个学期的课件
原理:用正则挑轨道,只下需要的。
# 只挑 1080p 视频 + 中文音轨,存到固定目录 N_m3u8DL-RE "https://edu.example.com/series.mpd" -sv res="1920*1080" -sa lang=zh --save-dir ~/Courses-sv、-sa分别是视频和音频的过滤器,流里挂十几条轨道也只拉你要的那两条,磁盘和带宽都省下来。
多讲课程用 for 循环包一层,把每条 mpd 依次丢进去,再带--save-pattern "<SaveName>_<Resolution>"把分辨率写进文件名,多档文件不会撞名。顺带一提,加--sub-only可以只拿字幕,格式用--sub-format选 SRT 或 VTT。
只取长视频的一段
原理:指定分片范围,不要的全跳过。
# 只要第5分钟到20分钟那一节 N_m3u8DL-RE "https://v.example.com/movie.m3u8" --custom-range 05:00-20:003 小时的录像只下中间那一段,省流量也省时间,回放链接要过期时尤其划算。时间对应的是播放时间点,大多数点播不用换算;这个参数只对点播有效,直播流没有固定分片表,传了也不生效。范围也可以按分片序号写,0-99就是前 100 个分片,适合先试水再决定要不要下全片。
三个值得学的参数组合
下载老掉链子
遇到:个别分片超时,整个任务卡在那不动。怎么改:加--download-retry-count 5,让每个分片失败后多试几次,再把--thread-count 24把并发拉高一点。改完效果:长任务基本不用盯着也能跑完,断线重连也不会前功尽弃。
终端进度条变乱码
遇到:ANSI 转义符原样打出来,某些终端里是一屏花符号。怎么改:加--no-ansi-color切到纯文本输出。改完效果:进度和速度照常在,把输出喂给脚本或重定向到文件时也不会混进控制字符。
合并后的文件打不开
遇到:分片全下完了,合并那一步报错。怎么改:加--binary-merge,让分片直接二进制拼接,完全绕开 ffmpeg。改完效果:兼容性最稳;还不行再加--use-ffmpeg-concat-demuxer,能解决剩下大多数情况。
三个真实会踩的坑
我录直播时发现开头缺了几分钟,原因是--live-take-count默认只取 16 个分片,起录点太靠后。加--live-take-count 60多往前取一些,开头就补上了。
还有合并时报找不到 ffmpeg。我第一次跑就撞上,原因是机器上根本没装 ffmpeg,或者装了但不在 PATH。不用全局装,直接指给它:--ffmpeg-binary-path C:\Tools\ffmpeg.exe就行。
第三个是--live-pipe-mux,我开了之后录制掉帧、文件断裂。管道里读数据的是 ffmpeg,网络一抖就丢分片,README 里也明说别在不稳的网络上开它。说白了,--live-real-time-merge已经够稳,别画蛇添足。
给想读源码的人指路
- Parser/:解析 DASH/HLS/MSS 三种协议,轨道和分片表都从这儿出
- Downloader/:分片下载、直播录制与合并调度
- Crypto/:AES 与 ChaCha20 解密实现
收尾
打开终端,把手头那条 72 小时回放链接丢进去试试——它每多放一分钟,就离失效近一分钟。
提示:新版本常带协议解析修复,跑之前看一眼 release notes
【免费下载链接】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),仅供参考