audiocut-keyword

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

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "audiocut-keyword" with this command: npx skills add wlzh/skills/wlzh-skills-audiocut-keyword

音频关键字过滤工具

基于 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     保留转录文件

依赖安装

FunASR 环境(推荐)

使用预配置的 Python 3.10 环境:

# FunASR 环境已预安装在 skill 目录
~/.claude/skills/audiocut-keyword/funasr_env_310/

包含:

  • Python 3.10
  • torch 2.10.0
  • funasr 1.3.0

手动安装 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

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

text-to-speech

No summary provided by upstream source.

Repository SourceNeeds Review
34-wlzh
General

youtube-to-blog-post

No summary provided by upstream source.

Repository SourceNeeds Review
33-wlzh
General

x-fetcher

No summary provided by upstream source.

Repository SourceNeeds Review
27-wlzh
General

image-generator

No summary provided by upstream source.

Repository SourceNeeds Review
27-wlzh