AudioEditor について
AudioEditor は録音音声を整えるスキルです。単語単位の文字起こしと区間分類でフィラー、言い直し、吃音、無音を特定し、カットとクロスフェードを行います。編集のプレビューや任意のクラウド処理にも対応します。
主な機能
- 01単語単位の音声文字起こし
- 02編集対象区間の分類
- 03音声のカットとクロスフェード
- 04ルームトーンによる間の補完
- 05任意の Cleanvoice クラウド処理
- 06ゲート由来のクリック検出と修復
活用シーン
- 01ポッドキャストのフィラーや無音の除去
- 02編集を適用する前のプレビュー
- 03録音の積極的な整理とクラウド処理
- 04音声のノイズゲートクリックの修復
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ danielmiessler/ lifeos --skill audioeditorインストール後、Claude Code で/audioeditorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
Tools/Analyze.help.mdAnalyze.tsEdit.help.mdEdit.tsGateRepair.help.mdGateRepair.tsGateScan.help.mdGateScan.tsLoudnessLock.help.mdLoudnessLock.tsPipeline.help.mdPipeline.tsPolish.help.mdPolish.tsTranscribe.help.mdTranscribe.tsWorkflows/Clean.md詳細
AudioEditor
カスタマイズ
実行する前に、ユーザーによるカスタマイズが次の場所にあるか確認してください:
~/.claude/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/AudioEditor/
このディレクトリが存在する場合は、そこにある PREFERENCES.md、設定、またはリソースを読み込み、適用してください。これらはデフォルトの動作より優先されます。ディレクトリが存在しない場合は、スキルのデフォルト設定で進めてください。
音声通知
このスキルが呼び出されたら、ほかの作業を始める前に必ずこの通知を送信してください。
-
音声通知を送信:
curl -s -X POST http://localhost:31337/notify \ -H "Content-Type: application/json" \ -d '{"message": "Running the WORKFLOWNAME workflow in the AudioEditor skill to ACTION"}' \ > /dev/null 2>&1 & -
テキスト通知を出力:
Running the **WorkflowName** workflow in the **AudioEditor** skill to ACTION...
これは省略できません。スキルの呼び出し時に、この curl コマンドを直ちに実行してください。
機能
録音された音声からフィラー語、言い直し、どもり、無音部分を自動的に取り除き、呼吸音を弱め、すべてのカットにクロスフェードを適用します。ファイルを単語レベルで文字起こしし、Claude が各セグメントを分類(KEEP、CUT_FILLER、CUT_FALSE_START、CUT_STUTTER、CUT_DEAD_AIR)した後、ffmpeg でカットを実行します。オプションの Cleanvoice 処理で仕上げられます。モード:--preview、--aggressive、--polish。
問題点
録音を手作業で整えるには、「えーと」や、話し始めたものの途中でやめた文、数秒の無音を波形上で一つずつ探し、クリックノイズが出ないようカットごとにクロスフェードする必要があります。時間がかかり、面倒な作業です。また、単純な自動ツールではカットしすぎて、意図的な間まで偶発的な無音と一緒に消してしまったり、編集箇所に目立つ継ぎ目が残ったりします。このパイプラインは意図的な間と無音部分を区別し、ルームトーンで隙間を埋め、編集箇所ごとにクロスフェードを適用するため、ぶつ切りではなく、自然に聞こえる音声に仕上がります。
動作の仕組み
Whisper が単語レベルのタイムスタンプを生成し、Claude が各セグメントを分類(意図的な強調と偶発的な繰り返しを区別)した後、ffmpeg が 40ms の qsin クロスフェード、ルームトーンによる隙間の補完、音量を 50% に下げる呼吸音の減衰を行います。呼吸音は削除しません。オプションの Cleanvoice API 処理では、口の中で鳴る音の除去、残ったフィラー語の除去、ラウドネスの正規化を行います。
パイプライン
Audio Input
|
[Transcribe] Whisper word-level timestamps (insanely-fast-whisper on MPS)
|
[Analyze] Claude classifies each segment:
| KEEP / CUT_FILLER / CUT_FALSE_START / CUT_EDIT_MARKER / CUT_STUTTER / CUT_DEAD_AIR
| Distinguishes rhetorical emphasis from accidental repetition
|
[Edit] ffmpeg executes cuts:
| - 40ms qsin crossfades at every edit point
| - Room tone extraction and gap filling
| - Breath attenuation (50% volume, not removal)
|
[Polish] (optional) Cleanvoice API final pass:
- Mouth sound removal
- Remaining filler detection
- Loudness normalization
Output: cleaned MP3/WAV
ワークフローの振り分け
| ワークフロー | トリガー | ファイル |
|---|---|---|
| クリーン | 「音声をきれいにする」、「音声を編集する」、「フィラー語を削除する」、「ポッドキャストを整える」、「えーとを削除する」、「無音部分をカットする」、「音声を仕上げる」 | Workflows/Clean.md |
ツール
| ツール | コマンド | 目的 |
|---|---|---|
| 文字起こし | bun ${LIFEOS_SKILL_DIR}/Tools/Transcribe.ts <file> | Whisper による単語レベルの文字起こし |
| 分析 | bun ${LIFEOS_SKILL_DIR}/Tools/Analyze.ts <transcript.json> | LLM を活用した編集箇所の分類 |
| 編集 | bun ${LIFEOS_SKILL_DIR}/Tools/Edit.ts <file> <edits.json> | クロスフェードとルームトーンを使ったカットの実行 |
| 仕上げ | bun ${LIFEOS_SKILL_DIR}/Tools/Polish.ts <file> | Cleanvoice API によるクラウド処理 |
| パイプライン | bun ${LIFEOS_SKILL_DIR}/Tools/Pipeline.ts <file> [--polish] | エンドツーエンドのパイプライン全体を実行 |
| GateScan | bun ${LIFEOS_SKILL_DIR}/Tools/GateScan.ts <file> [--json] | ノイズゲートによるクリックノイズ(無音境界の段差)を検出。問題がある場合は exit 1 |
| GateRepair | bun ${LIFEOS_SKILL_DIR}/Tools/GateRepair.ts <in> <out.mp4> --finalize [--abr 192k] | ノイズゲートによるクリックノイズを修復。--finalize は ENCODED ファイルのスキャンで問題がなくなるまで処理を繰り返します |
| LoudnessLock | bun ${LIFEOS_SKILL_DIR}/Tools/LoudnessLock.ts <in> [--out <out.mp4>] | 配信用ラウドネスを −14 LUFS / −1dBTP(YouTube 標準)に測定または固定。再測定を行い、許容範囲内の場合のみ exit 0 |
ゲートアーティファクト(レポートがあった場合のみ — 定期チェックは2026-07-15に廃止)
キャプチャーチェーンのノイズゲート(レコーダーのフィルター、macOSのVoice Isolation)は、フェードなしで音声をデジタルゼロまで切り詰めます。レベリングによって各境界が増幅され、聞こえるクリック音になります — 2026-07-13のインシデント(774か所の境界、公開済みのローンチ動画2本、リスナーからの苦情)。この問題はキャプチャー時に根本修正されました。{{PRINCIPAL_NAME}}は2026-07-14にマイクチェーンからOBSのノイズゲートフィルターを削除し、2026-07-15には標準ワークフローからエクスポートごとの定期的なGateScanチェックを削除するよう指示しました — すべてのエクスポートを再スキャンしないでください。
音声のクリック音やカチカチ音が実際に報告された場合: ファイルに対してGateScanを実行して確認し(サンプル領域の段差を検出し、不具合があれば終了コード1)、GateRepair --finalizeで修正します(可能であればレベリング前に修正し、中間WAVではなく最終ENCODEをスキャンしてください — AACは無音に近い部分で段差を再び発生させます)。RAW録音のスキャンで異常が見つかった場合は、キャプチャーチェーンのゲートが再び有効になっています — そのことを報告してください。
必要なAPIキー
| サービス | 環境変数 | 入手先 |
|---|---|---|
| Anthropic(analyzeステップ用) | ANTHROPIC_API_KEY | Claude Code経由で設定済み |
| Cleanvoice(polishステップ用、任意) | CLEANVOICE_API_KEY | cleanvoice.aiのDashboard Settings API Key |
使用例
例1:ポッドキャスト録音をクリーンアップする
User: "clean up the audio on this podcast file"
-> Invokes Clean workflow
-> Runs full pipeline: transcribe -> analyze -> edit
-> Outputs cleaned MP3 with filler words, stutters, and dead air removed
例2:適用前に編集内容をプレビューする
User: "show me what edits you'd make to this recording"
-> Invokes Clean workflow with --preview flag
-> Transcribes and analyzes, shows proposed edits without modifying audio
-> User reviews edit list, then runs again to apply
例3:クラウドでのポリッシュを使って積極的にクリーンアップする
User: "aggressively clean this audio and polish it"
-> Invokes Clean workflow with --aggressive --polish flags
-> Tighter thresholds for filler detection
-> Cleanvoice API pass for mouth sounds and normalization
注意点
- 音声品質によって文字起こしの精度は異なります。 背景ノイズ、複数の話者、アクセントによって精度が低下します。
- カット検出はヒューリスティックに基づいています。 変更を確定する前に必ず編集内容をプレビューしてください — 自動カットによって意図的な間が削除されることがあります。
- クラウドでのポリッシュでは、音声が外部サービスにアップロードされます。 機密性の高いコンテンツをクラウドで処理してよいか、ユーザーに確認してください。
- dB領域のクリフ検出器はフェードの末端で誤検知します。 デジタルゼロに入る正当なコサインフェードは末端でdB勾配が無限大になるため、どの>NdB/2ms検出器でも恒久的にフラグが立ちます。修復の確認にはサンプル領域のSTEP検出(GateScan)を使い、dB勾配は決して使わないでください。(2026-07-13)
- 片側の反復フェードでは、境界に残ったインパルスが収束しません。 ゲート境界に残った単一のサンプルは、片側フェードを繰り返しても残ります。フェードダウンしてからフェードアップする「ミュート」では、ブリップのエッジとその立ち上がり段差が残ります。V字ノッチ(境界で両側からゼロにするコサインフェード)と、ゲートされた無音部分のハードゼロ化が収束する修正方法です。(2026-07-13)
- メーター上でクリーンでも、耳で聞いてクリーンとは限りません。 スキャナーはクリック音を検出しますが、修復によってスキャナーがクリーンと判定する聞こえるほどの穴ができることがあります(2026-07-12のダッキングのインシデント)。人間が聞き取る不具合の種類に合わせてプローブを選び、修復は最小限にとどめ、差し替え時にプリンシパルへ修正前後の試聴クリップを渡してください。
実行ログ
ワークフローの完了後、JSONLエントリーを1件追記してください。
echo '{"ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","skill":"AudioEditor","workflow":"WORKFLOW_USED","input":"8_WORD_SUMMARY","status":"ok|error","duration_s":SECONDS}' >> ~/.claude/LIFEOS/MEMORY/SKILLS/execution.jsonl
WORKFLOW_USEDは実行したワークフローに、8_WORD_SUMMARYは入力内容の簡潔な説明に、SECONDSはおおよその実時間に置き換えてください。ワークフローが失敗した場合は、status: "error"を記録してください。