見出し画像

【Python】MP4動画をフレーム単位や秒数で画像に変換するメモ【OpenCV】


RTAの解説資料を作るにあたり、動画を画像にして全体の流れを紹介したかった


参考:【OpenCV】動画データを画像データに変換してみる


使った素材動画(初代メトロイドのRTA) 30分ほど。


*Windows環境での話になります。

 Pythonをインストールして、VSCode上で実行している前提での話。
適当なフォルダをVSCodeで開き、そこに「convert.py」を作成。
 参考元のコードをコピペします。そして、目的の動画を同フォルダに設置。このままだとファイル名が不一致なので、コードの3行目のmovie_name = ' ' の中を好きなファイル名とします。
 後はターミナル上で実行すれば毎フレームごとの画像が生成されます。
 PNGにしたい場合は26行目の「.jpg」の部分を変更すれば多分大丈夫。

***OpenCVを導入するのを忘れずに。「pip install opencv-python

 このように、意外とPythonの便利なコードはWeb上に散らばっているので探してみると入門編として楽しめる。

ファイル名=Video1での実行例。


フレーム単位ではなく、1秒単位に変更

 1回目の実行結果により、すべてのフレームの画像抽出は出来た。しかし、明らかに不要なフレームが多い。

ファイル数107,761。多すぎる。


 そこで、1秒ごとに抽出することによって使いやすくする。

参考:Pythonで動画から毎秒のフレームを抽出する


***引き続きWindows環境での例

 新たにフォルダは「convert-per-sec」として作成。VSCodeで開く。
その後、VSCodeに参考元のコードをコピー。

3行目の動画パスを変換したいものに変える。今回はVideo1.mp4を流用。

13行目に、imagesフォルダへの参照があるので作成しておく。
(osライブラリからディレクトリ作成と名前変更をインポートしても良いが今回はコード短いこれで行く

1秒ごとに画像を抽出する。


フォルダをPython側で実行時に作成する場合の例


1秒ごとに抽出された画像がimagesフォルダに格納されている。

 imagesフォルダを開くと、実際に使いやすい画像になった。後はこれらをグーグルスプレッドシートやPDF等で活用して資料にするだけ。

***今回はPNGで抽出したが、軽量化のためにjpegでも良い。

抽出された画像例。


 別にVSCodeを使わなくても、なんならオンライン上でもPythonのコードは実行できる。
 しかし、基本的には手元の環境でファイル管理をした方が直感的でわかりやすいので今回はVSCodeでの使用例とした。


この記事が気に入ったらサポートをしてみませんか?