# Audio Editing

通用音频处理：音频剪辑/裁剪、格式转码（mp3/wav/m4a/aac）、音量归一化、从视频提取音轨、多段拼接、淡入淡出、变速（保音高）。当用户说“剪音频”“裁一段”“转成...

- Repository: https://github.com/ZJU-REAL/Easel (4293 stars)
- Category: Media
- License: Apache-2.0
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add ZJU-REAL/Easel --skill audio-editing -g -a claude-code -y`
Codex: `npx skills add ZJU-REAL/Easel --skill audio-editing -g -a codex -y`
Cursor: `npx skills add ZJU-REAL/Easel --skill audio-editing -g -a cursor -y`
Gemini CLI: `npx skills add ZJU-REAL/Easel --skill audio-editing -g -a gemini-cli -y`

## Description

通用音频处理：音频剪辑/裁剪、格式转码（mp3/wav/m4a/aac）、音量归一化、从视频提取音轨、多段拼接、淡入淡出、变速（保音高）。当用户说“剪音频”“裁一段”“转成 mp3”“调音量/响度”“提取音轨/扒音频”“拼接音频”“淡入淡出”“加速/减速音频”“变速不变调”时使用。与 audio-denoise 的区别：audio-denoise 专做降噪，audio-editing 做除降噪外的通用音频操作（也内置 denoise 作为兜底）。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# 通用音频处理

除降噪外的通用音频操作：裁剪、转码、音量归一化、提取音轨、拼接、淡入淡出、变速。全部通过共享脚本 `skills/shared/scripts/audio_ops.py` 封装 ffmpeg，参数确定、可复现，不现场手拼命令。

## 输入

| 字段 | 必填 | 说明 |
|------|------|------|
| input_file | 是 | 音频或视频文件路径 |
| operation | 是 | trim / convert / normalize / extract / concat / fade / speed / denoise / info |
| output_file | 否 | 默认 `outputs/主题名/{name}-{op}.{ext}` |

支持格式：wav / mp3 / m4a / aac / flac，视频容器 mp4 / mkv / mov（提取音轨）。

## 输出

- 处理后的音频文件（放入 `outputs/主题名/`）
- 每次操作打印实际执行的 ffmpeg 命令 + 输出文件的时长/码率/声道/采样率

## 执行步骤

脚本路径（相对项目根）：`skills/shared/scripts/audio_ops.py`。每个子命令都支持 `-h`。

### 0. 环境检查 + 探测

```bash
python skills/shared/scripts/audio_ops.py info input.mp3
```

脚本自身会检查 ffmpeg/ffprobe，缺失时给安装提示。先 `info` 展示文件时长/码率/声道再动手。

### 1. 裁剪 trim

```bash
# 起止时间
python skills/shared/scripts/audio_ops.py trim in.mp3 -o outputs/主题名/clip.mp3 --start 00:00:05 --end 00:00:20
# 起点 + 时长
python skills/shared/scripts/audio_ops.py trim in.mp3 -o clip.mp3 --start 5 --duration 15
```

### 2. 转码 convert

```bash
python skills/shared/scripts/audio_ops.py convert in.wav -o out.mp3 --bitrate 192k
python skills/shared/scripts/audio_ops.py convert in.m4a -o out.wav --sample-rate 44100 --channels 2
```

输出格式由扩展名决定（mp3/wav/m4a/aac）。

### 3. 音量归一化 normalize

```bash
python skills/shared/scripts/audio_ops.py normalize in.mp3 -o out.mp3
```

默认 loudnorm 到 -14 LUFS / -1.5 dBTP（社媒/播客通用响度）。可用 `--i --tp --lra` 覆盖。

### 4. 提取音轨 extract

```bash
python skills/shared/scripts/audio_ops.py extract video.mp4 -o audio.m4a
python skills/shared/scripts/audio_ops.py extract video.mp4 -o audio.aac --copy   # 不重编码，最快
```

### 5. 拼接 concat

```bash
python skills/shared/scripts/audio_ops.py concat a.mp3 b.mp3 c.mp3 -o all.mp3
```

按参数顺序拼接，重编码方式兼容不同采样率/容器。

### 6. 淡入淡出 fade

```bash
python skills/shared/scripts/audio_ops.py fade in.mp3 -o out.mp3 --fade-in 2 --fade-out 3
```

`--fade-out` 自动定位到结尾前 N 秒。

### 7. 变速 speed（保持音高）

The rest: https://github.com/ZJU-REAL/Easel/blob/HEAD/skills/builtin/audio-editing/SKILL.md
