网页音视频提取 / Web Media Extractor
目标
把用户有权访问的网页音视频提取为本地文件。支持一次处理多个网址,按网页标题单独建目录,尽量保持原始下载格式,不默认转码;自动记录视频数量、音乐数量、跳过原因和失败方法。
不要绕过 DRM、付费权限、登录权限或版权保护。遇到加密、会员、付费课程、版权音乐等内容,只说明限制并给出合法替代方案,例如用户提供本地文件、平台导出文件或录屏/录音。
快速流程
- 如果用户没有给保存路径,先让用户选择保存路径;不要替用户随意放到系统下载目录。
- 将多个链接整理为 URL 列表。每个网页单独输出到
序号_网页标题文件夹。 - 优先运行脚本:
python scripts/web_media_extractor.py --url "https://example.com/page1" --url "https://example.com/page2" --out "D:\用户选择的保存目录" --workers 3
- 如果网页需要浏览器登录态,可加:
python scripts/web_media_extractor.py --url "https://example.com/page" --out "D:\用户选择的保存目录" --cookies-from-browser chrome --network-probe
- 读取
download_report.json和download_report.csv,向用户说明成功下载的视频/音乐数量、跳过项、失败原因和需要人工处理的链接。
如果网页自动化、yt-dlp 或 FFmpeg 能力缺失,先运行:
python scripts/setup_environment.py --install-basic
python scripts/setup_environment.py --install-browser
第一条补齐 yt-dlp 和 Python 版 FFmpeg 辅助能力;第二条补齐 Playwright 浏览器自动化。若电脑策略禁止安装,继续使用 F12、插件 F 键法或用户手工复制媒体链接。
自动方法链
按顺序尝试,前一种方法失败再进入后一种;如果用户要求“穷尽提取”,使用 --exhaustive 让后续方法继续补充候选资源。
- yt-dlp 直接解析:适合主流视频网站、短视频页、嵌入播放器、m3u8 分段流。保持原格式优先;m3u8 只做下载合并,不做画质重编码。
- 网页源码解析:读取 HTML 中的
video/src、audio/src、source/src、og:video、og:audio、.mp4、.webm、.m3u8、.mp3、.m4a、.flac、.wav等线索,再直接下载。 - 浏览器网络嗅探:有 Playwright/Chrome 自动化能力时,打开网页并监听 Network 响应里的音视频链接;没有网页自动化技能或运行环境时,输出配置提示并转入人工抓取法。
- 插件 F 键法:参考猫抓 CatCatch、FlowPick、Video DownloadHelper、Video Area Downloader 等浏览器扩展,把“打开资源面板”绑定为
F或Shift+F,播放网页音视频后嗅探下载。 - F12 原生法:打开开发者工具,进入 Network/Media,刷新并播放,按 Size 排序,复制或新标签打开
.mp4/.webm/.mp3/.m4a/.m3u8链接。 - 源代码搜索法:用
Ctrl+U搜索.mp4、.webm、.m3u8、.mp3、video src=、audio src=。 - 录屏/录音兜底:只用于无法直接提取且用户有合法保存权的内容。说明这不是原始文件提取。
详细人工流程见 extraction-methods.md。
输出规则
- 保存目录由用户选择;技能不得固定写死到下载目录。
- 每个网页使用网页标题建独立目录;文件名使用网页标题、媒体序号和原始扩展名。
- 格式保持下载到的原始格式。不要为了统一格式而把
.webm/.m4a/.flac转成.mp4/.mp3。 - m3u8 分段流需要
yt-dlp与 FFmpeg/等价工具合并;没有合并工具时,只记录候选链接和安装提示。 - 默认过滤小于 5 秒的视频和音乐。无法判断时长的文件要标记
duration_unknown,不要把它伪装成已完全验证。 - 广告、跟踪、预加载提示音、小体积短片段、
ad/ads/advert/doubleclick/tracking/promo/banner等明显广告线索默认跳过。 - 生成
download_report.json、download_report.csv和skipped.json,分别记录成功项、累计数量、跳过原因和每种方法的失败信息。
依赖与替代
优先使用本机或 Codex/WorkBuddy 已带的 Python。推荐安装 yt-dlp、FFmpeg/ffprobe、Playwright/Chrome 自动化;缺任一项时不要卡死,继续走源码解析、F12、插件或录屏兜底。没有系统 FFmpeg 时,可用 imageio-ffmpeg 作为合并工具的替代来源。
检查环境:
python scripts/web_media_extractor.py --check-deps
常见补齐方式:
python -m pip install -U yt-dlp playwright
python -m playwright install chromium
winget install Gyan.FFmpeg
如果不能安装 FFmpeg,可以先运行 python scripts/setup_environment.py --install-basic 安装 Python 版辅助包;仍不可用时,优先用 yt-dlp 能直接处理的完整媒体链接,或把 m3u8 交给猫抓内置解析器、Video DownloadHelper、VLC、浏览器扩展、平台导出工具处理。
版本与更新
当前本地版本以 _meta.json 为准。发布到 SkillHub 后,平台页面为 https://skillhub.cn/skills/user_0f00a14f/web-audio-video-extractor。
查询或更新:
python scripts/skillhub_update.py
python scripts/skillhub_update.py --download-to "E:\codexouput\tansuo\skillhub_packages\web-audio-video-extractor_latest.zip"
python scripts/skillhub_update.py --install --target "C:\Users\JackZhou\.codex\skills\web-media-extractor"
python scripts/skillhub_update.py --install --target "C:\Users\JackZhou\.workbuddy\skills\web-media-extractor"
更新脚本只从环境变量读取 SKILLHUB_API_KEY,不得把密钥、cookie、账号信息写入技能包、日志、报告或压缩包。
Scan to join WeChat group