Google Colaboratoryで動画処理(初級編)
Google Colaboratoryでは、ffmpeg
やPIL(Pillow)
、Google Driveの機能を利用できるので、研究用の動画解析/編集を簡単に実行できる。ローカルマシンのマシンパワーを消費することもないし、他の人と共同作業したり出力結果を共有することも可能で、なかなかに良い。
事前準備
動画ファイルをGoogle Driveにアップロードする
動画ファイルをGoogle Driveにアップロードする。今回は「マイドライブ/videoexp/SampleVideo_1280x720_5mb.mp4」というファイル名でアップロードした。
今回の動画ファイルはSample Videosから拝借した。
Google Driveをマウントする
from google.colab import drive
drive.mount('/content/gdrive')
ffmpegを使って、画像に変換する
from google.colab import drive
drive.mount('/content/gdrive')
ffmpegを使って、動画ファイルから画像を抽出する。抽出の際にはフレームレート(fps)を指定する。fpsは目的に応じて調整する。ここでは1fps(1秒に1フレーム)を指定している。fpsが大きくなればなるほど出力結果はスムーズになるが、その分処理の時間とファイルサイズが増大する。
import os
src_img_dir = "/content/gdrive/My Drive/videoexp/src"
if not os.path.exists(src_img_dir):
os.makedirs(src_img_dir)
!ffmpeg -i "/content/gdrive/My Drive/videoexp/SampleVideo_1280x720_5mb.mp4" -vf fps=1 "$src_img_dir/%04d.jpg"
抽出された画像をsrc
ディレクトリに保存するようにしている。Google Driveでsrcディレクトリを開けば、抽出された画像の内容を確認することができる。
抽出された画像の一覧を取得する
import glob
src_files = glob.glob("{}/*.jpg".format(src_img_dir))
src_files.sort()
print(len(src_files), "image files")
一枚ずつ画像処理を行う
import glob
src_files = glob.glob("{}/*.jpg".format(src_img_dir))
src_files.sort()
print(len(src_files), "image files")
得られた各フレームの画像に対して、一枚ずつ処理をしていく。
ここではPILを使って「画像の右上にフレーム番号を書く」という処理を実行している。
from PIL import Image
from PIL import ImageDraw
dst_img_dir = "/content/gdrive/My Drive/videoexp/dst"
if not os.path.exists(dst_img_dir):
os.makedirs(dst_img_dir)
for i, file in enumerate(src_files):
im = Image.open(file)
draw = ImageDraw.Draw(im)
draw.text((10,10), "{0:04d}".format(i), fill="#ff0")
dst_file = "{dir}/{index:04d}.jpg".format(dir=dst_img_dir,index=i)
im.save(dst_file)
処理後の画像はdstディレクトリに出力されている。動画に変換する前にここで処理内容を確認できる。
処理後の画像から動画を作る
最後に処理後の画像を動画に戻す。
ffmpegを使って、処理後の画像が納められているディレクトリ(dst)にある画像から動画ファイル(out.mp4)を作成する。
この際のフレームレートは、動画から画像を抽出した際に用いたフレームレートと一致させる必要がある。
!ffmpeg -framerate 1 -i "$dst_img_dir/%04d.jpg" "/content/gdrive/My Drive/videoexp/out.mp4"
Author And Source
この問題について(Google Colaboratoryで動画処理(初級編)), 我々は、より多くの情報をここで見つけました https://qiita.com/croquette0212/items/8ff251d5da77e803c253著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .