
サッカー俯瞰撮影ファイル加工(2)残像動画作成
ここでは、撮影した動画ファイルを、加工することについて、主に、FFMPEGとImageMagickの話をします。
FFMPEGとImageMagickのインストールについては、前回、軽く触れたので、ここでは省略します。
そもそも、サッカー未経験者なので、試合全体を眺めて、みんな頑張ってるんだな、ということだけが知りたいわけです。なので、俯瞰撮影しているわけで、さらに、その動画を今回は「残像が残る感じの動画」に加工してみます。
「残像が残る感じの動画」の作成は、いろんなやり方があるのかもしれないですが、私は、次の3ステップを踏みます。
動画ファイルから、一定間隔で静止画像を抜き出す
前の画像の明るさを薄くして、次の画像と重ね合わせる
重ね合わせた画像を順番につなげて、動画にする
具体的に見ていきましょう。
ffmpeg -i 元の動画ファイル.mp4 -vf fps=1/10 -q:v 1 -f image2 temp1_interval\%%06d.png
このようなコマンドを使って、静止画像を作っていきます。「fps=1/10」となっている部分が、「どんくらいの間隔」といものを指定しています。「fps=1/10」というのは、「1秒間に1/10枚」=「10秒間に1枚」=「60秒間に6枚」という感覚です。
なので、この「元動画」は、15分だったので、全部で90枚の画像が作られます。(実際は、90±数枚という感じです)


素材画像の準備ができたので、1番目の画像を少し薄くして、2番目の画像と合成して、保存していきます。繰り返し作業になるので、バッチファイルで作業したほうがいいですが、手でやってもできないことはないです。
この画像の合成は、FFMPEGではなく、Imagemagickというものを使いたいと思います。
copy temp1_interval\000001.png temp2_compare\000000.png
cd temp1_interval
for %%f in (*.png) do (
echo %%f
magick composite -dissolve 25%%x75%% ..\temp2_compare\000000.png %%f ..\temp2_compare\%%f
copy ..\temp2_compare\%%f ..\temp2_compare\000000.png
)
cd ../temp2_compare
del 000000.png
「temp1_interval」というフォルダに、先ほどの90枚の画像を入れて、「temp2_compare」というフォルダに加工後の画像を入れていきます。
「-dissolve 25%%x75%%」という部分が、前の画像と次の画像の「濃さ」を設定していて、これは、いろいろと試行錯誤して、この数字にしてあります。ただ、単に「好みの問題」なので、いろいろと試してみてください。
以下に、4番目の画像、5番目の画像、6番目の画像を小さく表示して、その間の加工した残像画像を挟んでいきます。





なんとなく、残像しているのが、分かっていただけましたか?
この「temp2_compare」の中には、89か90の画像が作られます。最初の画像の扱い次第で、89になるし、90にもなります。先ほど例示したバッチ処理だと、90枚になります。(個人的には、ここが90になるのが、好みなので)

最後の仕上げとして、この「temp2_compare」フォルダ内の画像を全てつなげて、動画にします。ここで再び、FFMPEGに戻ります。
ffmpeg -r 6 -i temp2_compare\%%06d.png -vcodec libx264 -pix_fmt yuv420p -r 30 out_compare.mp4
「-r 6」という部分が、少し説明が必要かと思います。これは「1秒間に6枚の画像を並べる」ということを意味しています。なので、この90枚の画像を全部繋げると、15秒の動画になります。
今回、「-r 6」にしてある最大の理由は、前回作成した早送り動画が15秒に設定してあるからです。
早送り動画の長さと、今回作成した残像動画の長さをそろえるためには、こんな計算になります。早送り動画を作るときに、元の動画の「1/n」の長さにして、今回の静止画を作成する間隔を「fps=m」と設定したなら、nxmとなります。
すなわち、元の動画の「1/60」で、静止画作成間隔を「fps=1/10」にしたので、60x1/10=6です。
そんなこんなで、出来上がった動画は、こちらです。(このサンプルは、60倍速1/60で作成しているので、見ていても、よく分からない動画ですが、2倍速(1/2)くらいでやってみると、「試合全体を眺める」という目的としては、なかなか良いものになります。