タイムラプス動画をffmpegで作る


TL;DR

  • タイムラプス動画(特定の時間間隔で抜き出した画像でつくるコマ落ち動画)を,ffmpegで作る方法を紹介します.

作成手順

  1. 動画を一定時間ごとに切り出した画像群を生成します
  2. 画像群を結合して,新しい動画(タイムラプス動画)を作る

実行

動画からコマ落とし画像を作成

  • 入力動画から,コマ落としした画像群を生成します
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に変換したものです.

参考