当前位置: 首页 > news >正文

为了优雅地下载网页视频,我顺手写了个开源扩展:FlowPick 诞生记

为什么我要做 FlowPick

刷网、找素材、存资料,总会撞上几个让人抓狂的瞬间:

网页上的精美配图,右键检查全是混淆过的代码,翻半天找不到原图地址;

想存一段教学视频,打开开发者工具(F12),Network 面板里一片.m3u8.ts.m4s切片,看不懂也拼不起来;

现有的嗅探工具,要么界面像上世纪的产物还弹窗广告满天飞,要么核心功能锁在付费墙后面,还有些会偷偷把你的下载链接传回服务器。

我是个挺轴的独立开发者,受不了这种割裂的体验。网页资源本来就摆在那儿,下载它不该是一门"技术活"。于是我自己动手写了 FlowPick——一款驻留在浏览器里、能自动嗅探媒体资源并直接下载合并的工具。

这篇文章不讲情怀,讲清楚它到底能干什么,以及背后的实现是怎么做的。

一、媒体资源嗅探:不用再翻 F12

FlowPick 的核心能力,是驻留在浏览器后台,自动、精准地捕获网页里隐藏的流媒体和静态资源。

关键在于:它工作在网络层而不是 DOM 层。浏览器扩展有个webRequestAPI,可以监听当前标签页发出的每一个 HTTP 请求。播放器一发 M3U8 请求,扩展就能截获——不需要你去翻 Network 面板,也不依赖页面 DOM 结构。

FlowPick 会扫描每个请求的Content-Type和 URL 特征,命中下面这些就记录下来:

  • application/x-mpegurl→ HLS 流
  • application/dash+xml→ DASH 流
  • video/*→ 直链视频
  • 音频、图片同理

这里有个细节折腾了我一会儿。M3U8 分两种:Master Playlist 是目录,列出所有可用画质,每个指向一个 Media Playlist;Media Playlist 才是真正的切片清单。最初我把两种都列出来了,用户看到一堆条目,不知道选哪个。后来改成:识别到 Master Playlist 时,自动解析出里面的画质选项,只展示 1080P / 720P / 480P 这种人能看懂的分辨率列表,不暴露原始 URL 层级。

顺带说一句:很多人以为 FlowPick 能下 RTMP,其实下不了。RTMP 不是 HTTP 协议,webRequest嗅探不到。FlowPick 能处理的是 HLS、DASH 和直链,这三类已经覆盖了绝大多数网页视频。

二、下载前先预览:告别盲选 URL

很多嗅探工具只甩给你一串冷冰冰的 URL,你根本不知道哪条才是想要的那个视频。

FlowPick 内置了媒体预览。嗅探到的资源,在扩展面板里可以直接点开预览——视频能播、图片能看、音频能听,确认是想要的再下载,不浪费带宽和时间。

这个功能听起来简单,做起来要处理不少格式差异。比如 HLS 的预览不能直接拿 M3U8 URL 塞给<video>标签(部分浏览器原生支持,但跨域和加密的处理不一致),所以 FlowPick 内部是先解析出最高画质的 Media Playlist,再用扩展的权限带上页面 Cookie 去请求切片,解密(如果有 AES-128)后拼成一个临时 Blob 喂给播放器。

三、批量下载与资源过滤

一个素材网页往往几十张图、好几段视频,一个个点下载是折磨。

FlowPick 支持批量模式。配合内置的类型过滤器(视频 / 图片 / 音频),一键勾选所需内容,可以自定义命名规则,批量导出。面对同一命名冲突时,不会覆盖已有文件,而是自动追加编号(file.pngfile1.pngfile2.png)——这是踩过坑后加的规则,早期版本覆盖过用户的素材,被自己骂过。

下载并发这块也值得说一下。切片不是等大小的,视频开头和结尾的切片往往小、中间的大。如果简单地把 200 个切片均分给 4 个并发任务,很可能一个任务卡在一堆大切片上,另外三个早就闲着了。FlowPick 用的是共享计数器方案:每个任务做完当前切片,立刻去抢下一个,不管大小,天然做到动态负载均衡,总完成时间接近理论最优。并发数默认 2,最多 8——再高某些 CDN 会触发限速或 429,反而更慢。

四、纯前端处理:数据不离开你的浏览器

这是 FlowPick 最核心的设计取舍,也是它能保证隐私的根本。

所有的切片下载、AES-128 解密、TS→MP4 重封装、文件合并,全在浏览器本地完成,不经过任何第三方服务器。你的下载链接、Cookie、文件内容,FlowPick 的服务器一律看不到——事实上 FlowPick 根本没有处理媒体数据的服务器。

具体用了哪些浏览器能力:

文件写入——三层降级策略。浏览器 JS 没有直接访问文件系统的权限。最简单的办法是把所有数据凑成一个 Blob 触发下载,但 Blob 要把整个文件加载进内存,超过 1.5GB Chrome 就会卡死。FlowPick 优先用 File System Access API(Chrome/Edge 86+),拿到文件句柄后通过WritableStream持续写盘,内存里同时只有当前写入的那一块,和文件总大小无关;Firefox / Safari 不支持 FSA,降级到 StreamSaver.js;都不行才用 Blob 模式(带 1.5GB 硬限制)。运行时自动检测,用户无感。

TS→MP4 重封装——两条路。HLS 切片是 TS 格式,直接拼接出来的文件 VLC 能播,但 Windows 播放器、剪映、B 站上传都不认。FlowPick 做的是**重封装(remux)**而不是重编码——只改容器,不改编码,不损失质量。普通 HLS 走自研的TSToMP4Muxer,纯 JS 逐包解析 188 字节的 TS 包、实时写成 MP4 的 Box 结构,边下边写,内存占用和文件大小解耦;DASH 音视频合并、或边缘格式,走 FFmpeg WASM。两条路按场景自动选。

AES-128 解密——Web Crypto API。HLS 的加密信息写在 M3U8 的#EXT-X-KEY标签里,FlowPick 解析出 Key URI 和 IV,请求密钥(带页面 Cookie,所以需要登录才能看的课也能下),再用浏览器原生的crypto.subtle做 AES-128-CBC 解密,底层有硬件加速,几毫秒一个切片。

需要诚实说明的边界:Widevine / PlayReady / FairPlay 这类 DRM,密钥在硬件或系统层,JS 访问不到,FlowPick 做不了,Netflix、Disney+ 这类平台不在设计范围内;视频转码(比如下载时压成 720P)也不支持——浏览器里重编码太慢,1GB 视频能跑半小时,体验不可接受。

它到底解决了什么

消除技术门槛。传统的 M3U8 视频要用 FFmpeg 命令行合并,-bsf:a aac_adtstoasc这种参数大多数人看一眼就劝退了。FlowPick 把这条流水线封装进一个按钮,普通人也能下。

净化工具环境。同类扩展鱼龙混杂。FlowPick 无广告、无多余权限索取、完全开源,界面按现代浏览器设计语言来做,不糊弄。

告别散落的素材。批处理 + 分类嗅探,把原本要反复查找、复制链接的流程,浓缩进一个扩展面板,对内容创作者、设计师、素材收集党提升明显。

写在最后

FlowPick 已经在 GitHub 完全开源,扩展也上了三个浏览器商店:Chrome 网上应用店、Edge 加载项、Firefox 附加组件。

作为独立项目,它首先是我对自己日常痛点的一次清算,也希望能帮到同样被网页下载折腾的人。欢迎下载体验,有问题在评论区或 GitHub Issue 里提,看到都会回。

如果你也厌倦了网页下载的繁琐,不妨让 FlowPick 常驻你的浏览器。

http://www.gsyq.cn/news/1631133.html

相关文章:

  • C语言题目初学(4)--字符串
  • Holoscan SDK 概述
  • 大模型推理服务架构演进2026:Serverless、K8s与边缘部署的工程选型
  • TVA在具身智能技术演进中的独特价值(9)
  • 海关合规风控进入大模型时代:稽核应对、自查自纠与内部审计如何智能化
  • 包裹计数目标检测数据集(约6000张单类别YOLO标注已划分)| 仓储物流包裹统计专用数据集
  • 加工贸易与保税账册进入大模型时代:料件、单耗、核销与账册风险如何智能管理
  • 容量规划——让资源“恰到好处“
  • 2026年免费查重网站推荐:PaperRed、毕业之家AI等8款平台对比测评
  • 基础的无线实验
  • C++ 虚继承对象内存布局
  • 4-Hadoop伪分布式搭建基本流程
  • 【干货】基础知识-图像处理
  • MC0483过园数统计
  • 影刀RPA新手教程:跨境电商选品完全指南——AliExpress热卖商品分析与竞品调研自动化
  • 助睿实验指导7:自媒体运营分析三次过程合并-CSDN博客
  • Claude Code安全审查实战:从SQL注入检测到CI/CD集成指南
  • (六)海康工业相机与halcon+C#联合编程
  • 华为MetaERP Oracle EBS 各模块业务场景及会计分录汇总表文件信息: 共 11个模块 | 300条业务场景 | 编制日期:2026年7月模块目录表格序号 模块名称 业务场景数 主
  • 做电子元器件生产的朋友,国内线圈固定胶生产厂家哪家更靠谱?
  • Azure Local 离线模式网络规划(系列篇之二)
  • PHP安全编码实践指南:从纵深防御到SQL注入与XSS防护
  • 0Ω电阻在PCB设计中的五大核心功能与应用技巧
  • 第3篇|Want 参数一传就丢:把跳转协议和接收边界写清楚
  • 前端转大模型:换个角度把学习路线落到项目证,把学习路线落到项目证据
  • 93.CODESYS/TIA 通用!模块化 ST 电机控制系统,含故障复位与时序优化
  • Linux进程池开发:O_CLOEXEC防止文件描述符泄漏
  • PHP应用安全实践:使用AES-256-GCM加密保护.env敏感配置
  • 山东悬臂架短切喷涂机工作原理
  • 利用AI智能体Codex与Skill机制,自动化拆解并生成抖音爆款带货视频