ffmpeg-audio-processing について
音声制作やポストプロダクション向けのFFmpeg音声処理ガイドです。エンコード、ラウドネス正規化、フィルター、チャンネル操作、編集の例を紹介します。
主な機能
- 01音声形式とコーデックの変換
- 02ラウドネス正規化と音量調整
- 03イコライザー・ノイズ除去・圧縮フィルター
- 04チャンネルとサンプルレートの操作
- 05トリミング・結合・クロスフェード
活用シーン
- 01動画から音声を抽出して形式を変換する
- 02ポッドキャストや配信用の音量を整える
- 03録音のノイズや無音部分を処理する
- 04音声クリップのトリミング・結合・フェード
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ josiahsiegel/ claude-plugin-marketplace --skill ffmpeg-audio-processingインストール後、Claude Code で/ffmpeg-audio-processingを入力して読み込まれたか確認します。
同梱ファイルreferences/audio-analysis-measurement.mdreferences/workflows-and-troubleshooting.md
詳細
重要なガイドライン
Windows のファイルパス要件
必須:Windows では、ファイルパスに必ずバックスラッシュを使用してください
Windows で Edit ツールまたは Write ツールを使用する場合は、ファイルパスにスラッシュ(/)ではなく、必ずバックスラッシュ(\)を使用してください。
クイックリファレンス
| タスク | コマンド |
|---|---|
| 音声を抽出 | ffmpeg -i video.mp4 -vn -c:a copy audio.m4a |
| MP3 に変換 | ffmpeg -i input.flac -c:a libmp3lame -q:a 2 output.mp3 |
| 音量を正規化(EBU R128) | -af loudnorm=I=-23:LRA=7:TP=-2 |
| ポッドキャスト標準 | -af loudnorm=I=-16:TP=-1.5 |
| 音量を調整 | -af "volume=1.5" または -af "volume=6dB" |
| モノラルからステレオへ | -ac 2 |
| コーデック | 推奨ビットレート | 用途 |
|---|---|---|
| AAC | 128-192k(音楽)、64k(音声) | ストリーミング、モバイル |
| MP3 | 192-320k(音楽)、128k(音声) | 幅広い互換性 |
| Opus | 96-128k(音楽)、48k(音声) | WebM、VoIP、最新環境 |
このスキルを使用する場面
音声関連の操作に使用します。
- 動画ファイルから音声を抽出する
- 放送/ストリーミング規格に準拠するためにラウドネスを正規化する
- ポッドキャストやオーディオブックを処理する
- 音声形式を変換する
- 音声エフェクト(EQ、コンプレッション、ノイズ除去)を適用する
FFmpeg による音声処理(2025)
FFmpeg を使用した音声エンコード、正規化、プロフェッショナルな音声処理の完全ガイドです。
音声コーデックのリファレンス
コーデックの比較
| コーデック | エンコーダー | ビットレート範囲 | 品質 | 互換性 | 用途 |
|---|---|---|---|---|---|
| AAC | aac, libfdk_aac | 64-320 kbps | 優秀 | 汎用 | ストリーミング、モバイル |
| MP3 | libmp3lame | 96-320 kbps | 良好 | 汎用 | レガシー、ポッドキャスト |
| Opus | libopus | 32-256 kbps | 最高 | 最新環境 | VoIP、WebM |
| FLAC | flac | ~900 kbps | 可逆 | 幅広い | アーカイブ |
| ALAC | alac | ~900 kbps | 可逆 | Apple | Apple エコシステム |
| Vorbis | libvorbis | 64-500 kbps | 非常に良好 | 幅広い | WebM、ゲーム |
| AC3 | ac3 | 192-640 kbps | 良好 | 汎用 | DVD、Blu-ray |
| EAC3 | eac3 | 192-768 kbps | 非常に良好 | 幅広い | ストリーミング |
| xHE-AAC | - (デコードのみ) | 12-64 kbps | 優秀 | 普及しつつある | 超低ビットレート |
推奨ビットレート
| 用途 | AAC | MP3 | Opus |
|---|---|---|---|
| ポッドキャスト/音声 | 64-96k | 96-128k | 48-64k |
| 音楽(標準) | 128-192k | 192-256k | 96-128k |
| 音楽(高品質) | 256-320k | 320k | 160-256k |
| 透明品質 | 256k+ | 320k | 192k+ |
基本的な音声操作
音声を抽出
# Extract to original format (no re-encode)
ffmpeg -i video.mp4 -vn -c:a copy audio.m4a
# Extract to MP3
ffmpeg -i video.mp4 -vn -c:a libmp3lame -b:a 320k audio.mp3
# Extract to AAC
ffmpeg -i video.mp4 -vn -c:a aac -b:a 256k audio.m4a
# Extract to FLAC (lossless)
ffmpeg -i video.mp4 -vn -c:a flac audio.flac
# Extract to WAV (uncompressed)
ffmpeg -i video.mp4 -vn -c:a pcm_s16le audio.wav
音声形式を変換
# MP3 to AAC
ffmpeg -i input.mp3 -c:a aac -b:a 256k output.m4a
# WAV to MP3
ffmpeg -i input.wav -c:a libmp3lame -b:a 320k output.mp3
# FLAC to MP3
ffmpeg -i input.flac -c:a libmp3lame -b:a 320k output.mp3
# Multiple files (batch)
for f in *.flac; do
ffmpeg -i "$f" -c:a libmp3lame -b:a 320k "${f%.flac}.mp3"
done
品質設定
# AAC VBR quality (1-5, higher = better)
ffmpeg -i input.wav -c:a aac -q:a 2 output.m4a
# MP3 VBR quality (0-9, lower = better)
ffmpeg -i input.wav -c:a libmp3lame -q:a 0 output.mp3
# Opus with target bitrate
ffmpeg -i input.wav -c:a libopus -b:a 128k output.opus
音声の正規化
ラウドネス規格
| 規格 | 目標値 | TP(トゥルーピーク) | 用途 |
|---|---|---|---|
| EBU R128 | -23 LUFS | -1 dBTP | 欧州放送 |
| ATSC A/85 | -24 LKFS | -2 dBTP | 米国放送 |
| Spotify | -14 LUFS | -1 dBTP | ストリーミング |
| YouTube | -14 LUFS | -1 dBTP | 動画プラットフォーム |
| Apple Music | -16 LUFS | -1 dBTP | 音楽ストリーミング |
| ポッドキャスト | -16~-19 LUFS | -1 dBTP | ポッドキャスト |
EBU R128 正規化(loudnorm)
1 パス(ライブ/リアルタイム)
# Quick normalization (less accurate)
ffmpeg -i input.mp3 \
-af loudnorm=I=-16:TP=-1.5:LRA=11 \
output.mp3
2 パス(推奨)
# Pass 1: Analyze
ffmpeg -i input.mp3 \
-af loudnorm=I=-16:TP=-1.5:LRA=11:print_format=json \
-f null -
# Output will include:
# "input_i": "-25.23"
# "input_tp": "-0.50"
# "input_lra": "8.32"
# "input_thresh": "-35.87"
# "target_offset": "1.23"
# Pass 2: Normalize with measured values
ffmpeg -i input.mp3 \
-af loudnorm=I=-16:TP=-1.5:LRA=11:measured_I=-25.23:measured_TP=-0.50:measured_LRA=8.32:measured_thresh=-35.87:offset=1.23:linear=true \
-ar 48000 \
output.mp3
2 パススクリプト
#!/bin/bash
# loudnorm-2pass.sh
INPUT="$1"
OUTPUT="$2"
TARGET_I="${3:--16}"
TARGET_TP="${4:--1.5}"
TARGET_LRA="${5:-11}"
# Pass 1: Analyze
stats=$(ffmpeg -i "$INPUT" \
-af loudnorm=I=${TARGET_I}:TP=${TARGET_TP}:LRA=${TARGET_LRA}:print_format=json \
-f null - 2>&1 | grep -A 12 "Parsed_loudnorm")
# Extract values
input_i=$(echo "$stats" | grep input_i | tr -d '", ' | cut -d':' -f2)
input_tp=$(echo "$stats" | grep input_tp | tr -d '", ' | cut -d':' -f2)
input_lra=$(echo "$stats" | grep input_lra | tr -d '", ' | cut -d':' -f2)
input_thresh=$(echo "$stats" | grep input_thresh | tr -d '", ' | cut -d':' -f2)
offset=$(echo "$stats" | grep target_offset | tr -d '", ' | cut -d':' -f2)
# Pass 2: Normalize
ffmpeg -i "$INPUT" \
-af "loudnorm=I=${TARGET_I}:TP=${TARGET_TP}:LRA=${TARGET_LRA}:measured_I=${input_i}:measured_TP=${input_tp}:measured_LRA=${input_lra}:measured_thresh=${input_thresh}:offset=${offset}:linear=true" \
-ar 48000 \
"$OUTPUT"
ピーク正規化
# Normalize to peak level
ffmpeg -i input.mp3 \
-af "volume=0dB:eval=once:precision=fixed" \
-af "loudnorm=I=-16:TP=-1:LRA=11" \
output.mp3
# Simple peak normalization
ffmpeg -i input.mp3 \
-filter:a "volume=replaygain=peak" \
output.mp3
RMS 正規化
# Normalize to specific RMS level
ffmpeg -i input.mp3 \
-af "loudnorm=I=-23:LRA=7:TP=-2" \
output.mp3
ffmpeg-normalize ツール
Python ユーティリティの ffmpeg-normalize を使うと、より簡単に操作できます。
# Install
pip install ffmpeg-normalize
# Basic usage
ffmpeg-normalize input.mp3 -o output.mp3
# Custom target
ffmpeg-normalize input.mp3 -o output.mp3 -t -14
# Batch normalize (album mode - preserves relative loudness)
ffmpeg-normalize *.mp3 --batch -o normalized/
# Use built-in presets (v1.36.0+)
ffmpeg-normalize input.mp3 --preset podcast -o output.mp3
ffmpeg-normalize *.mp3 --preset music --batch -o normalized/
音声フィルター
音量調整
# Increase volume by 50%
ffmpeg -i input.mp3 -af "volume=1.5" output.mp3
# Increase by 6dB
ffmpeg -i input.mp3 -af "volume=6dB" output.mp3
# Decrease by 3dB
ffmpeg -i input.mp3 -af "volume=-3dB" output.mp3
フェードイン/フェードアウト
# Fade in 3 seconds, fade out last 3 seconds
ffmpeg -i input.mp3 \
-af "afade=t=in:ss=0:d=3,afade=t=out:st=57:d=3" \
output.mp3
# Calculate fade out start automatically
duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp3)
fadeout_start=$(echo "$duration - 3" | bc)
ffmpeg -i input.mp3 \
-af "afade=t=in:ss=0:d=3,afade=t=out:st=${fadeout_start}:d=3" \
output.mp3
イコライゼーション
# Bass boost
ffmpeg -i input.mp3 \
-af "equalizer=f=100:width_type=o:width=2:g=5" \
output.mp3
# Treble reduction
ffmpeg -i input.mp3 \
-af "equalizer=f=8000:width_type=o:width=2:g=-3" \
output.mp3
# Multi-band EQ
ffmpeg -i input.mp3 \
-af "equalizer=f=100:width_type=o:width=2:g=3,equalizer=f=1000:width_type=o:width=2:g=-2,equalizer=f=8000:width_type=o:width=2:g=2" \
output.mp3
ハイパス/ローパスフィルター
# High-pass filter (remove below 80Hz)
ffmpeg -i input.mp3 -af "highpass=f=80" output.mp3
# Low-pass filter (remove above 8kHz)
ffmpeg -i input.mp3 -af "lowpass=f=8000" output.mp3
# Band-pass filter
ffmpeg -i input.mp3 -af "highpass=f=80,lowpass=f=12000" output.mp3
ノイズ除去
# FFT-based noise reduction
ffmpeg -i input.mp3 \
-af "afftdn=nf=-25" \
output.mp3
# With noise floor adjustment
ffmpeg -i input.mp3 \
-af "afftdn=nf=-20:tn=1" \
output.mp3
コンプレッサー/リミッター
# Dynamic range compression
ffmpeg -i input.mp3 \
-af "acompressor=threshold=-20dB:ratio=4:attack=5:release=50" \
output.mp3
# Limiter
ffmpeg -i input.mp3 \
-af "alimiter=limit=0.9:attack=5:release=50" \
output.mp3
# De-esser
ffmpeg -i input.mp3 \
-af "deesser=i=0.4:f=4000:w=0.5" \
output.mp3
無音の検出/除去
# Detect silence
ffmpeg -i input.mp3 \
-af silencedetect=noise=-30dB:d=0.5 \
-f null -
# Remove silence
ffmpeg -i input.mp3 \
-af "silenceremove=start_periods=1:start_silence=0.5:start_threshold=-50dB:stop_periods=1:stop_silence=0.5:stop_threshold=-50dB" \
output.mp3
チャンネル操作
ステレオからモノラルへ
# Average both channels
ffmpeg -i stereo.mp3 \
-af "pan=mono|c0=0.5*c0+0.5*c1" \
mono.mp3
# Use only left channel
ffmpeg -i stereo.mp3 -af "pan=mono|c0=c0" mono.mp3
# Downmix stereo to mono
ffmpeg -i stereo.mp3 -ac 1 mono.mp3
モノラルからステレオへ
# Duplicate mono to both channels
ffmpeg -i mono.mp3 -af "pan=stereo|c0=c0|c1=c0" stereo.mp3
# Simple conversion
ffmpeg -i mono.mp3 -ac 2 stereo.mp3
特定のチャンネルを抽出
# Extract left channel
ffmpeg -i stereo.mp3 \
-filter_complex "[0:a]channelsplit=channel_layout=stereo:channels=FL[left]" \
-map "[left]" left.mp3
# Extract right channel
ffmpeg -i stereo.mp3 \
-filter_complex "[0:a]channelsplit=channel_layout=stereo:channels=FR[right]" \
-map "[right]" right.mp3
5.1 サラウンド操作
# Downmix 5.1 to stereo
ffmpeg -i surround.ac3 \
-af "pan=stereo|FL=0.5*FC+0.707*FL+0.707*BL+0.5*LFE|FR=0.5*FC+0.707*FR+0.707*BR+0.5*LFE" \
stereo.mp3
# Extract center channel
ffmpeg -i surround.ac3 \
-filter_complex "[0:a]channelsplit=channel_layout=5.1:channels=FC[center]" \
-map "[center]" center.mp3
サンプルレートとビット深度
サンプルレートの変換
# Convert to 44.1kHz
ffmpeg -i input.wav -ar 44100 output.wav
# Convert to 48kHz
ffmpeg -i input.wav -ar 48000 output.wav
# High-quality resampling
ffmpeg -i input.wav \
-af "aresample=resampler=soxr:precision=33:cheby=1" \
-ar 44100 output.wav
ビット深度の変換
# Convert to 16-bit
ffmpeg -i input.wav -c:a pcm_s16le output.wav
# Convert to 24-bit
ffmpeg -i input.wav -c:a pcm_s24le output.wav
# Convert to 32-bit float
ffmpeg -i input.wav -c:a pcm_f32le output.wav
速度とピッチ
速度の変更(ピッチに影響します)
# 2x speed (chipmunk effect)
ffmpeg -i input.mp3 -af "atempo=2.0" output.mp3
# 0.5x speed (slow motion)
ffmpeg -i input.mp3 -af "atempo=0.5" output.mp3
# For >2x, chain filters
ffmpeg -i input.mp3 -af "atempo=2.0,atempo=2.0" output.mp3 # 4x
ピッチの変更(速度を維持します)
# Pitch shift using rubberband
ffmpeg -i input.mp3 \
-af "rubberband=pitch=1.5" \
output.mp3
# Pitch shift semitones
ffmpeg -i input.mp3 \
-af "asetrate=44100*2^(2/12),aresample=44100" \
output.mp3 # +2 semitones
トリミングと連結
音声のトリミング
# Extract 30 seconds starting at 1 minute
ffmpeg -ss 00:01:00 -i input.mp3 -t 00:00:30 -c copy output.mp3
# Extract from 1:00 to 2:30
ffmpeg -ss 00:01:00 -to 00:02:30 -i input.mp3 -c copy output.mp3
音声の連結
# Create file list
echo "file 'part1.mp3'" > list.txt
echo "file 'part2.mp3'" >> list.txt
# Concatenate (same format)
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp3
# Concatenate with re-encode
ffmpeg -f concat -safe 0 -i list.txt -c:a aac -b:a 256k output.m4a
クロスフェード
# Crossfade two files (3 second overlap)
ffmpeg -i part1.mp3 -i part2.mp3 \
-filter_complex "acrossfade=d=3:c1=tri:c2=tri" \
output.mp3
プロフェッショナルなワークフローとトラブルシューティング
ポッドキャスト、音楽のマスタリング、放送向け EBU R128 などの処理チェーン全体、およびポストプロセスでよく発生する問題(loudnorm のリサンプリングアーティファクト、A/V 同期、再エンコードによる品質低下)の修正については、references/workflows-and-troubleshooting.md を参照してください。
音声の分析と測定
音声分析および測定フィルターの詳細については、references/audio-analysis-measurement.md を参照してください。次の内容を扱います。
- astats — RMS、ピーク、クレストファクター、DC オフセット、ビット深度、ダイナミックレンジ
- ebur128 — EBU R128 / ITU-R BS.1770 に準拠した統合ラウドネス、LRA、トゥルーピーク。オプションでビデオメーター出力にも対応
- speechnorm — 音声・ポッドキャスト向けに調整された適応型ノーマライザー
- dialoguenhance(FFmpeg 8.0+)— 録音状態の悪い音声向けの音声帯域ブースト
- sofalizer — SOFA ファイルを使った HRTF / バイノーラル処理
- volumedetect — 平均音量とピーク音量の検出
- aweighting — 聴感上の音量に対応する A 特性曲線
- chromaprint — 音声フィンガープリントの生成(raw および base64)
- 完全な分析ワークフロー — astats + ebur128 + volumedetect + silencedetect を集約する
audio-analysis.sh
このガイドでは、FFmpeg による音声処理について説明します。動画操作については、基礎スキルを参照してください。ノイズ除去の詳細については、ffmpeg-noise-reduction を参照してください。