with one click
podcastcut-edit-raw
粗剪播客。根据审查稿删除标记执行句子级FFmpeg剪辑。触发词:粗剪、句子级剪辑、rough cut
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
粗剪播客。根据审查稿删除标记执行句子级FFmpeg剪辑。触发词:粗剪、句子级剪辑、rough cut
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
使用 browser-use CLI 对 PodcastCut webapp 做浏览器验收。始终使用 headed 模式,覆盖打开页面、登录、上传指定音频、触发生成审查稿、刷新审查稿、手动标记删除、确认剪辑、核对 workspace 产物。触发词:browser validation、浏览器验证、用 browser-use 跑流程、上传音频验收
生成播客审查画布数据。根据当前工作区中的音频、转录、QA 报告和剪辑结果, 产出固定格式的 review_data.json,供右侧审查画布直接读取。 触发词:审查画布、review data、审查稿、生成播客审查
语音克隆 + 播客生成完整流程。 上传音频 → 转录 → 修正文稿 → 提取声音样本 → 克隆声音模型 → TTS 合成 → 合并成品音频。 全自动执行,无需用户逐步操作。 触发词:语音克隆、声音克隆、生成播客、克隆声音
音频剪辑。根据 delete_segments.json 删除指定片段,自适应淡入淡出,可选说话人音量对齐。触发词:剪辑、cut、编辑音频
将当前 webapp 发布到 Fly.io,并在发布前后做最小健康检查。 适用于前端或后端改动后的一键上线。触发词:deploy、发布、上线、推到 fly、fly.io
使用 browser-use CLI 对 webapp 做端到端验证。覆盖登录、上传音频、生成 review_data.json、刷新审查稿、手动标记删除、确认剪辑、验证 podcast_cut.mp3。触发词:browser e2e、端到端验证、验证网页剪辑、用浏览器跑流程
| name | podcastcut-edit-raw |
| description | 粗剪播客。根据审查稿删除标记执行句子级FFmpeg剪辑。触发词:粗剪、句子级剪辑、rough cut |
遍历 transcript 每个句子 → 检查是否在删除标记中 → 整句删除
用户: 按这个审查稿粗剪 /path/to/podcast_审查稿.md
用户: 粗剪,输出到 /path/to/output
| 场景 | 说明 |
|---|---|
| ✅ 删大段内容 | 寒暄、跑题、隐私、啰嗦 |
| ✅ 删整句 | 句子级时间戳足够精确 |
| ❌ 删半句/口误 | 用 /podcastcut-edit-fine 或 /podcastcut-transcribe |
# 从 transcript 出发,检查每个句子是否需要删除
for sentence in transcript['sentences']:
if normalize(sentence['text']) in 审查稿删除标记:
删除这个句子
为什么从 transcript 出发?
~~删除标记~~ 中1. 加载审查稿,提取所有 ~~删除标记~~
↓
2. 加载 transcript.json(句子级时间戳)
↓
3. 遍历每个句子,检查是否在删除标记中
↓
4. 合并连续删除 → 计算保留片段
↓
5. 生成 FFmpeg filter → 执行剪辑
↓
6. 输出 podcast_v2.mp3/mp4
def is_sentence_deleted(sentence_text, deletions):
"""检查句子是否应该删除"""
text_norm = normalize(sentence_text) # 移除空格标点
# 句子出现在任一删除标记中 → 删除
for deletion in deletions:
if text_norm in normalize(deletion):
return True
return False
标准化:移除空格、标点后比较,避免格式差异导致不匹配。
一键完成粗剪全流程。
python scripts/rough_cut.py <工作目录> <输入音频> [输出音频]
示例:
python scripts/rough_cut.py \
"/Volumes/T9/podcast/v5" \
"/Volumes/T9/podcast/原始音频.mp3"
输入:
podcast_审查稿.md - 带删除标记的审查稿podcast_transcript.json - 句子级时间戳输出:
podcast_删除清单.json - 删除的句子列表keep_segments.json - 保留片段列表filter.txt - FFmpeg filter 脚本ffmpeg_cmd.sh - FFmpeg 完整命令<工作目录>/
├── podcast_v2.mp3 # 剪辑后音频
├── podcast_删除清单.json # 删除时间段列表
├── keep_segments.json # 保留片段列表
├── filter.txt # FFmpeg filter 脚本
└── ffmpeg_cmd.sh # FFmpeg 完整命令
ffmpeg -y -i input.mp3 \
-filter_complex_script filter.txt \
-map "[outa]" \
-c:a libmp3lame -q:a 2 \
output_v2.mp3
ffmpeg -y -i input.mp4 \
-filter_complex_script filter.txt \
-map "[outv]" -map "[outa]" \
-c:v libx264 -crf 18 -c:a aac \
output_v2.mp4
用户: 按审查稿粗剪 /path/to/podcast_审查稿.md
AI: 好的,开始粗剪...
1. 加载审查稿: 144 处删除标记
2. 加载 transcript: 3376 句
3. 匹配删除: 296 个句子
4. 合并后: 137 个删除块
5. 生成 FFmpeg 命令并执行
结果:
- 原始时长: 2:08:07
- 剪辑后: 1:57:54
- 删除: 10:13
| 对比 | 粗剪 (本 Skill) | 精剪 (/podcastcut-edit-fine) |
|---|---|---|
| 时间戳 | 句子级 | 字符级 |
| 最小单位 | 整句 | 单字 |
| 适用 | 删大段内容 | 删口误、语气词 |
| 输入 | podcast_transcript.json | podcast_transcript_chars.json |
len < 2 跳过,导致没删掉if len(text_norm) == 1:
text_norm == del_norm # 精确匹配,避免误删
else:
text_norm in del_norm # 包含即可
/podcastcut-edit 拆分出来/podcastcut-edit-fine 处理