曲やナレーションが急に始まって急に切れると、視聴体験は一気に安っぽくなります。冒頭をすっと立ち上げ、終わりを滑らかに消す——FFmpeg の afade フィルタはこのフェードイン/フェードアウトを1行で実現します。この記事では t(種別)・st(開始)・d(長さ)の指定、tri/sin/exp などカーブの違い、動画の音声トラックへの適用、フェードイン+アウトの同時指定までをまとめます。
動作確認: FFmpeg 6.1(検証スクリプトで実 FFmpeg 実行確認)/対象 OS: Windows / macOS / Linux
基本コマンド
フェードイン(冒頭を徐々に大きく)
ffmpeg -i input.mp3 -af "afade=t=in:st=0:d=3" output.mp3
| パラメータ | 値 | 説明 |
|---|---|---|
t=in | — | フェードイン |
st=0 | 0秒 | フェード開始位置 |
d=3 | 3秒 | フェードの継続時間 |
フェードアウト(末尾を徐々に小さく)
まず音声の長さを確認します:
ffmpeg -i input.mp3 -f null /dev/null 2>&1 | grep Duration
末尾10秒からフェードアウトする例(全体が60秒の場合):
ffmpeg -i input.mp3 -af "afade=t=out:st=50:d=10" output.mp3
| パラメータ | 値 | 説明 |
|---|---|---|
t=out | — | フェードアウト |
st=50 | 50秒 | フェード開始位置 |
d=10 | 10秒 | フェードの継続時間 |
フェードイン+フェードアウトを同時に適用
-af に複数フィルタをカンマ区切りで記述します:
ffmpeg -i input.mp3 -af "afade=t=in:st=0:d=3,afade=t=out:st=50:d=10" output.mp3
カーブタイプの指定
curve オプションでフェードの形状を変えられます:
ffmpeg -i input.mp3 -af "afade=t=in:st=0:d=3:curve=qsin" output.mp3
| カーブ名 | 説明 |
|---|---|
tri | 直線(リニア)。デフォルト |
qsin | 1/4 サイン波。自然な聴こえ |
hsin | 1/2 サイン波。より緩やかな S 字 |
exp | 指数関数。急激に変化 |
log | 対数カーブ。最初が急で後が緩やか |
動画ファイルの音声にフェードを適用
ffmpeg -i input.mp4 -af "afade=t=in:st=0:d=2" -c:v copy output.mp4
-c:v copy で映像はそのままコピーし、音声だけを処理します。
映像のフェードイン・フェードアウトと組み合わせる
映像(fade)と音声(afade)を同時に適用:
ffmpeg -i input.mp4 -vf "fade=t=in:st=0:d=2" -af "afade=t=in:st=0:d=2" -c:a aac output.mp4
よくある注意点
フェードアウトの st は音声の実際の長さに合わせる
st + d が音声の長さを超えても問題はありませんが、フェードが途中で切れる場合は長さを確認してください。
-c:v copy との組み合わせで音声のみ再エンコード
映像に変更を加えない場合は -c:v copy で映像の品質を保持したまま音声だけを再エンコードできます。
実測例
1080p/30fps、2分、H.264 + AAC の MP4(映像約18Mbps、音声128kbps)に対して、音声だけに2秒フェードインと5秒フェードアウトを入れる例です。
ffmpeg -i input.mp4 \
-af "afade=t=in:st=0:d=2,afade=t=out:st=115:d=5" \
-c:v copy -c:a aac -b:a 128k \
output.mp4
8コア程度のデスクトップ環境では、映像をコピーするため処理時間は数秒から十数秒に収まることが多く、出力サイズもほぼ入力と同じです。変化するのは再エンコードされた音声トラック分だけなので、元の音声ビットレートが近ければファイルサイズ差は1〜3%程度に収まるケースが一般的です。
一方で映像側にも fade を入れる場合は、映像フィルタを通すため -c:v copy は使えません。2分の1080p素材でもエンコードプリセットやCPUによって処理時間が数分まで伸びることがあります。環境により変動します。
フェードアウト位置を決めるときは、動画コンテナの表示時間ではなく音声ストリームの実時間を基準にします。カット編集後のMP4や可変フレームレート素材では、映像と音声の長さが数百ミリ秒ずれることがあります。ffprobe -show_streams で音声側の duration を確認してから st=duration-d を計算すると、末尾だけフェードが残る事故を避けやすくなります。
特にBGM差し替え後は要確認です。
関連リソース
よく使うオプション・フィルタ・コーデック設定をまとめた PDF チートシートです。手元に置いておくと調べる時間を短縮できます。
関連記事
- 音量レベルの検出 — volumedetect フィルタでピーク・平均音量を確認
- 音声の抽出 — -vn で動画から音声だけを取り出す
動作確認: ffmpeg 6.1 / Ubuntu 24.04 (検証スクリプトで実行確認) 一次ソース: ffmpeg.org/ffmpeg-filters.html#afade / trac.ffmpeg.org/wiki/AudioVolume
よくある質問
afade と acrossfade の違いは?
afade は単一トラックのフェードイン / アウト。acrossfade は 2 つのトラック間のクロスフェード。BGM 切替なら acrossfade、オープニング / エンディングのフェードなら afade。
フェードはどれくらいの長さがいい?
会話: イン 0.3〜0.5 秒、アウト 1〜2 秒。音楽: イン 1〜2 秒、アウト 2〜4 秒。100ms より短いと安価なスピーカーで「プツッ」と鳴ります。
特定の周波数だけフェードできる?
afade は信号全体に効きます。周波数選択的にフェードしたい場合は、フェードの前にバンドフィルター(lowpass など)を chain してください。
フェードが思った位置から始まらない
st=(start time)が 0 になってないか確認。ファイル末尾でフェードアウトしたい場合、start = duration − fade_length を計算して明示的に指定してください。
afade で再エンコードされる?
はい。任意の音声フィルタは音声トラックの再エンコードを強制します。映像は -c:v copy でコピーのまま保てます。