動画を逆再生にするフィルタは、映像用の reverse と音声用の areverse の2つです。コマンドは1行で済みます。ただし reverse は、入力のすべてのフレームをメモリにためてから、逆の順番で出力します。長い動画や4Kをそのまま通すと数GBのメモリを使い、足りなければ処理が途中で止まります。
基本: 映像と音声を両方逆にする
ffmpeg -i input.mp4 -vf reverse -af areverse output.mp4
-vf reverse が映像、-af areverse が音声の指定です。-vf reverse だけだと、映像は逆再生なのに音声は順再生のままになります。音声を残すなら、必ず両方を書いてください。
音声がいらないなら、-an で消すほうが簡単です。
ffmpeg -i input.mp4 -vf reverse -an output.mp4
-c copy(再エンコードせずにコピーする指定)は使えません。フレームの順番を入れ替えるので、再エンコードが必要です。
一部だけ逆再生にする
逆再生したい部分を先に切り出してから、reverse に渡します。入力側の -ss(開始位置)と -t(長さ)で切ると、切り出した部分のフレームだけがメモリに入るので、メモリの使いすぎも防げます。
ffmpeg -ss 00:00:05 -t 5 -i input.mp4 -vf reverse -af areverse output.mp4
フィルタの中で切る書き方もあります。
ffmpeg -i input.mp4 -vf "trim=0:3,reverse" -af "atrim=0:3,areverse" output.mp4
reverse はどれだけメモリを使うのか(実測)
公式ドキュメントには “This filter requires memory to buffer the entire clip, so trimming is suggested”(クリップ全体をメモリにためるので、切り出して使うのがよい)という一文しかなく、何GB必要かは書かれていません。そこで 1920×1080・30fps・10秒(300フレーム)の H.264 クリップを使い、ffmpeg プロセスが使ったメモリの最大値(ピーク Working Set)を測りました。
| 条件 | 使用メモリ(最大) | 処理時間 |
|---|---|---|
| 逆再生なし(同じ設定で再エンコードのみ) | 1.0 GB | 1.1 s |
1080p 10 秒を reverse |
1.7 GB | 1.5 s |
1080p 先頭 3 秒だけ(-t 3) |
1.2 GB | 0.7 s |
720p に縮小してから reverse |
0.7 GB | 1.2 s |
1080p 30 秒(-stream_loop 2 で 3 周) |
3.5 GB | 4.5 s |
| 1080p 60 秒(6 周) | 6.3 GB | 9.4 s |
| 4K(3840×2160)に拡大して 10 秒 | 7.3 GB | 4.7 s |
計測環境: Core i9-14900KF(32スレッド)、128 GB RAM、Windows 11、FFmpeg 8.1(gyan.dev full build)。エンコーダは libx264 -preset veryfast -crf 23 です。2026-09-02 に計測しました。
- 1080p の yuv420p のフレーム1枚は 1920×1080×1.5 バイト ≈ 3.1 MB です。300フレームで約0.9 GB になり、実測で増えた分(1.7 − 1.0 = 0.7 GB)に近い値です。
- 必要なメモリは「解像度 × フレーム数」に比例します。60秒なら6 GB、4Kなら10秒で7 GBです。スマホで撮った4K 60fpsの1分の動画をそのまま通すと40 GBを超え、ほとんどのPCで失敗します。
- 逆再生なしでも1 GB使っているのは、libx264 の先読み(ルックアヘッド)とスレッドごとのバッファのためです。32スレッドのCPUなので、大きめの値になっています。
メモリを減らす方法は2つです。先に切る(-ss/-t)か、先に縮める(scale を reverse より前に置く)かです。フィルタの順番に注意してください。reverse,scale=... と書くと、元の解像度のフレームがたまってから縮小されるので、メモリは減りません。
ffmpeg -i input.mp4 -vf "scale=-2:720,reverse" -af areverse output.mp4
長い動画を丸ごと逆再生する: 分割 → 各片を逆再生 → 逆順に連結
1分を超える素材を全部逆再生にするなら、メモリを増やすより、分割するほうが確実です。
1. 10秒ごとに分割する(再エンコードしないので、数百ミリ秒で終わります)
ffmpeg -i input.mp4 -c copy -f segment -segment_time 10 -reset_timestamps 1 seg%03d.mp4
分割はキーフレーム(単独で表示できるフレーム)の位置で行われるので、各ファイルはぴったり10秒にはなりません。逆再生の結果には影響しません。
2. 分割したファイルをそれぞれ逆再生にする(シェルのループで順に処理します)
for f in seg*.mp4; do ffmpeg -i "$f" -vf reverse -af areverse "rev_$f"; done
1つあたりのメモリは、上の表の「1080p 10 秒」と同じくらい(1.7 GB)です。
3. 逆順のリストを作って連結する
seg000 が元の動画の冒頭なので、最後に置きます。番号の大きい順に並べます。
ls rev_seg*.mp4 | sort -r | sed "s/^/file '/; s/$/'/" > list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
どのファイルも同じ設定でエンコードしているので、-c copy で結合できます。連結について詳しくは 動画を連結する(concat) を見てください。
逆再生 GIF
GIF にするなら、先に fps と scale でフレーム数と解像度を下げます。メモリの節約になり、GIF のファイルサイズも小さくなります。
ffmpeg -i input.mp4 -vf "fps=15,scale=320:-1,reverse" output.gif
順再生と逆再生を1本にした「ブーメラン」は、split で映像を2つに分け、片方だけ reverse して、concat でつなぎます。
ffmpeg -i input.mp4 -vf "fps=15,scale=320:-1,split[a][b];[b]reverse[r];[a][r]concat=n=2:v=1" output.gif
ブーメラン動画の作り方と、GIF と MP4 のサイズの比較は 動画をループ・ブーメランにする にあります。パレットの最適化で GIF の画質を上げる方法は GIF 作成 を見てください。
逆再生 + 倍速
setpts と atempo を組み合わせると、「巻き戻し」のような演出になります。
ffmpeg -i input.mp4 -vf "reverse,setpts=0.5*PTS" -af "areverse,atempo=2" output.mp4
速度の変え方について詳しくは 動画の再生速度を変える を見てください。
音声ファイルだけ逆再生
ffmpeg -i input.mp3 -af areverse output.mp3
areverse もすべてのサンプルをメモリにためます。ただ、音声は映像より桁違いに小さい(MP3 はデコードすると32bitの浮動小数点になり、44.1kHz・ステレオで1分 ≈ 21 MB)ので、実際にはメモリを気にする必要はありません。
よくある質問
「Killed」や「Cannot allocate memory」で止まる
上の表のとおり、reverse に渡したフレームはすべてメモリに入ります。まず -t で短く切るか、scale を reverse の前に置いてください。それでも足りなければ、分割する手順に切り替えます。スワップ(ディスクをメモリの代わりに使う仕組み)に頼っても、まともに終わりません。
逆再生した音がおかしい
先頭にフェードインが入っている素材を逆にすると、末尾がフェードアウトになります。これは正常です。映像は逆再生なのに音声が順再生のままなら、-af areverse を付け忘れています。
逆再生だけ -c:v copy で速くできない?
できません。H.264 などは、多くのフレームを「ほかのフレームとの差分」として記録して容量を減らしています(フレーム間圧縮)。順番を変えるには、いったんデコードして再エンコードする必要があります。
関連ツール
逆再生ツールは、reverse と areverse をブラウザの中で実行します。ファイルは端末の外に送られません。ただし FFmpeg.wasm でもメモリの制約は同じなので、短いクリップ向けです。
関連記事
- 動画をループ・ブーメランにする — 順再生 + 逆再生の往復ループ
- 動画の再生速度を変える — setpts / atempo
- 動画を連結する(concat) — 分割した片の結合
- 動画をトリミングする —
-ss/-tの正確な使い方