TL;DR
- タイムラプス動画(特定の時間間隔で抜き出した画像でつくるコマ落ち動画)を,ffmpegで作る方法を紹介します.
- ffmpegは,GPU(NVEnc)対応FFmpegのポータブルなDockerfileで作ったコンテナベースのコマンドで実行します(GPUが無くても動きます)
作成手順
- 動画を一定時間ごとに切り出した画像群を生成します
- 画像群を結合して,新しい動画(タイムラプス動画)を作る
実行
- サンプル動画は,Pixabayの動画を使用しました(Coverr-Free-Footageさん感謝)
- 人-コマース-ショップ-忙しい-6387の720p(60fps)動画をPeople6387.mp4としてダウンロードしました
動画からコマ落とし画像を作成
- 入力動画から,コマ落としした画像群を生成します
mkdir out
docker run --rm \
-v ${PWD}:/tmp/ \
ffmpeg-docker:latest \
-r 60 -stats -i /tmp/People6387.mp4 \
-r 15 /tmp/out/out_%04d.png
- コマンド説明
-
ffmpeg-docker:latest
: GPU(NVEnc)対応FFmpegのポータブルなDockerfileで作ったffmpegコンテナ -
-r 60
: 入力ファイルを60fpsとして扱う -
-r 15 /tmp/out/out_%04d.jpg
:- 動画から画像を15フレームごとに切り出します
- 連番ファイル
out_0001.jpg
などの名前で,out
ディレクトリ以下に出力します
-
- 実行が完了すると,以下のように多数のコマ落とし画像が生成されます.

コマ落とし画像を結合してタイムラプス動画を生成
- コマ落とし画像を結合して,タイムラプス動画を生成します
- 前節からの続きで,outディレクトリに連番ファイルが作成されているものとします
docker run --rm \
-v ${PWD}:/tmp/ \
ffmpeg-docker:latest \
-i /tmp/out/out_%04d.png \
-vcodec libx264 -pix_fmt yuv420p \
-r 60 /tmp/output.mp4
- コマンド説明
-
-i /tmp/out/out_%04d.png
: 入力ファイルを60fpsとして扱う -
-r 15 /tmp/out/out_%04d.jpg
: コマ落とし画像のファイル名パターンを指定 -
-vcodec libx264 -pix_fmt yuv420p
: H.264動画を生成 -
-r 60 /tmp/output.mp4
: output.mp4のファイル名で60fpsの動画を作成
-
- 実行が完了すると,実行ディレクトリに
output.mp4
が作られています.- このoutput.mp4が,元のPeople6387.mp4の動画を4コマ落ちした動画になっています.
- 上記コマ落ち動画は,FFmpegで動画をGIFに変換を参考に,作成したmp4ファイルをアニメーションgifに変換したものです.