Posted at

タイムラプス動画を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コマ落ちした動画になっています.



output.gif


  • 上記コマ落ち動画は,FFmpegで動画をGIFに変換を参考に,作成したmp4ファイルをアニメーションgifに変換したものです.


参考