把公开单视频 URL 交给支持 Agent Skills 的工具,完成下载、验证和发布。
当前重点是把“URL -> 可验证下载产物”做成可靠地基。release 包自带运行时,安装后即可运行;macOS 正式资产使用 Developer ID 签名、公证并 stapling 的 DMG,Linux 使用自包含 tarball。平台状态仍以真实 smoke 证据为准,不能把目录存在、yt-dlp 支持站点列表或一次偶然成功当成稳定支持。
- 使用 yt-dlp 下载单个公开视频,不处理播放列表、直播、DRM、付费墙或会员内容。
- 用 bundled ffmpeg/ffprobe 验证、重封装或转码到规范化
video.mp4:恰好一条 H.264 +yuv420p(偶数尺寸)视频流、至多一条 AAC 音频流,不保留其他流。 - 成功时发布
video.mp4、info.json、manifest.json和fetch.log。 thumbnail.*与sub.*.vtt是可选资产;静音视频允许。--force只在需要重建本 Skill 已发布的结果时使用,旧结果在新结果验证完成前保持不变;它不会删除无法证明归属的同名目录。
本 Skill 不负责转录、总结或改写,也不要求 OpenAI、Anthropic 或其他 LLM API key。
站点解析不维护一份容易过期的白名单:YouTube、Bilibili、Twitter/X、Douyin、Kuaishou 等公开单视频,只要 release 内固定版本的 yt-dlp 当时能解析,就会进入同一下载链路。最终能否发布还取决于 hardened FFmpeg 的明确媒体范围:常见 MP4/MOV、Matroska/WebM、MPEG-TS、AVI、FLV、Ogg,H.264/H.265/VP8/VP9/AV1/MPEG-2/MPEG-4/FLV/H.263/Theora/MJPEG,以及 AAC/MP2/MP3/Opus/Vorbis/FLAC/AC-3/E-AC-3/DTS/ALAC/PCM S16LE/PCM S24LE。超出范围时明确失败,不会调用宿主机工具或临时安装解码器。
下载与你的平台匹配的正式 release 包。macOS 打开 DMG 并复制其中目录,Linux 解压 tarball,然后运行:
bash scripts/check.shcheck.sh 只验证 release 包内的运行时,不会自动安装任何东西。它通过后就可以直接运行:
bash scripts/fetch.sh "https://example.com/video" ./video-out如果你是从源码开发,不是用 release archive,先显式开启开发模式:
export VA_DEV_MODE=1然后自己提供 python3、yt-dlp、ffmpeg、ffprobe,再运行同样的 check.sh / fetch.sh。
更多说明见 references/install.md。
bash scripts/fetch.sh "https://example.com/video" ./video-out强制重新生成:
bash scripts/fetch.sh "https://example.com/video" ./video-out --force成功时 stdout 只输出最终目录路径;失败时 stdout 为空,详细原因写入 stderr。固定退出码:
| 码 | 含义 |
|---|---|
| 0 | READY |
| 2 | 参数或 URL 错误 |
| 10 | release runtime、宿主或 JS runtime 不可用 |
| 20 | URL 解析失败、播放列表或直播 |
| 30 | 下载失败 |
| 40 | 无法得到真实兼容 MP4 |
| 50 | 视频、JSON 或媒体校验失败 |
| 60 | 锁、发布或恢复冲突 |
成功目录:
video-out/<extractor>-<id>-<identity-hash>/
├── video.mp4 # H.264/yuv420p/偶数尺寸 MP4;音频存在时为 AAC
├── info.json # 白名单化描述元数据;不含媒体直链和请求头
├── manifest.json # status=ready、校验结果和 provenance
└── fetch.log # 脱敏诊断日志
封面和人工字幕属于可选资产。静音视频允许。失败 staging、journal、backup 位于输出根目录下的隐藏事务目录中,用于诊断和恢复,不应直接交给下游 Agent。
安装 Skill 后,可以直接提出类似请求:
- “下载这个公开视频并验证产物。”
- “把这个 release 包解压到本机后,先帮我检查它是否可用。”
Skill 的操作边界和下游流程见 SKILL.md。
本地离线测试不访问网络:
python3 -m pytest -q
bash -n scripts/*.sh tests/smoke.sh
git diff --checkrelease 包可直接运行 bash scripts/check.sh;开发模式则需要 VA_DEV_MODE=1 和本地工具。平台 smoke 是显式运行的 release/nightly 检查:
bash tests/smoke.sh \
--release-root "/path/to/extracted/video-anything-<version>-<target>" \
--platform youtube \
--url "<public-fixture-url>"平台 smoke 会先运行包内 check.sh,清除 VA_DEV_MODE,再调用同一个 release 内的 fetch.sh。v2 报告还会绑定 package version、target、runtime tree 和全部非 runtime 文件摘要,并且只接受本次私有输出目录中的全新 publish_mode=initial 产物。源码开发结果、复用结果、不同 release 或同一视频的不同 URL 写法都不能拼成支持证据。仓库不内置完整 URL、cookie、媒体或上游 stderr;报告只保存 URL hash、origin、固定分类和 extractor/video 身份。
用机器聚合器验证“两条不同公开 fixture、每条三份按时间递增且相互独立的 fresh READY 报告”门槛:
python3 packaging/verify_smoke_evidence.py \
--platform <platform> \
--target <release-target> \
<six-v2-smoke-reports...>当前已达到该门槛的范围只有:video-anything 0.2.0 的特定 darwin-arm64 内部候选 release 上的 Dailymotion;精确 release identity 由 support-summary.json 记录,六份原始证据位于同一目录。聚合器只验证提交给它的 READY 报告集合,不能证明集合之外没有被省略的失败尝试。包内文档不硬编码 identity,避免文档内容反过来改变被测 release 身份。这不代表另外三种架构、其他站点或尚未签名/公证的 macOS 正式资产已经验证。
仅处理你有权访问的公开内容。不绕过 DRM、付费墙、大会员、登录限制或平台安全措施。release 模式只接受显式 VA_COOKIES 文件,不读取浏览器配置目录。项目代码采用 MIT License;发布包内 FFmpeg/x264 及其对应源码按各自许可证分发,详见包内 THIRD_PARTY_NOTICES.md。