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 を付ければ、そのまま残せます。