動画を逆再生にするフィルタは 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)か、先に縮めるscalereverse より前に置く)かです。フィルタチェーンの順序が重要で、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 にするなら fpsscale で先にフレーム数と解像度を落とします。メモリ対策にもなり、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 作成 を参照してください。

逆再生 + 倍速

setptsatempo を組み合わせれば「巻き戻し」風の演出になります。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 で短く切る、scalereverse の前に置く、それでも足りなければ分割手順に切り替えてください。スワップに頼るとまともに終わりません。

逆再生すると音が「ザザッ」と鳴る

先頭にフェードイン処理が入っている素材を逆にすると末尾がフェードアウトになるだけなので、それ自体は正常です。異音が出るなら、映像だけ逆にして音声を順再生のまま残していないか(-af areverse の付け忘れ)を確認してください。

逆再生だけ -c:v copy で速くできない?

できません。H.264 などのフレーム間圧縮は「前のフレームからの差分」で記録されているため、順序を変えるには一度デコードして再エンコードする必要があります。

関連ツール

逆再生ツールはこの記事の reverse / areverse をブラウザ内で実行します。ファイルは端末から出ません。ただし FFmpeg.wasm もメモリ制約は同じなので、短いクリップ向けです。

関連記事