メインページに戻る

1. FFmpegを使って動画の連番画像を作成しよう!

1.1 サンプルコードをドライブにコピー

Google Colaboratoryを活用して、動画から連番画像を作成します。

次のリンクにアクセスし、「ドライブにコピー」をクリック。

短いコードなので一応貼っておきます。
ファイル名は自分がアップロードした動画と同じ名前に変更して下さい。

FFmpegについては詳しい説明を省きますが、動画や音声の変換に便利なツールです。
(ローカル環境にも比較的容易に構築可能なので、興味ある方は構築してみてください。)

# 動画ファイルのアップロード
from google.colab import files
uploaded = files.upload()
# 動画ファイル名の設定
SOURCE_VIDEO = "IMG_1667.MOV"
# 動画のwidth/height/fpsを取得
import cv2

video_path = SOURCE_VIDEO
cap = cv2.VideoCapture(video_path)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)

print("width:{}, height:{}, fps:{}".format(width,height,fps))
print("")
print("final static int DISPLAY_W = {}".format(width))
print("final static int DISPLAY_H = {}".format(height))
import os
import shutil

# 画像書き出し用のフォルダを作成。src_img_dirフォルダの中に画像が書き出される。
src_img_dir = "src_img_dir"
if os.path.exists(src_img_dir):
    !rm -rf {src_img_dir}  # 既存のディレクトリを削除
    !rm {src_img_dir}.zip  # zipファイルを削除
os.makedirs(src_img_dir)

# ffmpegの実行
# !ffmpeg -i {SOURCE_VIDEO} -vf fps={fps} "$src_img_dir/%04d.jpg"
# とりあえず30に固定
!ffmpeg -i {SOURCE_VIDEO} -vf fps=30 "$src_img_dir/%04d.jpg"

# zip化
!zip -r src_img_dir.zip src_img_dir/

# ダウンロード
from google.colab import files
files.download(src_img_dir + ".zip")


1.2 実行してみよう!

実行すると「src_img_dir.zip」がダウンロードされます。

src_img_dir.zipを解凍した「src_img_dir」フォルダの中に、30pfsで連番画像(0001.jpg, 0002.jpg, 0003.jpg….)が入っていることが確認できます。

「#3 動画のwidth/height/fpsを取得」のところで出力されるwidth、heightはメモしておきましょう。
今回の例は、以下の通り。



2. 連番画像をProcessingに移動

参考:part06_01_original

2.1. src_img_dirフォルダをProcessingのdataフォルダ内に移動させよう!

src_img_dirを/code/part05_01_base/data内へ移動。
ここでPART03で計算済みのposes.csvもdataフォルダ内のpoeses.csvと置き換えておこう。

src_img_dirのファイル数をチェック。下の例は267枚の画像が入っていることを確認。

2.2. パラメータを変更して実行してみよう!

Processing側のMovieタブ内にある「int numFrames」の値を先ほど数えたファイル数(例:267枚)に書き換える。

DISPLAY_WとDISPAY_Hを上でメモしたwidth、heightに変更。
解像度が大きすぎる場合はrateを調整してください!1000以下にしておくと良いかと思います。

ManagePoseDataのタブの、poseDataのxとyについても同様の数値で割られていることに注意。CSVのデータを抜き取ったタイミングで、動画と同様の比率にする必要があります。

実行してみると…オリジナル動画にエフェクトを生成できたかな?

参考:part06_01_original

メインページに戻る