連番静止画から動画生成 — スライドショーとタイムラプスの作り方
写真をまとめてスライドショー動画にしたり、長時間撮影した動画からタイムラプスを作ったりする際に FFmpeg は非常に便利です。FFmpeg 6.1 で確認済みのコマンドを用途別に解説します。
連番PNG → 動画(スライドショー)
img001.png、img002.png のように連番になった画像ファイル群から動画を生成します。
ffmpeg -framerate 1 -i img%03d.png -c:v libx264 output.mp4
%03dのような連番パターンは CI の書き換えルールの対象外のためテキストブロックで示します。
-framerate 1— 入力のフレームレートを1fps に指定(1枚あたり1秒表示)-i img%03d.png—img001.png,img002.png, … を順番に読み込む%03dは3桁ゼロ埋め(4桁なら%04d)
スライドショーを滑らかにする:
フレームレートを上げると再生がスムーズになります。ただし枚数が足りないと動画が短くなるため、-r 25 で出力フレームレートも合わせて指定します。
ffmpeg -framerate 1 -i img%03d.png -c:v libx264 -r 25 output.mp4
この場合、入力1fps(1枚1秒)を出力25fps に変換するため、各フレームが25回繰り返されて滑らかに見えます。
単一画像 → 短動画(ループ)
1枚の画像を指定秒数の動画にする場合は -loop 1 と -t を組み合わせます。
ffmpeg -loop 1 -i image.png -t 5 -c:v libx264 output.mp4
-loop 1— 入力ストリームを無限ループ-t 5— 出力動画の長さを5秒に制限image.pngは KNOWN_EXTS に含まれるため bash ブロックで実行可能
pix_fmt yuv420p の重要性
libx264 でエンコードした動画は、デフォルトの pix_fmt がソース画像に依存します。PNG の場合 yuv444p や rgba になることがあり、QuickTime(macOS プレーヤー)や一部のモバイル端末で再生できないことがあります。
互換性を重視する場合は必ず -pix_fmt yuv420p を追加してください:
ffmpeg -loop 1 -i image.png -t 3 -c:v libx264 -pix_fmt yuv420p output.mp4
yuv420p は最も広く対応された色空間フォーマットです。品質のわずかな低下と引き換えに、ほぼすべての環境での再生互換性が確保されます。
タイムラプス(動画から間引き)
既存の動画からフレームを間引いて高速再生動画(タイムラプス)を作成します。-vf fps=1/N で「N秒に1フレーム」を取り出し、通常速度で再生することで N倍速のタイムラプスになります。
ffmpeg -i input.mp4 -vf fps=1/10 output.mp4
-vf fps=1/10— 10秒に1フレームを取り出す(結果として10倍速のタイムラプス)- 元の動画が60分なら、出力は約6分の動画になります
速度の目安:
-vf fps= 値 | 間引き間隔 | 速度 |
|---|---|---|
fps=1/5 | 5秒に1フレーム | 5倍速 |
fps=1/10 | 10秒に1フレーム | 10倍速 |
fps=1/30 | 30秒に1フレーム | 30倍速 |
fps=1/60 | 1分に1フレーム | 60倍速 |
互換性のためにこちらも -pix_fmt yuv420p を付けることを推奨します:
ffmpeg -i input.mp4 -vf fps=1/10 -c:v libx264 -pix_fmt yuv420p output.mp4
連番JPG → 動画(タイムラプス用素材から)
カメラのインターバル撮影で得られた連番 JPEG から動画を作る場合:
ffmpeg -framerate 24 -i photo%04d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4
%04d は photo0001.jpg, photo0002.jpg, … のような4桁ゼロ埋め連番に対応します。
開始番号を指定する場合 (photo0100.jpg から始まるなど):
ffmpeg -framerate 24 -start_number 100 -i photo%04d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4
フレームレートまとめ
| 目的 | 推奨設定 |
|---|---|
| 1枚1秒のスライドショー | -framerate 1 |
| 滑らかなスライドショー | -framerate 1 -r 25 |
| 通常の動画 | -framerate 24 または 30 |
| タイムラプス(10倍速) | -vf fps=1/10 |
image2 デマルチプレクサについて
FFmpeg は画像シーケンス入力に image2 デマルチプレクサを内部で使用します。通常は自動検出されますが、明示的に指定することも可能です:
ffmpeg -f image2 -framerate 25 -i img%03d.png -c:v libx264 output.mp4
-f image2 の指定は通常不要ですが、自動検出が効かない場合の回避策として覚えておくと便利です。
関連記事:
動作確認: ffmpeg 6.1.1 / Ubuntu 24.04 (GitHub Actions runner)
一次ソース: ffmpeg.org/ffmpeg.html / ffmpeg.org/ffmpeg-filters.html / trac.ffmpeg.org/wiki/Slideshow