frank-syncmarket

audiocut-keyword

1
0
# Install this skill:
npx skills add frank-syncmarket/skills --skill "audiocut-keyword"

Install specific skill from multi-skill repository

# Description

音频关键字过滤工具 - 根据关键字配置自动识别并删除音频中的指定内容

# SKILL.md


name: audiocut-keyword
description: 音频关键字过滤工具 - 根据关键字配置自动识别并删除音频中的指定内容
version: 1.0.0
author: M.


音频关键字过滤工具

基于 FunASR 语音识别和 FFmpeg 剪辑的音频关键字过滤 Skill

功能特性

  • 精确转录: 使用 FunASR Paraformer 进行 30s 分段转录,获取字符级时间戳
  • 关键字识别: 根据配置文件自动识别音频中的关键字
  • 智能剪辑: 使用 FFmpeg 精确删除关键字片段并合成最终音频
  • 可配置: 支持自定义关键字列表和缓冲时间

使用场景

  1. YouTube 转播客: 删除视频中的"关注"、"订阅"、"点赞"等引导语
  2. 广告过滤: 自动删除音频中的广告和推广内容
  3. 内容清理: 批量处理音频,删除不需要的关键字片段

快速开始

基本用法

python3 ~/.claude/skills/audiocut-keyword/scripts/audiocut_keyword.py <音频文件>

指定输出文件

python3 ~/.claude/skills/audiocut-keyword/scripts/audiocut_keyword.py \
  input.mp3 \
  -o output.mp3

使用自定义关键字配置

python3 ~/.claude/skills/audiocut-keyword/scripts/audiocut_keyword.py \
  input.mp3 \
  -k my_keywords.json

调整缓冲时间

python3 ~/.claude/skills/audiocut-keyword/scripts/audiocut_keyword.py \
  input.mp3 \
  --buffer-before 1.0 \
  --buffer-after 1.0

工作流程

1. 音频转录(FunASR 30s 分段)
   ↓
2. 加载关键字配置
   ↓
3. 查找关键字位置(字符级时间戳)
   ↓
4. 生成删除计划(合并重叠片段)
   ↓
5. FFmpeg 剪辑并合成
   ↓
6. 输出处理后的音频

关键字配置文件

配置文件位于: ~/.claude/skills/audiocut-keyword/config/keywords.json

{
  "keywords": [
    "广告",
    "赞助",
    "推广",
    "关注",
    "订阅",
    "点赞",
    "转发",
    "分享",
    "评论区",
    "链接在简介",
    "微信公众号",
    "小程序"
  ],
  "buffer_before": 0.5,
  "buffer_after": 0.5,
  "description": "关键字配置文件"
}

配置说明

  • keywords: 关键字列表,支持中文和英文
  • buffer_before: 删除前缓冲时间(秒),避免删除不完整
  • buffer_after: 删除后缓冲时间(秒),避免删除不完整

技术实现

1. 音频转录

使用 FunASR Paraformer 模型进行 30s 分段转录:

  • 模型: paraformer-zh (中文语音识别)
  • 分段策略: 30s 一段,避免长音频时间戳漂移
  • 时间戳精度: 字符级(毫秒级)
  • 输出格式: JSON(包含每个字符的 start/end 时间戳)

2. 关键字识别

  • 在转录文本中使用正则表达式查找关键字
  • 根据字符位置获取对应的时间戳
  • 记录上下文信息,便于审查

3. 删除计划生成

  • 为每个关键字添加前后缓冲时间
  • 合并重叠的时间段,避免重复删除
  • 生成最终的删除片段列表

4. 音频剪辑

使用 FFmpeg filter_complex 进行无损剪辑:

ffmpeg -i input.mp3 \
  -filter_complex "[0:a]atrim=start=0:end=10,asetpts=PTS-STARTPTS[a0];
                   [0:a]atrim=start=15:end=30,asetpts=PTS-STARTPTS[a1];
                   [a0][a1]concat=n=2:v=0:a=1[outa]" \
  -map "[outa]" output.mp3

输出文件

处理完成后会生成以下文件:

  • <原文件名>_filtered.mp3 - 处理后的音频
  • <原文件名>_delete_plan.json - 删除计划(包含匹配信息)
  • <原文件名>_transcript.json - 转录文件(可选保留)

命令行参数

usage: audiocut_keyword.py [-h] [-o OUTPUT] [-k KEYWORDS]
                           [--buffer-before BUFFER_BEFORE]
                           [--buffer-after BUFFER_AFTER]
                           [--keep-transcript]
                           input_audio

positional arguments:
  input_audio           输入音频文件

optional arguments:
  -h, --help            显示帮助信息
  -o OUTPUT, --output OUTPUT
                        输出音频文件(默认:输入文件名_filtered.mp3)
  -k KEYWORDS, --keywords KEYWORDS
                        关键字配置文件(默认:config/keywords.json)
  --buffer-before BUFFER_BEFORE
                        删除前缓冲时间(秒,默认:0.5)
  --buffer-after BUFFER_AFTER
                        删除后缓冲时间(秒,默认:0.5)
  --keep-transcript     保留转录文件

依赖安装

Python 依赖

pip install funasr modelscope

系统依赖

  • FFmpeg (用于音频处理)
  • ffprobe (用于获取音频信息)

模型下载

首次运行会自动下载 FunASR 模型(约 2GB)到 ~/.cache/modelscope/

性能参考

指标
转录速度 ~0.16x 实时(1分钟音频约10秒处理)
剪辑速度 几乎瞬时完成
15分钟音频 总处理时间约 2-3 分钟

测试环境:M1 Mac,CPU 推理

集成到 youtube-to-xiaoyuzhou

在 youtube-to-xiaoyuzhou 工作流中使用:

# 下载 YouTube 音频后
audio_file = "downloaded_audio.mp3"

# 过滤关键字
filtered_audio = audiocut_keyword(audio_file)

# 上传到小宇宙
upload_to_xiaoyuzhou(filtered_audio)

注意事项

  1. 首次运行: 需要下载 FunASR 模型,可能需要几分钟
  2. 音频格式: 支持 MP3, WAV, M4A 等常见格式
  3. 关键字匹配: 精确匹配,不支持模糊匹配
  4. 缓冲时间: 建议设置 0.5-1.0 秒,避免删除不完整
  5. 长音频: 30s 分段策略确保时间戳精确,无长度限制

常见问题

Q1: 转录准确率低

原因: 背景噪音大、口音重、音质差

解决:
- 使用降噪工具预处理音频
- 调整音频采样率为 16kHz
- 检查音频是否清晰

Q2: 关键字未被识别

原因: 转录错误或关键字配置不准确

解决:
- 检查转录文件 *_transcript.json 中的文本
- 调整关键字配置,使用转录中的实际文本
- 添加关键字的变体(如"关注"、"关注一下")

Q3: 删除了不该删除的内容

原因: 关键字过于宽泛或缓冲时间过长

解决:
- 使用更具体的关键字
- 减小缓冲时间
- 检查删除计划文件 *_delete_plan.json

Q4: FFmpeg 执行失败

原因: FFmpeg 未安装或版本过旧

解决:

# macOS
brew install ffmpeg

# Ubuntu/Debian
sudo apt-get install ffmpeg

# 检查版本
ffmpeg -version

示例

示例 1: 处理 YouTube 音频

# 下载 YouTube 音频
yt-dlp -x --audio-format mp3 https://youtu.be/xxxxx -o input.mp3

# 过滤关键字
python3 ~/.claude/skills/audiocut-keyword/scripts/audiocut_keyword.py input.mp3

# 输出: input_filtered.mp3

示例 2: 自定义关键字

创建 my_keywords.json:

{
  "keywords": ["广告", "赞助商", "推广链接"],
  "buffer_before": 1.0,
  "buffer_after": 1.0
}

运行:

python3 ~/.claude/skills/audiocut-keyword/scripts/audiocut_keyword.py \
  input.mp3 \
  -k my_keywords.json

示例 3: 批量处理

for file in *.mp3; do
  python3 ~/.claude/skills/audiocut-keyword/scripts/audiocut_keyword.py "$file"
done

未来扩展

  • [ ] 支持模糊匹配和正则表达式
  • [ ] 支持多语言(英文、日文等)
  • [ ] 添加 GUI 界面
  • [ ] 支持实时预览删除效果
  • [ ] 集成到更多播客工作流

License

MIT

# Supported AI Coding Agents

This skill is compatible with the SKILL.md standard and works with all major AI coding agents:

Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.