動画内の音声をSidon on Modalでクリーンアップする
Sidon v0.1(Hugging Faceのsarulab-speech/sidon-v0.1)による音声復元。48kHzで音声を再合成する音声-to-音声モデルです。GPUが必要なためモデルはModal上で実行され、それ以外の処理(抽出、ラウドネス、多重化)はローカルマシンの通常のffmpegで行います。動画ストリームは一切再エンコードされません。
Modalジョブはこのプラグインのscripts/sidon_enhance.py(${CLAUDE_PLUGIN_ROOT}/scripts/sidon_enhance.py)です。
モデルの選択(なぜSidonか)
| モデル | 結論 |
|---|---|
| Sidon v0.1 | デフォルト。軽量で、11分のファイルがL4クラスGPUで1ジョブ、数セントで完了。出力はクリーンでフルバンド、48kHz。 |
| NVIDIA RE-USE | 話者自身のスペクトル詳細をより保持するが、長いファイルではGPUメモリ不足で失敗(11分ファイルの2つ目の30秒チャンクで失敗)。短いクリップにのみ使用。 |
| DeepFilterNet | 除外:音声に可聴な歪みが発生。 |
Sidonは8kHz以上のすべてを再生成するため、結果として部屋の残響や背景音がまったく残らない音声になります。トラック内の音楽や非発話音は失われます。動画にBGMがある場合は、BGMを追加する前に音声をクリーンアップしてください。
設定
最初に存在するデータルートの下にあるremote-video-editing/preferences.jsonを読み取ります:$CLAUDE_USER_DATA、次に~/.claude-user-data、次に${XDG_DATA_HOME:-~/.local/share}/claude-plugins。キー:
| キー | デフォルト | 意味 |
|---|---|---|
modal_command | modal | Modalアプリを実行するコマンド(プロファイルやワークスペースを選択するラッパーでも可) |
run_notes | なし | Modalを実行する場所(認証情報を持つ別のホストなど)や、ファイルがそこに届く方法についての自由形式の指示。これに従うこと。 |
loudness_lufs | -14 | 統合ラウドネス目標値(YouTube方式) |
true_peak_db | -1.5 | トゥルーピーク上限 |
ファイルが存在せず、modal tokenが設定されていない場合(modal profile currentが失敗する場合)、停止してユーザーにmodal setupを実行するよう伝えてください。
手順
ソース動画と同じフォルダで作業します。IN=<動画>、MODAL=<modal_command, デフォルト modal>。
- 音声をモノラル48kHz FLACとして抽出:
ffmpeg -v error -y -i "$IN" -vn -ac 1 -ar 48000 -c:a flac -sample_fmt s16 audio.flac - まず30秒でテスト。 最初の数秒ではなく、発話がある部分からクリップを切り出します:
両方のファイルをユーザーに渡して聞いてもらいます。音を承認されるまで、フルファイルは実行しないでください。ffmpeg -v error -y -ss 60 -t 30 -i audio.flac -c:a flac test30.flac $MODAL run "${CLAUDE_PLUGIN_ROOT}/scripts/sidon_enhance.py" --src test30.flac --out test30_sidon.flac - フルトラックを実行:
ジョブは96秒ごとのチャンクごとに1行出力します。初回実行はイメージをビルドします(数分);以降の実行はそれを再利用します。$MODAL run "${CLAUDE_PLUGIN_ROOT}/scripts/sidon_enhance.py" --src audio.flac --out audio_sidon.flac - ラウドネスを測定(2パス
loudnormの最初のパス):ffmpeg -hide_banner -nostats -i audio_sidon.flac \ -af loudnorm=I=-14:TP=-1.5:LRA=11:print_format=json -f null - 2>&1 | grep -A12 '^{' - 測定値で再多重化。 動画はストリームコピーされます:
Appleプレーヤーで再生する必要があるHEVCソースの場合は、ffmpeg -v error -y -i "$IN" -i audio_sidon.flac -map 0:v -map 1:a -c:v copy \ -af "loudnorm=I=-14:TP=-1.5:LRA=11:measured_I=<input_i>:measured_TP=<input_tp>:measured_LRA=<input_lra>:measured_thresh=<input_thresh>:offset=<target_offset>:linear=true,aresample=48000" \ -c:a aac -b:a 192k -movflags +faststart "<name>_clean.mp4"-tag:v hvc1を追加します。 - 確認:
ffprobeでソースとの長さを比較(1フレーム以内で一致するはず)、同じオフセットで30秒の前後ペア(-vn -c:a copy)を切り出してユーザーに比較してもらいます。
スクリプトライブラリ
ユーザーがスクリプトライブラリ(find-script、save-script)を持っている場合は、Modalジョブを変更する前にそれをチェックし、変更後は保存してください。
コストと制限
- スクリプト内のGPUリスト:L4、A10G、L40S(Modalに空きがあるもの)。タイムアウト1時間。
- ファイル全体がバイト列として関数に送信されます。1〜2時間のモノラルFLACまでの音声トラックで問題ありません。それ以上の長さの素材の場合は、音声を分割し、パーツを実行し、ffmpegの
concatで結合してください。 - 重みはコールドスタートのたびにHugging Faceからダウンロードされます(公開、トークン不要)。
関連
ローカルでの編集、レンダリング、音声作業(Kdenlive、melt、ffmpegプリセット、無音カット)については、このプラグインのcomplementary-pluginsスキルを参照してください。