mcpField
P
podcast-splitter

podcast-splitter

github.com/dkyazzentwatwaクリエイティブ・メディア12456 回インストール29 週間前に更新
リポジトリ

podcast-splitter について

podcast-splitter は、無音検出に基づいて音声を分割し、無音部分を編集するスキルです。ポッドキャストや録音の処理向けに、検出設定、プレビュー、セグメント出力、複数ファイルの処理に対応します。

主な機能

  1. 01無音検出の設定
  2. 02間での音声分割
  3. 03無音の削除または短縮
  4. 04個別セグメントの出力
  5. 05検出した無音のプレビュー
  6. 06複数ファイルの一括処理

活用シーン

  1. 01ポッドキャストの章分け
  2. 02録音の無音部分の削除
  3. 03長い音声からクリップを作成
  4. 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 dBFS500ms非常に高感度
一般的なポッドキャスト-40 dBFS1000msデフォルト
ノイズの多い録音-35 dBFS1500ms低感度
休止を含む音楽-30 dBFS2000ms話し声の休止向け
感度の調整
  • 分割数を増やす:しきい値を下げ(例:-50)、min_silence を短くします
  • 分割数を減らす:しきい値を上げ(例:-30)、min_silence を長くします
  • 自然な仕上がり:keep_silence を長くします(500~1000ms)
  • タイトな編集:keep_silence を短くします(100~200ms)

依存関係

pydub>=0.25.0

注:システムに FFmpeg がインストールされている必要があります。

制限事項

  • 音声コンテンツ(音楽ではなく)に最適です
  • ノイズの多い録音では、しきい値の調整が必要になる場合があります
  • 長いファイルは大量のメモリを使用します
  • チャプター名は自動で付けられません(手動での名前変更が必要です)

コメント