oFからFFmpeg使うメモ。

いっこ前の記事に書いてたofxVideoRecorderを使うにはFFmpeg入れないといけないんだけど、
ちょっと備忘録的に新規インストールまでと今回やってたことをつらつらーっとメモ書き。
Mac OS X 10.9 Mavericksで開発環境を整える想定。

・不可視ファイル出す

$ defaults write com.apple.finder AppleShowAllFiles true
$ killall Finder

・homebrew入れる

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

・updateとか

$ brew update
$ brew doctor

ここで以下のようにエラる時は最新のXcodeとCommandlineTools入れて、AppStoreからCommandlineToolsを最新にアプデすればエラーが消える。

Warning: A newer Command Line Tools release is availableUpdate them from Software Update in the App Store.

・再度brew doctor

$ brew doctor
Your system is ready to brew.

・ffmpeg入れる

$ brew install ffmpeg

・入ってるもの一覧確認

$ brew info ffmpeg

Build: pkg-config ✘, texi2html ✘, yasm ✘
Recommended: x264 ✔, faac ✔, lame ✔, xvid ✔
Optional: freetype ✘, theora ✘, libvorbis ✘, libvpx ✘, rtmpdump ✘, opencore-amr ✘, libvo-aacenc ✘, libass ✘, openjpeg ✘, speex ✘, schroedinger ✘, fdk-aac ✘, opus ✘, frei0r ✘, libcaca ✘, libbluray ✘, libquvi ✘, libvidstab ✘

とりあえず使いたいのあればこんな感じでインストール

$ brew install fdk-aac

・ffmpegのコーデック一覧確認

$ ffmpeg -codecs

ここでコーデックにE(Encoding supported)が入ってないとエンコード時に使えない。
大概、mp3に必要なlibmp3lameとかvp8に必要なlibvpxが入ってないよーってなると思うので
必要なコーデックを使う為のライブラリを適宜入れてく。

これをoFから生で叩くとこんな感じ。

#include <stdlib.h>

string cmd = ofFilePath::getAbsolutePath("ffmpeg") + " -i "+ ofFilePath::getAbsolutePath("out.mp4") + " -vcodec libx264 -acodec aac -strict -2 "+ ofFilePath::getAbsolutePath("./h264/newout.mp4");
char* fname = new char[cmd.length()+1];
memcpy(fname, cmd.c_str(), cmd.length()+1);
system( fname );

・string -> char 変換

#include <stdlib.h>
std::string file = "c:\\hoge.jpg";
int len = file.length();
char* fname = new char[len+1];
memcpy(fname, file.c_str(), len+1);

以下はいろいろ検証で触ってたときのテストコマンドのメモ

・960×540→670×540にクロップ

$ ffmpeg -i in.mov -vf "crop=670:540:145:0" out.mov

・上下黒帯入れて670×670に変換

$ ffmpeg -i in.mov -vf "scale=670:540,pad=670:670:0:65:black" out.mov

・500×500にリサイズしつつ1.5秒だけ切り出し

$ ffmpeg -i in.mov -vf "scale=500:500,select=gte(t\,0)*lte(t\,1.5)" out.mov

・映像からmp3コーデック、512kpbsで音声ファイルを .mp3 で書き出し

$ ffmpeg -i in.mp4 -acodec libmp3lame -strict -2 -ab 512k sound.mp3

・mapで映像の音を別ファイルで差し替え (0:0,0:1と1:0から下記ストリームを使う)+頭0.1秒カット

$ ffmpeg -i video.mp4 -i sound.m4a -map 0:0 -map 1:0 -vf "select=gte(t\,0.1)" newvideo.mp4

・映像と音をそのままファイル連結(映像、音共にコーデック合わせてからじゃないとエラー)

$ ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "concat=n=2:v=1:a=1" output.mp4

・HTML5 VIDEOタグ用に.mp4 .ogv .webmの映像音コーデックサンプル

// .mp4
-vcodec h264 -acodec libfdk_aac -ac 2 -vol 256 -ab 512k
// .ogv
-vcodec libtheora -acodec libvorbis -vol 256 -ab 512k
// .webm
-vcodec vp8 -acodec libvorbis -vol 256 -ab 512k

こんなもんかな?

you