claude-video-audio について
claude-video-audio は、FFmpeg などのコマンドラインツールを使う音声処理ワークフロー向けのスキルです。ラウドネス調整からノイズ処理、トラックのミキシング、形式変換まで扱います。
主な機能
- 01EBU R128 の二段階ラウドネス正規化
- 02FFT と非局所平均によるノイズ低減
- 03無音の検出と除去
- 04音声の抽出、置換、ミキシング
- 05エフェクト、チャンネル、形式の変換
- 06音声に応じた音楽のダッキング
活用シーン
- 01プラットフォームの目標ラウドネスへの調整
- 02録音のバックグラウンドノイズ低減
- 03動画からの音声抽出や置換
- 04ナレーション中の音楽音量の自動低下
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ agricidaniel/ claude-video --skill claude-video-audioインストール後、Claude Code で/claude-video-audioを入力して読み込まれたか確認します。
詳細
claude-video-audio — オーディオ処理
事前確認
bash scripts/preflight.sh "$INPUT" "$OUTPUT"を実行します- オーディオストリームを分析します:
ffprobe -v error -select_streams a -show_entries stream=codec_name,channels,sample_rate,bit_rate -of json "$INPUT"
ラウドネスの正規化(EBU R128)
正確に正規化するための2パスのワークフローです:
# Pass 1: Measure current loudness
ffmpeg -i "$INPUT" -af loudnorm=I=-14:TP=-1.5:LRA=11:print_format=json -f null - 2>&1 | tail -12
JSON 出力から measured_I、measured_TP、measured_LRA、measured_thresh、offset を抽出します。
# Pass 2: Apply normalization with measured values
ffmpeg -n -i "$INPUT" -af "loudnorm=I=-14:TP=-1.5:LRA=11:\
measured_I=MEASURED_I:measured_TP=MEASURED_TP:measured_LRA=MEASURED_LRA:\
measured_thresh=MEASURED_THRESH:offset=MEASURED_OFFSET:linear=true" \
-c:v copy "$OUTPUT"
プラットフォーム別の目標ラウドネス
| プラットフォーム | 目標 LUFS | トゥルーピーク | 備考 |
|---|---|---|---|
| YouTube | -14 LUFS | -1.0 dBTP | YouTube は音量を下げて正規化しますが、上げることはありません |
| Spotify | -14 LUFS | -1.0 dBTP | 「Loud」モードは -11 LUFS です |
| Apple Music | -16 LUFS | -1.0 dBTP | サウンドチェック |
| ポッドキャスト | -16 LUFS | -1.5 dBTP | 会話の明瞭さ |
| 放送(EBU R128) | -23 LUFS | -1.0 dBTP | 欧州標準 |
| TikTok/Reels | -14 LUFS | -1.0 dBTP | YouTube に合わせます |
ノイズ除去
FFT ベース(安定したバックグラウンドノイズに適しています):
ffmpeg -n -i "$INPUT" -af "afftdn=nf=-25:nt=w" -c:v copy "$OUTPUT"
nf = dB 単位のノイズフロア(値が低いほど強く除去します)。nt=w = ホワイトノイズモデルです。
非局所平均(品質が高く、処理は遅めです):
ffmpeg -n -i "$INPUT" -af "anlmdn=s=7:p=0.002:r=0.002" -c:v copy "$OUTPUT"
ハイパス/ローパスで低周波のうなりとヒスノイズを除去します:
ffmpeg -n -i "$INPUT" -af "highpass=f=80,lowpass=f=12000" -c:v copy "$OUTPUT"
無音の検出と削除
無音を検出します:
ffmpeg -i "$INPUT" -af "silencedetect=noise=-30dB:d=0.5" -f null - 2>&1 | grep silence
silence_start と silence_end のタイムスタンプが返されます。
無音を削除します(Auto-Editor を使用すると、はるかに簡単です):
auto-editor "$INPUT" --margin 0.3s -o "$OUTPUT"
FFmpeg を使った手動での無音削除:
ffmpeg -n -i "$INPUT" -af "silenceremove=start_periods=1:start_silence=0.5:start_threshold=-30dB:detection=rms" -c:v copy "$OUTPUT"
オーディオの抽出
# Extract as WAV (lossless)
ffmpeg -n -i "$INPUT" -vn -c:a pcm_s16le audio.wav
# Extract as AAC
ffmpeg -n -i "$INPUT" -vn -c:a aac -b:a 256k audio.m4a
# Extract as MP3
ffmpeg -n -i "$INPUT" -vn -c:a libmp3lame -b:a 320k audio.mp3
# Extract as Opus (most efficient)
ffmpeg -n -i "$INPUT" -vn -c:a libopus -b:a 128k audio.ogg
# Stream copy (fastest, keeps original codec)
ffmpeg -n -i "$INPUT" -vn -c:a copy audio.m4a
オーディオの置き換え
# Replace audio track entirely
ffmpeg -n -i video.mp4 -i new_audio.wav -c:v copy -c:a aac -b:a 192k \
-map 0:v:0 -map 1:a:0 "$OUTPUT"
# Mix original audio with new audio (e.g., background music)
ffmpeg -n -i video.mp4 -i music.mp3 -filter_complex \
"[0:a]volume=1.0[orig];[1:a]volume=0.3[music];[orig][music]amix=inputs=2:duration=first" \
-c:v copy "$OUTPUT"
オーディオエフェクト
音量調整:
ffmpeg -n -i "$INPUT" -af "volume=1.5" -c:v copy "$OUTPUT" # 1.5x louder
ffmpeg -n -i "$INPUT" -af "volume=-6dB" -c:v copy "$OUTPUT" # 6dB quieter
イコライゼーション:
# Boost bass, cut muddy mids, add presence
ffmpeg -n -i "$INPUT" -af "equalizer=f=80:t=q:w=1:g=3,equalizer=f=300:t=q:w=2:g=-2,equalizer=f=4000:t=q:w=1:g=2" -c:v copy "$OUTPUT"
コンプレッション(ダイナミックレンジを縮小します):
ffmpeg -n -i "$INPUT" -af "acompressor=threshold=-20dB:ratio=4:attack=5:release=50" -c:v copy "$OUTPUT"
リミッター(クリッピングを防ぎます):
ffmpeg -n -i "$INPUT" -af "alimiter=limit=0.95:level=false" -c:v copy "$OUTPUT"
フェードイン/フェードアウト:
ffmpeg -n -i "$INPUT" -af "afade=t=in:st=0:d=2,afade=t=out:st=OFFSET:d=2" -c:v copy "$OUTPUT"
低音ブースト:-af "bass=g=5:f=100:w=0.5"
高音ブースト:-af "treble=g=3:f=4000:w=0.5"
オーディオ形式の変換
| コーデック | FFmpeg エンコーダー | 推奨ビットレート | 用途 |
|---|---|---|---|
| AAC | aac | 128-256k | 動画、ストリーミング |
| MP3 | libmp3lame | 192-320k | 汎用再生 |
| Opus | libopus | 96-160k | 最高の効率、WebM |
| FLAC | flac | 可逆圧縮 | アーカイブ、編集 |
| WAV | pcm_s16le | 非圧縮 | 編集、処理 |
| AC3 | ac3 | 384-640k | サラウンドサウンド |
チャンネルレイアウト
# Stereo to mono
ffmpeg -n -i "$INPUT" -ac 1 -c:v copy "$OUTPUT"
# Mono to stereo (duplicate)
ffmpeg -n -i "$INPUT" -ac 2 -c:v copy "$OUTPUT"
# Extract left channel only
ffmpeg -n -i "$INPUT" -af "pan=mono|c0=FL" -c:v copy "$OUTPUT"
オーディオ同期の修正
# Delay audio by 0.5 seconds
ffmpeg -n -i "$INPUT" -itsoffset 0.5 -i "$INPUT" -map 0:v -map 1:a -c copy "$OUTPUT"
# Advance audio by 0.5 seconds
ffmpeg -n -i "$INPUT" -itsoffset -0.5 -i "$INPUT" -map 0:v -map 1:a -c copy "$OUTPUT"
オーディオダッキング(サイドチェーンコンプレッション)
音声があるときに、音楽の音量を自動的に下げます。
基本的なダッキング(音声トラックに応じて音楽トラックの音量を下げます):
ffmpeg -n -i video_with_voice.mp4 -i music.mp3 -filter_complex \
"[0:a]aformat=fltp:44100:stereo[voice];\
[1:a]aformat=fltp:44100:stereo[music];\
[music][voice]sidechaincompress=threshold=0.015:ratio=6:attack=200:release=1000:level_sc=1[ducked];\
[voice][ducked]amix=inputs=2:duration=first:weights=1 0.4[out]" \
-map 0:v -map "[out]" -c:v copy "$OUTPUT"
パラメーターの説明:
| パラメーター | デフォルト | 目的 |
|---|---|---|
| threshold | 0.015 | ダッキングをトリガーする音声レベル(値が低いほど感度が高くなります) |
| ratio | 6 | 音楽をどの程度下げるか(値が高いほど大きく下がります) |
| attack | 200ms | 音楽の音量を下げる速さ |
| release | 1000ms | 音声が止まった後に音楽の音量を戻す速さ |
| weights | 1 0.4 | 最終ミックスでの音声の音量:音楽の音量 |
既存のオーディオストリームを使ったダッキング(動画に音声があり、別ファイルの音楽もある場合):
ffmpeg -n -i "$INPUT" -i music.mp3 -filter_complex \
"[1:a][0:a]sidechaincompress=threshold=0.02:ratio=8:attack=100:release=800[ducked];\
[0:a][ducked]amix=inputs=2:duration=first:weights=1 0.3[out]" \
-map 0:v -map "[out]" -c:v copy "$OUTPUT"
ヒント:
- 音量の小さい音声には、
thresholdを下げます(例:0.01) - より強くダッキングするには、
ratioを上げます(例:10-20) - 話し言葉中心のポッドキャストでは、
attackを短くします(例:50ms) - 音楽がより滑らかに戻るようにするには、
releaseを長くします(例:2000ms) weightsを調整して、音声と音楽の全体的なバランスを制御します
参考資料
EBU R128 のラウドネスの詳細、応用的なフィルターチェーン、形式ごとのオーディオ設定については、references/audio.md を読み込んでください。