動画を逆再生にするフィルタは、映像用の 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 でもメモリの制約は同じなので、短いクリップ向けです。

関連記事