关于 podcast-splitter
podcast-splitter 是一款根据静音检测拆分音频并编辑停顿的 skill,适用于播客和录音处理,提供可调检测参数、预览、片段导出及批量处理。
主要功能
- 01可配置静音检测
- 02在停顿处拆分音频
- 03删除或缩短静音
- 04导出独立音频片段
- 05预览检测到的静音
- 06批量处理文件
适用场景
- 01将播客拆分为章节
- 02删除录音中的空白段
- 03从长音频制作片段
- 04编辑前预览停顿
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dkyazzentwatwa/ chatgpt-skills --skill podcast-splitter安装后在 Claude Code 中输入/podcast-splitter确认已加载。
附带文件scripts/podcast_splitter.pyscripts/requirements.txt
详细介绍
播客分段器
根据静音检测自动将音频文件拆分为多个片段。非常适合将播客分成章节、从长录音中创建片段,或去除无声片段。
快速开始
from scripts.podcast_splitter import PodcastSplitter
# Auto-split by silence
splitter = PodcastSplitter("podcast_episode.mp3")
segments = splitter.split_by_silence()
splitter.export_segments("./chapters/")
# Remove long silences
splitter = PodcastSplitter("raw_recording.mp3")
splitter.remove_silence(min_length=2000) # Remove silences > 2 seconds
splitter.save("clean_recording.mp3")
功能
- 静音检测:可配置阈值和时长
- 自动拆分:在自然停顿处拆分音频
- 去除静音:删除或缩短较长的停顿
- 导出章节:将各个片段保存为文件
- 预览模式:列出检测到的静音,不进行拆分
- 批量处理:处理多个文件
API 参考
初始化
splitter = PodcastSplitter("audio.mp3")
# With custom settings
splitter = PodcastSplitter(
"audio.mp3",
silence_thresh=-40, # dBFS threshold
min_silence_len=1000, # Minimum silence length (ms)
keep_silence=300 # Silence to keep at segment edges (ms)
)
静音检测
# Detect silence regions
silences = splitter.detect_silence()
# Returns: [(start_ms, end_ms), (start_ms, end_ms), ...]
# Print silence summary
splitter.print_silence_report()
拆分
# Split at all detected silences
segments = splitter.split_by_silence()
# Split at silences longer than threshold
segments = splitter.split_by_silence(min_silence_len=3000)
# Limit number of segments
segments = splitter.split_by_silence(max_segments=10)
去除静音
# Remove silences longer than threshold
splitter.remove_silence(min_length=2000) # Remove >2s silences
# Shorten silences to max length
splitter.shorten_silence(max_length=500) # Cap at 500ms
# Remove leading/trailing silence only
splitter.strip_silence()
导出
# Export all segments
splitter.export_segments(
output_dir="./chapters/",
prefix="chapter", # chapter_01.mp3, chapter_02.mp3
format="mp3",
bitrate=192
)
# Export specific segments
splitter.export_segment(0, "intro.mp3")
splitter.export_segment(3, "conclusion.mp3")
# Save modified audio
splitter.save("output.mp3")
CLI 用法
# Split podcast into chapters
python podcast_splitter.py --input episode.mp3 --output-dir ./chapters/
# Detect and list silences (no splitting)
python podcast_splitter.py --input episode.mp3 --detect-only
# Remove long silences
python podcast_splitter.py --input raw.mp3 --output clean.mp3 --remove-silence 2000
# Custom sensitivity
python podcast_splitter.py --input episode.mp3 --output-dir ./chapters/ \
--threshold -35 --min-silence 2000 --keep-silence 500
CLI 参数
| 参数 | 描述 | 默认值 |
|---|---|---|
--input | 输入音频文件 | 必填 |
--output | 输出文件(用于去除静音) | - |
--output-dir | 片段的输出目录 | - |
--detect-only | 仅检测并报告静音 | False |
--threshold | 静音阈值(dBFS) | -40 |
--min-silence | 检测静音的最短时长(ms) | 1000 |
--keep-silence | 边缘保留的静音时长(ms) | 300 |
--max-segments | 要创建的最大片段数 | None |
--remove-silence | 去除超过此时长的静音(ms) | - |
--shorten-silence | 将静音时长限制为(ms) | - |
--prefix | 输出文件名前缀 | segment |
--format | 输出格式 | mp3 |
--bitrate | 输出比特率(kbps) | 192 |
示例
将访谈拆分为问答片段
splitter = PodcastSplitter(
"interview.mp3",
silence_thresh=-35, # Less sensitive (louder threshold)
min_silence_len=2000, # Only split on 2+ second pauses
keep_silence=400 # Keep some silence for natural feel
)
segments = splitter.split_by_silence()
print(f"Found {len(segments)} segments")
splitter.export_segments("./questions/", prefix="qa")
去除录音中的无声片段
splitter = PodcastSplitter("raw_recording.mp3")
# Show what would be removed
splitter.print_silence_report()
# Remove silences longer than 3 seconds
splitter.remove_silence(min_length=3000)
# Cap remaining silences at 1 second
splitter.shorten_silence(max_length=1000)
splitter.save("clean_recording.mp3")
创建精彩片段
splitter = PodcastSplitter("episode.mp3")
segments = splitter.split_by_silence(min_silence_len=5000)
# Export only segments longer than 30 seconds
for i, segment in enumerate(segments):
duration = segment['end'] - segment['start']
if duration > 30000: # > 30 seconds
splitter.export_segment(i, f"highlight_{i+1}.mp3")
批量处理单集
import os
from scripts.podcast_splitter import PodcastSplitter
episodes_dir = "./raw_episodes/"
output_dir = "./processed/"
for filename in os.listdir(episodes_dir):
if filename.endswith('.mp3'):
filepath = os.path.join(episodes_dir, filename)
splitter = PodcastSplitter(filepath)
# Remove long silences
splitter.remove_silence(min_length=2000)
# Save cleaned version
output_path = os.path.join(output_dir, filename)
splitter.save(output_path)
print(f"Processed: {filename}")
预览静音检测
splitter = PodcastSplitter("episode.mp3")
# Get detailed silence info
silences = splitter.detect_silence()
print("Detected Silences:")
for i, (start, end) in enumerate(silences):
duration = (end - start) / 1000
start_time = start / 1000
print(f" {i+1}. {start_time:.1f}s - {duration:.1f}s silence")
# Print summary
splitter.print_silence_report()
检测设置指南
| 音频类型 | 阈值 | 最短静音时长 | 备注 |
|---|---|---|---|
| 安静的录音室 | -50 dBFS | 500ms | 灵敏度极高 |
| 普通播客 | -40 dBFS | 1000ms | 默认值 |
| 嘈杂的录音 | -35 dBFS | 1500ms | 灵敏度较低 |
| 有间奏的音乐 | -30 dBFS | 2000ms | 适用于口播间隙 |
调整灵敏度
- 拆分更多:降低阈值(例如,-50),缩短 min_silence
- 拆分更少:提高阈值(例如,-30),延长 min_silence
- 听感自然:延长 keep_silence(500-1000ms)
- 紧凑剪辑:缩短 keep_silence(100-200ms)
依赖项
pydub>=0.25.0
注意:需要在系统上安装 FFmpeg。
限制
- 最适合语音内容(不适用于音乐)
- 嘈杂的录音可能需要调整阈值
- 长文件会占用大量内存
- 不会自动命名章节(需要手动重命名)
评论
支持 Markdown