Skip to content

Repository files navigation

🎬 video-anything

面向 Agent 的自包含视频下载 Skill

把公开单视频 URL 交给支持 Agent Skills 的工具,完成下载、验证和发布。

English · 简体中文 · 下载契约

Agent Skills License: MIT

当前重点是把“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.mp4info.jsonmanifest.jsonfetch.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.sh

check.sh 只验证 release 包内的运行时,不会自动安装任何东西。它通过后就可以直接运行:

bash scripts/fetch.sh "https://example.com/video" ./video-out

如果你是从源码开发,不是用 release archive,先显式开启开发模式:

export VA_DEV_MODE=1

然后自己提供 python3yt-dlpffmpegffprobe,再运行同样的 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。

在 Agent 中使用

安装 Skill 后,可以直接提出类似请求:

  • “下载这个公开视频并验证产物。”
  • “把这个 release 包解压到本机后,先帮我检查它是否可用。”

Skill 的操作边界和下游流程见 SKILL.md

测试与 CI

本地离线测试不访问网络:

python3 -m pytest -q
bash -n scripts/*.sh tests/smoke.sh
git diff --check

release 包可直接运行 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

About

One link → everything about a video. Paste a video URL and get the video, no-watermark file, audio, transcript (文案), subtitles, cover, and metadata — then let your AI agent summarize, rewrite, or storyboard it. Zero config, zero API key, fully local.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages