動画を逆再生にするフィルタは reverse(映像)と areverse(音声)の 2 つだけで、コマンド自体は 1 行で済みます。問題はその裏側です。reverse は入力の全フレームをメモリに溜めてから逆順に吐き出すため、長い動画や 4K をそのまま通すと数 GB の RAM を消費し、環境によってはプロセスが落ちます。この記事ではコマンドの基本に加えて、実機で測ったピークメモリの数字と、長い素材を安全に処理する分割手順をまとめます。
動作確認: FFmpeg 8.1 / Windows — 本記事のコマンド 10 件を検証スクリプトで実行し、全て成功しました(2026-09-06)
基本: 映像と音声を両方逆にする
ffmpeg -i input.mp4 -vf reverse -af areverse output.mp4
-vf reverse が映像、-af areverse が音声です。片方だけ指定すると、映像は逆再生なのに音声は順再生、という気持ちの悪い結果になるので、音声を残すなら必ずセットで書いてください。
音声が不要なら -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
フィルタ内で切る書き方もあります。こちらは -ss を入力側に置けない事情(複数入力のフィルタグラフなど)があるときに使います。
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 を測りました。
| 条件 | ピーク RSS | 処理時間 |
|---|---|---|
| 逆再生なし(同じ設定で再エンコードのみ) | 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 フレームは 1920×1080×1.5 byte ≈ 3.1 MB。300 フレームで約 0.9 GB。実測の増分(1.7 − 1.0 = 0.7 GB)とほぼ一致します。
- つまり必要メモリは 解像度 × フレーム数 に比例します。60 秒で 6 GB、4K なら 10 秒で 7 GB。スマホで撮った 4K 60fps の 1 分クリップをそのまま通すと 30 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 秒ごとに分割する(再エンコードなしなので数百 ms で終わります)
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 片あたりのメモリは 10 秒分(1080p なら約 1 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 を組み合わせれば「巻き戻し」風の演出になります。reverse の後に置いてください。
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 も全サンプルをバッファしますが、音声は映像より桁違いに小さい(44.1kHz ステレオ 16bit で 1 分 ≈ 10 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の正確な使い方