Token导航 LogoToken导航

Agent Skill · 开发

ym-mediatoolkit(ym 媒体工具包)

ym-mediatoolkit 用于补充开发相关能力,适合在 OpenClaw 中需要让 Agent 承接开发相关任务时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

ym-mediatoolkit 是开发类 Agent Skill,可用宿主为 OpenClaw,通过ClawHub获取,权限为接触敏感数据;许可证为 MIT-0,第三方扫描有提醒项,按安装量在开发类的 21,746 个 Skill 里排第 8,579。

总安装 3,103周安装 128GitHub Stars 公开资料未说明下载 1,014核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT-0
版本
3.0.0

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:ym-mediatoolkit(ym 媒体工具包)
来源仓库:https://github.com/370299455cx-web/ym-mediatoolkit
安装命令:
openclaw skills install ym-mediatoolkit
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install ym-mediatoolkit

这个 Skill 是做什么的

开发类 Skill 面向写代码、改代码和排查问题,一般会读写仓库文件,部分还会执行构建或测试命令。

ym-mediatoolkit 用于补充开发相关能力,适合在 OpenClaw 中需要让 Agent 承接开发相关任务时使用。适用于流式视频处理工具集开发。支持压缩、封面提取和音频转换功能。安装命令为 openclaw skills install ym-mediatoolkit,需确认权限范围和维护状态。

使用前应检查是否会触发联网、命令执行或文件读写等敏感操作。

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 OpenClaw;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 openclaw skills install ym-mediatoolkit;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要接触敏感数据,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

ym-mediatoolkit 怎么安装?

在终端执行 openclaw skills install ym-mediatoolkit。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

ym-mediatoolkit 支持哪些 AI 工具?

公开资料标注支持 OpenClaw。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

ym-mediatoolkit 需要什么权限?

权限级别是接触敏感数据。该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

ym-mediatoolkit 是免费的吗?

来源标注的许可证是 MIT-0。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

ym-mediatoolkit 用的人多吗?

公开数据是累计安装 3,103 次,近一周安装 128 次,下载 1,014 次。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

ym-mediatoolkit 安全吗?

第三方扫描有提醒项,说明存在需要人工确认的行为。安装前请打开源码看清它读了什么、联网到哪里。

值得选的地方和要先想清楚的地方

值得选的地方

  • 专注 OpenClaw 一种宿主,触发方式和使用习惯不用来回切换。
  • 许可证明确为 MIT-0,商用和分发边界好判断。

先想清楚的地方

  • 需要接触敏感数据,装到常用环境前要先评估影响面。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 OpenClaw,想直接扩展它能力的人。
  • 需要处理开发类任务、又不想每次都手写提示词的人。

不太适合

  • 环境里有大量密钥、凭证,不方便给第三方 Skill 读取的人。
  • 需要厂商级技术支持和 SLA 的生产系统。

开发类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
skill-vetter

技能审查员 · OpenClaw

8,779,018986操作浏览器MIT-0通过
ontology

本体论 · OpenClaw

6,636,960576只读MIT-0通过
entra-app-registration

内部应用程序注册 · Codex、Claude

6,631,872764接触敏感数据未明确通过
entra-app-registration

内部应用程序注册 · Codex、Claude

3,757,680201接触敏感数据未明确通过
nano-banana-pro

纳米香蕉专业版 · OpenClaw

3,526,898364接触敏感数据MIT-0有提醒
ym-mediatoolkit

ym 媒体工具包 · 本页

3,103—接触敏感数据MIT-0有提醒

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

name
ym-mediatoolkit
version
2.1.0
description
流式视频处理工具集 - 压缩、封面提取、音频转换,无需下载完整视频
author
your_name
tags
categories
clawhub
entrypoint
python run.py
runtime
python3
http_port
8080
note
HTTP 服务默认绑定 127.0.0.1,勿直接暴露到公网

YM MediatoolToolkit

概述

一个高性能的流式视频处理 Skill,无需下载完整视频文件即可完成:

  • 视频压缩 - 保持清晰度,体积可压缩至 1/10
  • 封面提取 - 任意时间点或帧号提取封面
  • 音频提取 - 转成 MP3 / WAV / AAC / M4A 格式

所有操作均采用流式处理,边下载边处理,大幅节省时间和磁盘空间。


安全特性

URL 验证 (SSRF/LFI 防护)

utils.validate_video_url() 在所有入口点和子进程调用前执行多层验证:

层级检查项防护目标
协议仅允许 http:// / https://LFI (file://)、协议走私
字符拦截 IDN/Unicode 同形字、Punycode (xn--)域名欺骗攻击
IP 模式正则匹配 + ipaddress 库双重校验私有 IP 段 (10.x/172.16-31.x/192.168.x/127.x/169.254.x/0.x)IP 直连 SSRF
DNS 解析socket.getaddrinfo 解析域名 → ipaddress 检查所有解析 IP (IPv4+IPv6)DNS 绑定到私有 IP 的 SSRF
IPv6检查 ::1、fe80::、fc00::/fdff::、::ffff:0:0 (IPv4-mapped)IPv6 SSRF
DNS 错误策略:如果 DNS 解析失败(超时/网络错误),验证将拒绝请求(fail-close),而非放行。这是与早期版本的区别——之前版本在 DNS 失败时会发出警告并允许通过。

输出路径防护

utils.sanitize_output_path() 对所有用户提供的 output_path、save_path、output_dir 执行检查:

检查项说明
路径穿越拒绝包含 .. 的路径
保留设备名拒绝 CON/NUL/COM1 等系统保留名
越界写入拒绝解析后超出工作目录的路径

路径清理在所有入口点执行:

  • run.py — handle_compress、handle_thumbnail、handle_audio、handle_audio_batch
  • audio_extractor.py — extract_audio_streaming、extract_audio_batch
  • frame_extractor.py — extract_thumbnail_from_url

快速开始

1. 安装依赖

pip install -r requirements.txt

2. 通过命令行使用

提供 JSON 参数:

# 压缩视频
python run.py -a compress -i '{"video_url": "https://example.com/video.mp4", "target_ratio": 0.1}'

# 提取封面(第 0 秒)
python run.py -a thumbnail -i '{"video_url": "https://example.com/video.mp4"}'

# 提取音频
python run.py -a audio -i '{"video_url": "https://example.com/video.mp4", "format": "mp3"}'

3. 通过配置文件

python run.py -i params.json

4. 启动 HTTP 服务

# 启动 API 服务
python run.py --serve

# 默认监听 127.0.0.1:8080(仅本地访问)
HTTP 模式需要 Flask: ``bash pip install flask flask-cors ``

API 参考

所有端点接收 JSON body,响应 JSON。

POST /skill/compress

流式压缩视频。

请求参数:

参数类型默认值说明
video_urlstring必填视频 URL(仅 http/https)
target_rationumber0.1目标体积比例
adaptivebooleantrue是否自动调整 CRF
crfinteger24CRF 值(18-28)
presetstring"veryfast"编码预设
output_pathstring自动生成输出路径

响应示例:

{
  "status": "success",
  "output_path": "compressed_video.mp4",
  "original_size_mb": 150.5,
  "new_size_mb": 12.3,
  "ratio": 0.082,
  "crf_used": 24,
  "streaming": true
}

POST /skill/thumbnail

从视频提取封面。

请求参数:

参数类型默认值说明
video_urlstring必填视频 URL
time_secondsnumber0提取时间点(秒)
frame_numberinteger-指定帧号(优先级高于 time)
save_pathstring不保存封面保存路径
resize_widthinteger原尺寸缩放宽度
qualityinteger85JPEG 质量(1-100)

响应示例:

{
  "status": "success",
  "video_info": {
    "width": 1920,
    "height": 1080,
    "codec": "h264",
    "fps": 30000,
    "duration": 120.5,
    "total_frames": 3615,
    "extract_method": "time_10s"
  },
  "shape": [1080, 1920, 3],
  "saved_path": "thumbnail.jpg"
}

POST /skill/audio

流式提取音频。

请求参数:

参数类型默认值说明
video_urlstring必填视频 URL
formatstring"mp3"音频格式:mp3/wav/aac/m4a
bitratestring"128k"比特率
sample_rateinteger44100采样率
channelsinteger2声道数
start_timenumber全部开始时间(秒)
durationnumber全部持续时间(秒)
output_pathstring自动生成输出路径

响应示例:

{
  "status": "success",
  "output_path": "audio.mp3",
  "format": "mp3",
  "size_mb": 5.2,
  "duration_sec": 120.5,
  "bitrate": "128k",
  "sample_rate": 44100,
  "channels": 2,
  "streaming": true
}

POST /skill/audio_batch

批量提取多个视频的音频。

请求参数:

{
  "videos": [
    {"url": "https://...", "name": "video1"},
    {"url": "https://...", "name": "video2"}
  ],
  "output_dir": "./audio_output",
  "format": "mp3",
  "bitrate": "192k",
  "sample_rate": 44100
}

POST /skill/audio_info

获取视频的音频流信息。

请求参数: {"video_url": "https://..."}

POST /skill/info

获取视频完整信息(分辨率、时长、编码等)。

请求参数: {"video_url": "https://..."}

POST /skill/batch

批量处理(压缩/封面/音频)。

请求参数:

{
  "action": "thumbnail",
  "videos": [
    {"video_url": "https://...", "time_seconds": 5},
    {"video_url": "https://...", "time_seconds": 10}
  ]
}

GET /health

健康检查端点:

{
  "status": "ok",
  "skill": "video-streaming-toolkit"
}

命令行 (CLI)

python run.py -a <action> -i '<json>'
# 或
python run.py -i params.json

架构说明

                    ┌─────────────┐
                    │  run.py     │  ← 统一入口(CLI/HTTP)
                    │  (入口)      │
                    └─────┬───────┘
                          │
            ┌─────────────┼──────────────┐
            ▼             ▼              ▼
    ┌────────────┐ ┌───────────┐ ┌──────────────┐
    │ audio_     │ │ video_    │ │ frame_       │
    │ extractor  │ │ compressor│ │ extractor    │
    │ .py        │ │ .py       │ │ .py          │
    └────────────┘ └───────────┘ └──────────────┘
            │             │              │
            ▼             ▼              ▼
       ┌─────────────────────────────────────┐
       │           utils.py                  │
        │  · validate_video_url()             │ ← URL/SSRF 验证
        │  · sanitize_output_path()           │ ← 路径穿越防护
        │  · get_file_size_mb()               │
        │  · download_video_to_temp()         │
        └─────────────────────────────────────┘

所有模块共用 utils.validate_video_url() 和 utils.sanitize_output_path() 进行安全校验。


测试

# 压缩测试
python run.py -a compress -i '{"video_url": "https://example.com/sample.mp4"}'

# 封面测试
python run.py -a thumbnail -i '{"video_url": "https://example.com/sample.mp4", "time_seconds": 10}'

# 音频测试
python run.py -a audio -i '{"video_url": "https://example.com/sample.mp4", "format": "mp3"}'

# 安全验证测试(应被拒绝)
python run.py -a info -i '{"video_url": "file:///etc/passwd"}'
python run.py -a info -i '{"video_url": "http://127.0.0.1:8080/admin"}'
python run.py -a info -i '{"video_url": "http://192.168.1.1/config"}'
python run.py -a info -i '{"video_url": "http://10.0.0.1/internal"}'
python run.py -a info -i '{"video_url": "http://[::1]/admin"}'
python run.py -a info -i '{"video_url": "http://evil.com"}'  # 若 evil.com 解析到内网 IP

安全部署指南

外部依赖

本技能通过 subprocess 调用系统命令 ffmpeg 和 ffprobe。请确保从可信源安装:

# Ubuntu/Debian
apt install ffmpeg

# Alpine (推荐容器)
apk add ffmpeg

# macOS
brew install ffmpeg

# Windows
choco install ffmpeg

推荐部署方式

 Docker 容器 (python:3.11-slim)
 +----------------------------------+
 | python run.py --serve             |
 |   --host 0.0.0.0 --port 8080     |  ← 容器内绑定 0.0.0.0
 | ffmpeg (apt install)              |     反向代理控制外部暴露
 | 以非 root 用户运行                 |
 +---------------+------------------+
                 |
                 ▼
 Nginx / Caddy (反向代理 + 认证)
 限制网络出站, 配置 ACL

运行时安全

要求说明
最小权限以非 root 用户运行,仅有 temp/output 目录写权限
网络隔离限制容器出站到仅允许的 CDN/视频源域名
磁盘配额限制临时目录大小,防止磁盘填满
临时目录清理使用 TMPDIR 环境变量指定临时目录并定期清理
认证生产环境务必在 HTTP 服务器前添加反向代理认证 (Basic Auth / OAuth / API Key)

启动选项

# 仅本地访问(安全默认)
python run.py --serve

# 指定地址和端口
python run.py --serve --host 127.0.0.1 --port 9000

# 仅限内网访问(需要反向代理认证)
python run.py --serve --host 0.0.0.0 --port 8080

已知限制

限制说明缓解措施
DNS 重绑定攻击者可在验证通过后快速切换 DNS 记录,指向内网地址网络层出口控制 / 使用固定 IP 白名单
HTTP 重定向ffmpeg 可能跟随 302 跳转到验证时未检查的地址部署反向代理并启用重定向验证
十六进制/十进制 IP0x7f000001 (127.0.0.1) 等格式不会被 ip_address 识别getaddrinfo 可捕获部分此类情况,依赖平台
ffmpeg 沙箱ffmpeg/ffprobe 通过子进程执行非受信 URL隔离容器 + 非 root 用户 + 最小权限
完整下载download_video_to_temp() 会将文件完整下载到磁盘该函数当前未被主流程调用,仅作为工具函数保留;若启用需设置磁盘配额

平台分布

OpenClaw

94.75%
按下载量换算961

安全审计

VirusTotal

通过

ClawScan

可疑

Static analysis

通过

权限和风险

接触敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills