社会人研究者が色々頑張るブログ

pythonで画像処理やパターン認識をやっていきます

連番画像から動画(mp4)やアニメーションgifを作る方法

はじめに

画像認識の出力画像からデモ動画を作成する際、毎回「ffmpeg 連番画像 動画」の様なキーワードで検索してしまうので、よく使うコマンドだけでもまとめておきたいと思います。 本記事では以下のタスクに対する解決策を紹介します。

・動画に対する画像認識結果を連番で保存する方法
・連番画像からmp4動画を作成する方法
・連番画像からアニメーションgifを作成する方法
・アニメーションgifを任意の位置でCroppingする方法

動画に対する画像認識結果を連番で保存する方法

動画に対して画像認識し、その結果を指定のフォルダに保存するコード

cap = cv2.VideoCapture(path) #任意のビデオ
count = 0
dir_path = "./out/"

# 出力フォルダの作成。すでに同名のフォルダがあったもOK
os.makedirs(dir_path, exist_ok=True) 

while True:
    frame = cap.read()[1]
    out = func(frame) # 何らかの画像処理関数
    out_path = dir_path + "{0:06d}.png".format(count) # 6桁になるように0埋めする
    cv2.imwrite(out_path, out)
    count += 1

偶に桁数があっていない連番画像の順番がごっちゃになるファイラーがあるのですが、こうやって桁数を合わせることで実験結果を順番に確認できる様になってとても便利です。
f:id:nsr_9:20210815234944p:plain

連番画像からmp4動画を作成する方法

ffmpegという動画、音声を扱うソフトウェアを使用します。
Ubuntuを使用している場合、以下のコマンドで簡単にインストールすることができます。

sudo apt install ffmpeg

out/に保存された連番画像からmp4動画を作成するコマンドは以下になります。

ffmpeg -r 30 -i out/%06d.png -vcodec libx264 -pix_fmt yuv420p -r 60 out_video.mp4

-r はフレームレートです。入力画像は30コマを1秒として読み込み、60fpsになるように出力しています。

連番画像からアニメーションgifを作成する方法

アニメーションgifは普段使用しなかったのですが、はてなブログは直接動画ファイルを投稿できなかったので、使い始めました。
gifはImage Magicと呼ばれる画像を扱うソフトウェアを使用して作成します。
Image Magicは以下のコマンドでインストールすることができます。

sudo apt install imagemagick

先程の例と同じ様に、out/に連番画像が保存されている時、次のコマンドでアニメーションgifを作成できます。

convert -delay 5 -loop 0 ./out/*.jpg out_anime.gif 

-delayはコマ送りの時間です。1/100[秒]単位で指定します。
-loopはループ回数です。無限に繰り返す場合は0を指定します。

これから こんなのができる
f:id:nsr_9:20210816000649p:plain f:id:nsr_9:20210816000826g:plain

アニメーションgifを任意の位置でCroppingする方法

アニメーションgifのファイルサイズを小さくしたり、見てほしい場所を強調する為に、画像の一部の領域を抽出(Cropping)したい場合があります。
gifsicleを使用することで簡単にgifの編集を行うことができます。

sudo apt install gifsicle

Croppingする左上の座標を(X1, Y1)、右下の座標を(X2, Y2)とした時、以下のコマンドで切り抜くことができます。

gifsicle --crop X1,Y1-X2,Y2 --output out.gif  input.gif  --colors 256
これから こんなのができる
f:id:nsr_9:20210816000826g:plain f:id:nsr_9:20210815150535g:plain