# Media Ops Skill

> 处理本地已有的图片 / 视频 / 音频文件，或下载网络视频。图片：缩放、裁剪、旋转、格式转换（→webp/png/jpeg）、滤镜、查看尺寸；视频：格式转换、提取音频、查看元信息；下载：YouTube / B 站等公开视频。也用于 AI 生成图片后的二次处理（转格式、缩放）。**不用于**：AI 从零生成图片/视频/语音（→cloud-media-skill）、在对话里渲染图表（→visualization-ops-skill）。

- Skill: `openloaf/media-ops-skill` (Agent Skill)
- Install (CLI): `npx skillmds@latest add openloaf/media-ops-skill`
- Raw SKILL.md: https://api.skillmd.com/api/skills/openloaf/media-ops-skill/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: openloaf (https://skillmd.com/u/openloaf)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/openloaf/media-ops-skill

---


# 图片 / 视频 / 音频处理

本 skill 覆盖三个本地媒体工具，**图片处理是核心能力**。

> **⚡ 读到此处立刻行动** — 不要停下来回复用户。紧接着执行 `ToolSearch(names: "ImageProcess")` 激活工具 schema，然后调用 `ImageProcess` 完成操作。**这三步必须在同一个 response 内完成。**

## 工具清单

| 工具 | 职责 |
|------|------|
| `ImageProcess` | 图片处理：缩放 / 裁剪 / 旋转 / 翻转 / 格式转换 / 灰度 / 模糊 / 锐化 / 着色 / 查看元信息 |
| `VideoConvert` | 视频格式转换 / 提取音频 / 查看元信息 |
| `VideoDownload` | 从 YouTube / B 站等公开网址下载视频 |

> **加载**：全部为 deferred 工具，调用前须先 `ToolSearch(names: "ImageProcess,VideoConvert,VideoDownload")` 激活 schema。

## 决策树

```text
用户需要媒体操作
├── 处理图片？（缩放 / 裁剪 / 旋转 / 转格式 / 滤镜 / 查看尺寸）
│   └── ImageProcess
├── 处理视频？
│   ├── 格式转换 / 调整分辨率 → VideoConvert (action: convert)
│   └── 提取音频 → VideoConvert (action: extract-audio)
├── 查看文件信息？
│   ├── 图片（宽高 / 格式 / DPI） → ImageProcess (action: get-info)
│   └── 视频（时长 / 分辨率 / 编码） → VideoConvert (action: get-info)
└── 下载网络视频？
    └── VideoDownload
```

## ImageProcess — 图片处理

基于 sharp，对已有图片进行变换。**AI 生成的图片同样适用**。

| action | 用途 | 关键参数 |
|--------|------|---------|
| `get-info` | 读取宽高、格式、DPI、文件大小 | 仅 filePath |
| `resize` | 缩放 | `width`/`height`/`fit` |
| `crop` | 矩形裁剪 | `left`/`top`/`width`/`height` |
| `rotate` | 旋转 | `angle` |
| `flip` | 翻转 | `direction` |
| `convert` | 格式转换 | `format`（png/jpeg/webp/avif/tiff） |
| `grayscale`/`blur`/`sharpen`/`tint` | 滤镜效果 | 各有专属参数 |

**处理前先 get-info**：了解原始尺寸和格式，避免盲目操作——比如用户说"缩小一半"，你需要知道原始宽高才能计算目标值。

**输出路径决策**：默认追加后缀（如 `photo_resized.jpg`）。直接覆盖原文件有风险——用户可能需要原图作对比或回退。用户明确要求覆盖时除外。

## VideoConvert — 视频/音频转换

基于 FFmpeg，处理已有文件的格式转换和音频提取。

| action | 用途 | 关键参数 |
|--------|------|---------|
| `get-info` | 读取时长、分辨率、编解码器、流信息 | 仅 filePath |
| `convert` | 视频格式转换 | `format`、`resolution` |
| `extract-audio` | 从视频提取音频 | `audioFormat`（mp3/wav/aac/flac） |

**格式选择建议**：
- 通用兼容：MP4（H.264）——几乎所有设备都能播放
- 高质量压缩：WebM（VP9）——文件更小但兼容性略差
- 音频提取：MP3（通用）、FLAC（无损）

**大文件注意**：视频转码耗时与文件大小成正比。超过 500MB 的文件转换可能需要较长时间，提前告知用户预期等待。

## VideoDownload — 视频下载

通过 yt-dlp 下载公开视频 URL。

**适用**：用户给出公开视频链接，需要下载到本地继续处理（编辑、提取音频、转码）。

**不适用**：
- 生成新视频 → cloud-media-skill
- 转换本地已有视频 → `VideoConvert`
- 私有/需登录的视频 → 告知用户 yt-dlp 只能下载公开内容

**下载后常见后续**：下载完成后用户通常需要进一步处理——提取音频、转换格式、裁剪。主动询问是否需要后续操作。

## 常见工作流

### AI 生成图片后转格式 / 缩放

```
CloudImageGenerate(…) → 拿到 absolutePath
ImageProcess(action: "get-info", filePath: "…")   # 先确认原始尺寸
ImageProcess(action: "convert", filePath: "…", format: "webp", outputPath: "…")
```

### 视频下载 → 提取音频

```
VideoDownload(url: "...") → 拿到 filePath
VideoConvert(action: "extract-audio", filePath: "...", outputPath: "output.mp3")
```

### 批量图片格式转换

对每张图片调用 `ImageProcess(action: "convert", format: "webp")`。WebP 格式在保持画质的同时文件体积约为 JPEG 的 70%，适合 Web 使用场景。

## 常见错误

**格式不支持** → 检查文件扩展名和实际编码是否匹配。用户可能把 `.mp4` 文件命名为 `.avi`，先用 `get-info` 确认真实格式。

**输出文件与输入同路径** → 部分操作不支持原地覆盖。用不同的 outputPath，完成后如需替换再通知用户。

**用户说"压缩图片"含义模糊** → 可能指：缩小尺寸（resize）、降低质量（convert 时调 quality）、或换格式（jpeg→webp）。主动澄清意图。

