尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

开源免费视频下载工具链:yt-dlp、M3U8与ffmpeg实战指南

开源免费视频下载工具链:yt-dlp、M3U8与ffmpeg实战指南 在 B 站、视频号、抖音、微博这些平台里刷到想保存的视频很多人第一反应是去搜在线解析网站结果要么是限速、要么要充值、要么下载下来还带水印。这次我们换个思路直接上开源免费的视频下载工具链从通用命令行下载器到 M3U8 流媒体下载器再到微信视频号这种特殊场景的处理方法整套流程覆盖 Windows、macOS 和 Linux全部免费、无广告、不额外收费。后面我会把工具选型、环境准备、命令实操、批量任务和问题排查一次性讲清楚。这个方案的核心不是某个单独软件而是一套组合yt-dlp 负责主流网站解析N_m3u8DL-RE 负责流媒体切片合并ffmpeg 做格式封装抓包工具对付视频号这类没有直链的平台。你不需要把所有工具都装一遍只要按自己的下载场景选两三个就够了。文章会给出可以直接复制的命令、通用接口调用模板和完整的排错清单目的是让你从“找工具”变成“自己搭下载流程”。先说明一下使用边界本文介绍的所有方法只能用于下载你拥有合法授权、或者平台允许个人离线缓存的内容。不要拿这些工具去绕过付费墙、盗取会员内容、批量抓取别人拥有版权的作品更不要二次分发和商用。工具本身是中立的使用目的和范围由你自己把握。1. 核心能力速览不同工具解决的下载场景不同先把核心能力列出来方便对号入座。工具/方案项目类型适用场景安装方式是否免费是否需要API上手难度yt-dlp命令行下载器上千个主流网站、视频、音频、字幕下载pip / 二进制是部分站点需要中低you-get命令行下载器国内主流视频站点、B站、微博等pip是否低lux命令行下载器B站、抖音、YouTube等多站点Go install / 二进制是否低N_m3u8DL-RE流媒体下载器M3U8/HLS 直播流、分段视频.NET 二进制是否中ffmpeg多媒体处理工具视频格式转换、封装、抽帧、剪辑包管理器/二进制是否中抓包方案Charles/whistle代理抓包微信视频号、小程序视频客户端/Node是否中高cobalt / 自建解析服务API 服务网页视频解析、批量接入自有系统Docker / Node是是高从实际使用频率来看yt-dlp N_m3u8DL-RE ffmpeg 是性价比最高的组合覆盖了 80% 以上的下载需求。微信视频号下载场景需要额外引入抓包工具流程也更依赖目标平台的变化。2. 适用场景与使用边界这套视频下载工具链适合谁内容创作者收集素材做二次创作下载自己有权使用或遵循平台规则的公开内容。个人收藏用户把喜欢的公开视频缓存到本地方便离线观看。开发人员需要做视频批处理、转存、格式转换把命令行工具嵌入自己的自动化脚本。课程/资料整理人员对已购买的课程进行个人学习备份或下载已授权的内部培训视频。不适合的场景也要说清楚不适合下载需要付费或会员权限才能访问的视频内容这是付费墙绕过它属于违反服务条款甚至侵权行为。不适合批量抓取后重新分发哪怕是公开视频作者往往也保留版权二次传播需要授权。不适合用抓包工具去窃取需要登录鉴权的私有视频、他人隐私内容或商业机密。特别说明一点视频号、公众号内的视频哪怕是公开可看的作者同样拥有版权。下载仅用于个人学习、离线备份、素材整理等合理范围内使用时问题不大但如果未授权搬运到其他平台并大量传播风险很高。文章后面给出的技术流程默认使用对象是你自己有权限获取的视频内容。3. 免费下载工具分类与选型做视频下载前先判断目标平台返回的是哪种视频形式。大多数情况分三类网页内嵌 MP4/WebM 直链页面源码里能直接找到视频文件地址这类最简单直接用 yt-dlp、you-get 或浏览器开发者工具都能拿到。M3U8/HLS 流媒体切片视频被切成几百个 ts 小文件通过索引文件播放。多见于视频号、直播回放、部分在线课程平台需要专门的流媒体下载器。需要特殊参数/加密/签名某些平台给视频地址加了防盗链签名或者 AES 加密通用下载器解析失败时需要借助抓包、调试脚本或专用工具。根据这几种情况选型思路如下3.1 通用命令行下载器首选 yt-dlp它是 youtube-dl 的增强维护分支站点支持数量多更新频率也很高。它不仅能下载视频还能单独下载音频、字幕、封面支持指定清晰度和格式适合绝大多数通用视频站。如果需要下载国内视频站you-get 和 lux 也是常见选择。you-get 对优酷、B站、微博等站点支持不错命令简单lux 是 Go 语言写的单文件分发直接下载二进制就能用部署成本低。3.2 M3U8 流媒体下载器当目标视频地址以.m3u8结尾、或者请求返回的是index.m3u8时普通下载器基本无能为力。这时用 N_m3u8DL-RE它专门处理 HLS 协议支持多线程分片下载、自动合并、输出 MP4/MKV比手动一个个下载 ts 文件再拼接效率高得多。3.3 图形化与浏览器插件如果你不想碰命令行可以找基于上述引擎的图形化工具比如某些开源下载器会内置 yt-dlp 内核把链接粘贴进去自动解析。浏览器插件则适合日常简单下载但也需要注意插件权限可能很大尽量选择开源且维护活跃的不要安装来路不明的“万能解析插件”。3.4 微信视频号专用思路视频号比较特殊网页端不能直接复制视频地址移动端也没有常规的文件直链。主流做法有两种一是通过本地代理抓包在播放视频时捕获到 m3u8 或 mp4 请求地址再用流媒体下载器处理二是从微信桌面端缓存目录里翻出视频文件用 ffmpeg 做识别、提取和封装。具体步骤后面单独展开。4. 环境准备与前置条件下面的工具大多跨平台先检查你的基础环境。4.1 Python 环境yt-dlp 和 you-get 都依赖 Python建议使用 Python 3.8 以上版本。终端里先确认版本python --version python3 --version如果没有 Python可以到官网安装Windows 用户安装时记得勾选“Add Python to PATH”。4.2 FFmpeg 安装ffmpeg 是视频下载链路里的关键组件很多下载器需要它来做音视频合并和格式封装。安装方式macOSbrew install ffmpegLinuxsudo apt install ffmpegDebian/Ubuntu或sudo dnf install ffmpegFedoraWindows从 ffmpeg 官网下载 release 构建包解压后将bin目录加入系统 PATH验证安装ffmpeg -version ffprobe -version4.3 磁盘、权限与端口检查下载几百 MB 的视频前确认输出目录有足够空间格式化为 NTFS/exFAT 的硬盘更稳妥。命令行工具如果装到系统路径macOS/Linux 可能需要写权限建议直接用pip install --user或虚拟环境。如果你要自建解析 API 服务注意 9000 这类默认端口是否被占用# Linux / macOS lsof -i :9000 # Windows netstat -ano | findstr :90005. 命令行下载工具实操5.1 yt-dlp 安装与基础下载安装pip install -U yt-dlp列出目标视频可选的清晰度和格式yt-dlp -F https://example.com/watch?vxxxx输出里每一行都会标注format code、ext容器格式、resolution和filesize。看到audio only和video only时说明该站点把音视频分开了需要手动/自动合并。下载最高画质视频和音频并合并为 mp4yt-dlp -f bestvideo*bestaudio/best --merge-output-format mp4 https://example.com/watch?vxxxx只下载音频并转成 mp3yt-dlp -x --audio-format mp3 https://example.com/watch?vxxxx还有几个高频参数# 下载整个播放列表 yt-dlp -f bv*ba/b https://example.com/playlist?listxxxx # 限制下载速度避免占满带宽 yt-dlp --limit-rate 5M URL # 输出文件名按标题命名 yt-dlp -o %(title)s.%(ext)s URL判断成功的标准命令退出无报错输出目录出现完整 mp4/mkv 文件ffprobe能正常读取出时长和分辨率。5.2 you-get 安装与基础下载安装pip install you-get查看视频信息you-get -i URL直接下载默认质量you-get URL指定输出目录you-get -o ./videos URLyou-get 的优势是命令短、学习成本低适合偶尔下载一两个国内视频。遇到解析失败时先执行you-get --debug看具体报错再决定是否换工具。5.3 lux 安装与基础下载安装Go 环境go install github.com/iawia002/luxlatest也可以直接在 GitHub Releases 页面下载编译好的二进制。下载视频lux URLlux 对 B 站、抖音等站点的解析能力不错。curl 下载二进制后建议先chmod x lux再放到 PATH 目录下。5.4 N_m3u8DL-RE 处理流媒体切片从 GitHub Releases 下载对应平台的压缩包解压后直接运行。先了解两个常见用法查看 m3u8 索引信息N_m3u8DL-RE https://example.com/path/index.m3u8 --show-info下载并合并为 mp4N_m3u8DL-RE https://example.com/path/index.m3u8 --save-dir ./videos --save-name output --auto-select带多线程和指定分辨率N_m3u8DL-RE https://example.com/path/index.m3u8 --threads 16 --save-name output --auto-select--auto-select会自动选择最大分辨率流。如果 m3u8 文件里包含多个清晰度也可以先查看信息再手动指定--select参数。6. 微信视频号下载抓包与缓存提取视频号下载没有统一的命令公式因为平台方经常调整接口和播放策略。这里介绍两条通用技术路径都需要在合法授权范围内使用。6.1 抓包获取视频地址思路是在电脑上启动代理抓包工具手机或电脑端的微信通过该代理访问视频号播放视频时抓取到真实视频请求地址再用下载器拉取。常用工具有 Charles、whistle 等。以 whistle 为例它是一种基于 Node.js 的本地代理调试工具npm install -g whistle w2 start启动后默认开启 127.0.0.1:8899 代理端口浏览器访问http://127.0.0.1:8899可以打开抓包管理界面。手机和电脑在同一局域网时把手机 WiFi 代理设置为电脑 IP 和 8899 端口然后在手机微信里播放视频。回到 whistle 界面按域名、类型筛选请求重点找m3u8、mp4、flv这类媒体请求。拿到视频地址后用 N_m3u8DL-RE 或 ffmpeg 下载# m3u8 流 N_m3u8DL-RE http://xxx/playlist.m3u8 --save-dir ./wxvideos --save-name video # 直接 mp4 ffmpeg -i http://xxx/video.mp4 -c copy output.mp4需要注意视频号链接往往带有较短的过期时间抓包后尽快下载过期的地址即使复制到浏览器也无法播放需要重新抓取。6.2 缓存目录提取如果不方便抓包可以尝试从微信桌面版缓存目录中找到已播放过的视频文件。视频播放一次后微信可能会把完整的音频视频数据写入本地缓存。基本流程在电脑微信里完整播完目标视频。打开微信缓存目录按修改时间排序找到刚播放过的文件。用ffprobe检查文件封装格式ffprobe -v error -show_format -show_streams candidate_file如果显示是 mp4、mov 或可识别封装格式直接改名复制到目标目录即可。如果是裸 H.264/H.265 流没有封装可以用 ffmpeg 套封装ffmpeg -framerate 25 -i candidate_file.h264 -c copy output.mp4这个方法依赖微信缓存策略不保证每次都能找到可用的原始文件。判断是否成功的标准ffprobe能读取到分辨率、时长、编码器信息且播放器能正常播放。需要再次强调以上两条路径只用于个人学习、备份你有权限获取的内容不要把抓到的链接或视频文件当作素材库公开传播。7. 图形化工具与浏览器插件很多读者不习惯命令行这里给几条选型建议不指定具体产品避免变成广告。看 GitHub stars 和维护频率工具是否还在更新很重要。视频站经常改版下载器停止维护就意味着随时失效。优先选择“本地解析”而不是“云端解析”。本地解析是你把视频网页地址输入后下载器在本机解析并直接下载云端解析是把链接传给第三方服务器再由服务器返回下载地址。后者对你的访问记录和视频权限都存在安全隐患。浏览器插件的权限要克制。尽量选择只申请“读取当前网页”权限的插件不要给“所有网站均可用”的权限更不要用需要登录你社交账号的插件。图形化工具本质上还是封装了命令行内核。遇到界面版解析失败时可以切回命令行工具看详细报错这样更容易定位问题。8. 自建解析服务与批量任务如果你不是零星下载而是要把视频下载能力嵌入自己的脚本或内部系统可以考虑自建一个解析服务或者直接复用开源项目的 API 接口。常见思路是用 Node.js 或 Python 写一个 HTTP 服务收到链接后调用 yt-dlp 或 N_m3u8DL-RE 下载到指定目录。下面是一个通用接口模板需要按实际项目调整路径、参数和鉴权逻辑。import subprocess import os def download_video(url: str, output_dir: str ./downloads): os.makedirs(output_dir, exist_okTrue) # 注意这里的命令需要按实际项目调整不保证所有平台都适用 cmd [ yt-dlp, -f, bestvideo*bestaudio/best, --merge-output-format, mp4, -o, os.path.join(output_dir, %(title)s.%(ext)s), url, ] result subprocess.run(cmd, capture_outputTrue, textTrue, timeout300) if result.returncode ! 0: print(result.stderr) return {success: False, error: result.stderr} return {success: True, output: output_dir} if __name__ __main__: download_video(https://example.com/watch?vxxxx)接口层可以设计为接收 JSON{ url: https://example.com/watch?vxxxx, format: mp4, quality: best, output_dir: ./downloads }如果压测下来命令执行的时间比较长请求接口要设置合理的超时时间不要把 HTTP 请求和下载任务强行同步绑定。更稳妥的做法是任务先入队立即返回任务 ID后台进程去执行 yt-dlp 下载完成后更新任务状态。目录结构可以这么设计downloads/ ├── queue/ ├── processing/ ├── done/ └── failed/批量下载时优先用 yt-dlp 自带的列表功能# links.txt 里每行一个链接 yt-dlp -a links.txt -o %(title)s.%(ext)s --limit-rate 10M如果遇到失败任务建议只重试 2 到 3 次间隔几秒避免被目标平台判定为异常访问。9. 资源占用与性能观察视频下载任务不像 AI 推理那样吃显存主要看四类资源带宽、磁盘、内存和 CPU。带宽高码率 4K 视频很容易跑满几十 Mbps 带宽。批量下载时要考虑网速是否被占满其他业务是否会受影响。可以用--limit-rate限速。磁盘下载前先看剩余空间。4K 电影常见 10GB 以上M3U8 下载器在合并前还会额外占用分片临时文件空间。内存命令行下载器本身很轻量但高并发分片下载时内存占用会升高。一般 16GB 内存机器无压力。CPU合并 MP4、转音频、抽帧时需要 CPU 参与复杂计算。-c copy模式只是复制流CPU 占用很低转码则明显升高。观察方法Windows 打开任务管理器重点看性能面板中的网络利用率。macOS 用活动监视器或终端执行top -o cpu。Linux 用htop和iftop。如果一次性下载大量视频建议分批执行或者把下载时间安排在业务低谷。M3U8 高并发线程数不要盲目加到几十上百先小批量测试看目标服务器是否能承受同时避免给对方服务器造成压力。10. 常见问题与排查方法问题现象可能原因排查方式解决方案下载时提示不支持该站点工具版本过旧站点解析方式已更新执行yt-dlp --version或升级工具升级到最新版或换用其他下载器视频下载后没有声音工具只抓到了 video-only 流没合并 audio用-F查看格式确认是否有音频流用-f bv*ba/b并指定合并格式确保 ffmpeg 已安装M3U8 下载中途失败网络波动或分片失效查看日志中失败分片编号降低线程数重试或重新获取 m3u8 地址视频号抓包地址很快失效链接带签名和过期时间检查抓包时间和请求状态码抓到地址后立即下载过期就重新抓取视频下载完成后无法播放封装格式或编码参数不兼容用 ffprobe 查看流信息用 ffmpeg 重新封装或转码为 H.264 AAC 的 mp4Python 模块安装失败网络源问题或 Python 版本过旧检查 pip 源和版本升级 Python使用国内镜像源安装端口被占用API 服务默认端口已有进程查看端口占用换端口或结束占用进程批量任务卡住单链接解析超时队列无超时控制查看进程 CPU 和网络状态给每个任务加超时参数异常任务直接跳过并记录再补充两个高频细节pip 安装失败时可以换镜像源pip install -U yt-dlp -i https://pypi.tuna.tsinghua.edu.cn/simpleffmpeg 没有正确识别时Windows 下把ffmpeg.exe所在目录加入 PATH 后要重开终端再试macOS 下用which ffmpeg确认。11. 最佳实践与合规建议先小参数测试再批量执行。第一次下载同一个站点的视频时先下一条短链接确认清晰度、音轨、文件命名都符合预期再批量铺开。保留一份最小可运行配置。把常用的 yt-dlp 参数、Python 虚拟环境和 ffmpeg 路径写进一个配置脚本下次直接调用。分类管理目录。视频下载多了以后建议按站点/日期/标题的层级组织videos/ ├── youtube/ │ └── 2025-03-20/ │ └── 示例视频_title.mp4 ├── bilibili/ └── wechat/给接口服务加访问控制。自建解析服务如果暴露在公网至少加上 Token 鉴权和 IP 白名单避免被他人滥用。日志和失败重试。批量任务里必须记录每个链接的下载结果失败任务单独输出到failed.txt方便排查。涉及人脸、声音、私人内容的素材务必先获得当事人同意。下载他人原创视频仅用于个人学习或已获授权场合未经授权不要二次剪辑发布、不要商用、不要打包传播。12. 总结与下一步这套视频下载方案里最值得先试的是yt-dlp ffmpeg它上手快、覆盖站点广绝大多数网页视频下载需求都能解决。你拿到手后要做的第一件验证就是找一个允许下载的公开视频链接用yt-dlp -F看看能解析出哪些格式再用-f bv*ba/b --merge-output-format mp4跑一遍确认音视频正常合成。最容易踩的坑有两处一是 ffmpeg 没装好导致音视频无法合并二是视频平台更新后下载器失效升级到最新版本基本可以解决。后续可以继续扩展的方向包括用 yt-dlp 配合定时任务做周更订阅、把 N_m3u8DL-RE 接入直播录播流程、或是写一个 Web 管理界面用于内部视频素材管理。工具链本身是公开、开源的能走多远取决于你需要解决的具体场景。建议把这篇文章里涉及的命令保存成笔记等到真实需要下载某个视频时照着步骤执行一遍就能跑通。
返回列表