Posted at

oFの映像をキャプるよ

More than 3 years have passed since last update.


フロー

 流れとしては、ofxExportImageSequenceで連番書き出し→ffmpegで統合といった感じです。


1.ofxExportImageSequenceで連番書き出し


1-1.比嘉さんのレポジトリからcloneしてきます。


1-2.書き出したい範囲を囲みビルド

 プロジェクトに追加し、連番書き出しを行いたい範囲をbegin()/end()で囲みビルドするだけです。以下にも記載していますが、ぶっちゃけexampleをみた方が良いかと思います。

//この2行は.hファイルに記述

#include "ofxExportImageSequence.h"
ofxExportImageSequence exp;

void ofApp::setup(){
exp.setup(1280, 720, 30);
exp.setOutputDir("out");
exp.setOverwriteSequence(true);
exp.setAutoExit(true);
exp.startExport();
}

void ofApp::draw(){

exp.begin();
ofClear(0);
/*書き出したい何か*/
exp.end();

exp.draw(0, 0);
}


1-3.こんな感じでdataフォルダの中に、outというフォルダが生成され、連番画像が書き出されます。

スクリーンショット 2016-05-11 23.14.26.png


2.ffmpegで統合

 ffmpegとは、オープンソースの動画/音声ファイルのエンコーダー&デコーダーです。多種多様なファイル形式やコーデックを扱える上、マルチプラットフォームの凄いヤツです。まずは、ffmpegを手に入れましょう。

 


2-1.ffmpegをインストール

ターミナルから、homebrewでffmpegをインストールします。

brew install ffmpeg


2-2.ffmpegで統合

 これで、ffmpegが使用可能になったので、ターミナルで連番があるディレクトリまで移動して、連番画像を統合します。書き出し設定は、コーデックH.264、拡張子mov、30fpsです。処理中は、しばらくターミナルにコマンドがダーっと流れますので、コーヒーでも飲みながら待つと良いでしょう。連番画像名や書き出しファイル名やフレームレートは適宜変えてくださいね。(mbaだと60fpsちょっときつかった。。。。)



  • -r 30:フレームレートを指定


  • -i "out_%05d.tif":インポートする連番ファイル名を指定


  • -vcodec libx264:コーデックをh.264に指定


  • -pix_fmt yuv420p:エンコーダーに渡すピクセルフォーマットを指定


  • out.mov:最終的に書き出すファイル名を指定

ffmpeg -i "out_%05d.tif" -r 30 -vcodec libx264 -pix_fmt yuv420p out.mov