ofxaddons.comで探してると、ofxQTKitVideoGrabberとかofxQTVideoSaverとかあったので色々使ってみたんだけど、
好きな範囲でキャプれなかったり、SDK6.0必要で入れたらカメラと同時起動出来なかったり、何かと制限ありそうだったのでパス。
んで0.8で使えるofxVideoRecorderを見つけたのでこちら使ってみることに。
ofxVideoRecorderのサンプル見れば分かるけど、ffmpeg使うよーとのこと。
まず開発機のMacにffmpeg入ってなかったので入れる。
ここは素直にhomebrewで入れた方がいい。こことか。
んでこの辺りを見てH.264用, aac, mp3あたりのコーデックを入れておく。
brewで入れたらこんな感じかな。
/usr/local/Cellar/ffmpeg/2.2/bin/ffmpeg
これを渡してやる。
ofxVideoRecorder.setFfmpegLocation(*****)
動いた。けど書き出し時にエラる、、、
んで原因これ。最新版2.2とかでは -strict オプションつけないとエラる仕様になってる。
http://www.teradas.net/archives/3105/
AudioCodec mp3 -acodec libmp3lame -strict unofficial AudioCodec aac -acodec aac -strict experimental
今回は.mp4の動画にしたかったのでAudioCodecはAAC使ってこんな感じで指定。
vidRecorder.setAudioCodec("aac -strict experimental");
あとはcapture用のFBO用意して、
ofFbo cap; ofPixels p; ofImage *img; // setup cap.allocate(640,480); cap.begin(); ofClear(0, 0, 0); cap.end(); img = new ofImage; // update ofSetColor(255, 255, 255); cap.begin(); { ofClear(0, 0, 0); ofPushMatrix(); { ofTranslate(50, 50); vidGrabber.draw(0, 0); } ofPopMatrix(); } cap.end(); img->clear(); cap.readToPixels(p); // img->setFromPixels(p); // FBOからのreadToPixelsはOF_COLOR_IMAGE_ALPHAなのでOF_IMAGE_COLORに変換必要 unsigned char * pixels = p.getPixels(); unsigned char pixs2[640*480*3]; for(int i = 0; i < 640*480; i++) { pixs2[i*3] = pixels[i*4]; pixs2[i*3+1] = pixels[i*4+1]; pixs2[i*3+2] = pixels[i*4+2]; } img->setFromPixels(pixs2, 640, 480, OF_IMAGE_COLOR); img->update(); // ビデオ書き込み vidRecorder.addFrame(img->getPixelsRef());
カラーチャンネルの変換メソッドってないんかな??
・途中のエラーとか
Please use -b:a or -b:v, -b is ambiguous Unknown encoder 'mp3'
途中mp3変換ライブラリ入れずに進んでて、mp3コーデックがねーよって怒られて書き出してもらえない。。
→ のでlame入れる。
brew install lame
とりあえずこれでoF上で好きな範囲を、絵と音のコーデック+ビットレート任意、フレームレート指定で映像書き出しできる。
めでたしめでたし。
you