FFmpeg の afade フィルタを使うと、音声の始まりを少しずつ大きくしたり(フェードイン)、終わりを少しずつ小さくしたり(フェードアウト)できます。基本の指定は、種類の t、開始位置の st、長さの d です。
基本コマンド
フェードイン(冒頭を徐々に大きく)
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
表示される Duration: が長さです。
全体が60秒の音声で、最後の10秒をフェードアウトする例です。
ffmpeg -i input.mp3 -af "afade=t=out:st=50:d=10" output.mp3
| パラメータ | 値 | 説明 |
|---|---|---|
t=out |
— | フェードアウト |
st=50 |
50秒 | フェードを始める位置 |
d=10 |
10秒 | フェードの長さ |
フェードイン+フェードアウトを同時に適用
-af の中に、2つの afade をカンマ(,)で区切って並べます。
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 が音声の長さを超えても、エラーにはなりません。ただし、フェードが終わる前に音声が終わるので、音量が下がりきらないまま途切れます。音声の長さを確認して、st を決めてください。
-c:v copy との組み合わせで音声のみ再エンコード
映像に手を加えないなら、-c:v copy を付けてください。映像の画質はそのままで、音声だけが再エンコードされます。
実測: 処理時間とサイズ
計測したコマンドは次のとおりです。
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
| 項目 | 実測値 |
|---|---|
| 処理時間 | 1.03 秒(実時間の 116.62 倍速) |
| 出力サイズ | 353.15 MB |
計測環境: Core i9-14900KF(32スレッド)/ FFmpeg 8.1 (gyan.dev) / 素材は 1920x1080・30fps・120秒・351.4 MB の映像(Big Buck Bunny をループ生成、CC BY 3.0)に、128 kb/s の AAC 音声(サイン波)を加えたもの(353.29 MB)。2026-09-05、1つずつ順に実行。生データはデータセットで公開しています。
なぜ1秒で終わるのか
-c:v copy を付けているからです。afade が変えるのは音声だけです。1080p の映像はデコードもエンコードもされず、そのままファイルに書き写されます。2分の動画でも、実際の作業は 128kbps の AAC 音声を作り直すことと、映像データのコピーだけです。
同じ計測のほかの操作と比べると、差がよく分かります。映像を再エンコードする操作は、フィルタなしで 27.97 秒、色調補正で 53.29 秒、VP9 への変換では 729.16 秒かかりました。映像をコピーする操作では、ストリームの指定の変更が 0.41 秒、moov アトム(動画の目次にあたる情報)の移動が 0.49 秒、この音声フェード(音声だけ再エンコード)が 1.03 秒でした。差は、いちばん小さい組み合わせ(27.97 秒と 1.03 秒)で約27倍、いちばん大きい組み合わせ(729.16 秒と 0.41 秒)で約1,800倍です。
出力が 353.15 MB で、素材(353.29 MB)とほとんど変わらないのも、これが理由です。ファイルの大部分は映像で、それが元のまま残ります。書き換わるのは音声だけです。
映像にもフェードを入れる場合
映像にも fade をかけると、-c:v copy は使えません。映像の再エンコードが必要になり、かかる時間が大きく変わります。上の 1.03 秒は、音声だけを処理したときの数値です。映像にフェードをかけたときの数値ではありません。目安には、同じ素材・同じ環境で映像を再エンコードしたときの数値を使ってください(フィルタなしで 27.97 秒、色調補正で 53.29 秒)。
フェードアウトの位置は、動画ファイル全体の長さではなく、音声そのものの長さから決めます。カット編集したMP4や、可変フレームレート(1秒あたりのコマ数が一定でない)の動画では、映像と音声の長さが数百ミリ秒ずれることがあります。ffprobe -show_streams で音声の duration(長さ)を確かめ、st=duration-d で開始位置を計算してください。フェードの位置がずれるのを防げます。BGMを差し替えたあとは、特に確認してください。
関連記事
よくある質問
afade と acrossfade の違いは?
afade は、1つの音声をフェードイン・フェードアウトさせます。acrossfade は、2 つの音声を重ねながら切り替えます(クロスフェード)。BGM の切り替えには acrossfade、始まりと終わりのフェードには afade を使います。
フェードはどれくらいの長さがいい?
会話ならイン 0.3〜0.5 秒、アウト 1〜2 秒。音楽ならイン 1〜2 秒、アウト 2〜4 秒が目安です。「プツッ」という音は、音が急に始まったり止まったりすると出ます。これを消すだけなら、数ミリ秒のフェードでも効果があります。
特定の周波数だけフェードできる?
afade は、音全体の音量を変えます。afade の前に lowpass をつなげても、曲全体から高い音が削られるだけで、フェードはすべての音にかかります。特定の帯域だけをフェードするには、acrossover で帯域を分け、片方にだけ afade をかけてから amix で戻します。
500Hz より上の音だけを、50秒から10秒かけてフェードアウトする例です。
ffmpeg -i input.mp3 -filter_complex "acrossover=split=500[low][high];[high]afade=t=out:st=50:d=10[hf];[low][hf]amix=inputs=2:normalize=0" output.mp3
normalize=0 は、amix が音量を半分に下げないようにする指定です。
フェードが思った位置から始まらない
st=(開始時刻)が 0 のままになっていないか確認してください。ファイルの最後でフェードアウトしたいときは、start = duration − fade_length(全体の長さ − フェードの長さ)を計算して、st に指定してください。
afade で再エンコードされる?
はい。音声フィルタを使うと、音声は必ず再エンコードされます。映像は -c:v copy を付ければ、そのまま残せます。