音声と動画の同期ズレを修正する — -itsoffset と adelay フィルタ

録画・配信・変換後に「口の動きと音声がズレている」「映像より音が遅い/早い」といった問題が起きることがあります。FFmpegにはこの同期ズレを修正するためのいくつかのアプローチがあります。本記事では代表的な手法を状況別に解説します。

動作確認: ffmpeg 6.1 で確認済み


ズレの方向を確認する

修正方法を選ぶ前に、どちらの方向にズレているかを確認します。

状態意味対処
音声が映像より遅い音が後から聞こえる音声を前にずらす、または映像を遅らせる
音声が映像より早い音が先に聞こえる音声を後にずらす

1. -itsoffset — 入力タイムスタンプをオフセットする

-itsoffset は次の -i で指定するファイルのタイムスタンプにオフセット値を加算します。

正の値 を指定すると、そのストリームの開始が遅れます(ストリームが後ろにずれる)。

音声が映像より遅い場合(音声を映像に合わせる)

同じファイルを2回入力し、映像は2番目の入力から、音声は1番目の入力(オフセット付き)から取ります。

ffmpeg -itsoffset 1.5 -i input.mp4 -i input.mp4 -map 1:v -map 0:a -c copy output.mp4

コマンドの解説:

注意: -itsoffset は直後の -i に作用します。順序が重要です。

itsoffset の正負の意味

効果
+1.5(正)そのストリームの開始を 1.5秒遅らせる(映像に対して音声を後ろにずらす)
-1.5(負)そのストリームの開始を 1.5秒早める(映像に対して音声を前にずらす)

2. adelay フィルタ — 音声を遅らせる

音声が映像より早い場合、adelay フィルタで音声トラックを指定ミリ秒だけ遅らせることができます。

ffmpeg -i input.mp4 -filter:a "adelay=1500|1500" output.mp4

コマンドの解説:

チャンネルごとに異なる遅延を設定する例

ffmpeg -i input.mp4 -filter:a "adelay=1000|500" output.mp4

(左チャンネル: 1000ms、右チャンネル: 500ms)— CI対象外(参考例)


3. -async オプション — 自動同期補正

-async は音声サンプルを自動的に伸縮させて映像と同期させるオプションです。

ffmpeg -i input.mp4 -async 1 output.mp4

4. aresample と async の違い

オプション/フィルタ動作用途
-async Nタイムスタンプに基づき音声を間引き/補完自動の小幅補正
aresample フィルタサンプルレートの再変換微細な同期ずれの除去、サンプルレート統一
adelay フィルタ音声チャンネルに無音を追加して遅らせる固定遅延の付加
-itsoffsetタイムスタンプ自体をオフセットストリームレベルの同期調整

一般的な使い分け:


よくある注意点


関連記事


動作確認: ffmpeg 6.1.1 / Ubuntu 24.04 (GitHub Actions runner)
一次ソース: ffmpeg.org/ffmpeg.html / ffmpeg.org/ffmpeg-filters.html / trac.ffmpeg.org