エンジニアレポート

Pythonでスタメン紹介動画を作ってみた

2020年06月04日 Python動画

フットボール事業部の植草です。
主にサッカー・野球のコンテンツ配信サービスに携わっています。
今回はPythonで映像と画像を用いて、サッカーの中継でよく見られるスタメン紹介動画を作ってみました。

この仕組みを活用すれば弊社が保有している試合データをもとに、自動で動画を生成⇒SNSへ自動投稿するようなサービスも実現できそうですね。

まずはこの動画をご覧ください。

いかがでしたでしょうか?

内容としてはデジタル空間をイメージした背景映像に、3枚(タイトル画像・スタメン画像・メッセージ画像)のイメージを、エフェクトを織り交ぜながら合成した映像となります。
(映像提供元:https://ae-style.net/materials/

それでは早速動画作成の仕組みについて以下ポイントに沿って説明していきたいと思います。

  • 実装環境
  • 動画作成プログラムのイメージ
  • フレーム画像の抽出
  • エフェクト①(スタメンタイトル):スライドインアウト
  • エフェクト②(スタメン):ズームインアウト
  • エフェクト③(メッセージ):フェードイン
  • 動画出力
  • まとめ

実装環境

実装環境は以下のような構成となります。Pythonのライブラリであるpillowやopencvは画像や映像の操作に必要となりますのであらかじめインストールしておく必要があります。

[環境]
Windows10
Visual Studio Code
Python 3.7.6(Anaconda仮想環境)
Pillow 7.0.0(https://pillow.readthedocs.io/en/stable/)
opencv-python 4.1.2(https://pypi.org/project/opencv-python/)

スタメン風 動画作成プログラムのイメージ

プログラムの構成としては
1.背景映像をフレーム単位で画像へ切り出す
2.各フレームに用意した画像を合成して元のフレームを差し替える
3.映像出力する

というような構成となります。
また、エフェクトの部分に関してはフレーム画像に合成する位置を少しずつずらしたり、大きさを変更させながら合成していきます。

なんとなくイメージをつかんで頂けたでしょうか?それではいよいよPythonのプログラムをもとに説明していきたいと思います。

フレーム画像の抽出

映像を操作するopencvライブラリをインポートし、 VideoCaptureで動画を読み込み、1フレーム毎に読み込んでいきます。
このフレームに用意した画像を合成していきます。

エフェクト①(スタメンタイトル):スライドインアウト

画像を操作するpillowライブラリをインポートし、用意した画像を読み込みます。フレーム画像の指定した座標位置に読み込んだ画像を貼り付けます。
スライドインアウトはその仕組みを利用して、フレーム毎に座標位置をずらしながら貼り付けることでスライドのエフェクトを表現しています。

エフェクト②(スタメン):ズームインアウト

基本エフェクト①と同じでズームインアウトをするため、貼り付ける前に画像のサイズ調整をします。フレーム毎に徐々に画像を拡大させる(ズームイン)、縮小させる(ズームアウト)ことでズームのエフェクトを表現しています。

エフェクト③(メッセージ):フェードイン

基本エフェクト①と同じで貼り付ける前に、ImageFilterのGaussianBlurを利用し画像をぼかします。フレーム毎に徐々にぼかしを鮮明にしていくことで、フェードインのエフェクトを表現しています。

動画出力

出力動画の仕様を設定するため、読み込んだ背景映像をVideoCaptureのgetを使用し、フレームレート、フレームのサイズを取得。出力動画のコーデックを設定するためVideoWriter_fourccを使用し、 fourccコードを指定します。(今回はmp4なので(‘m’, ‘p’, ‘4’, ‘v’)を指定。 その他のコードは http://www.fourcc.org/codecs.php を参照ください)


最後にVideoWriterで上記で取得した内容の出力動画のオブジェクトを生成します。
これでmp4形式の動画オブジェクトが生成できたのでこちらにエフェクトなど織り交ぜたフレーム画像を出力していきます。

まとめ

Pythonのソースをもとに説明させて頂きましたが、いかがでしたでしょうか?動画をフレーム単位の画像として捉えれば、あとは画像処理だけなのでそこまで難しくなさそうですね。

また透過した画像でも合成できますので中継映像によくあるような試合スタッツの表現も可能です。
その辺はまた次の機会に紹介したいと思います。
最後に本動画を作成した全ソースが以下となります。
是非参考にしてみてください。

エンジニア募集中

データスタジアムでは一緒に働いていただけるエンジニアを絶賛募集中です!

野球、サッカー、バスケをはじめとして色々なスポーツの仕事があります。

AWSやAzure、動画やAIなど技術的にもチャレンジできる職場です。

テクノロジーの力で、日本のスポーツを一緒に発展させていきましょう!

<募集中のポジション(2020年6月1日現在)>

開発エンジニア(速報サービス)

開発エンジニア(スポーツチーム向けサービス)

インフラエンジニア

最新記事

エンジニアトップ エンジニアインタビュー エンジニアレポート

  • 採用情報
  • おしらせ
  • 掲載事例

ページトップヘ