« 2010年9月 | トップページ | 2011年2月 »

2010年12月

ffmpegのログをVCでリダイレクト

ffmpegを別プロセスにしてそのログをリダイレクトしたいと思って
CreateProcess()の第二引数(exe起動文字列)に「ffmpeg -i [c:\test.mov] -vcodec copy c:\test.mp4 > log.txt」
とかやってみたけど、出力されなかった。
どうやら、リダイレクトはcmd.exeの機能だからみたい。

いろんなインターネットから情報をもらってきた結果
ログファイルをCreateFileしてから、CreateProcessで設定するSTARTUPINFO(第9引数)の標準出力と標準エラー出力に、ログファイルを指定することでできるようだ。

// ログファイル名
sprintf_s(logfilename, MAX_PATH,"%s.log", filename_temp);

// 変数初期化
ZeroMemory(&sec_attr,sizeof(sec_attr));
ZeroMemory(&mPI,sizeof(mPI));
ZeroMemory(&mSI,sizeof(mSI));

// 子プロセスにオブジェクトのハンドルを継承させる
sec_attr.bInheritHandle = TRUE;
hnd_ffmpeg_log = CreateFile(logfilename, GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ,    &sec_attr, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );

mSI.cb = sizeof(STARTUPINFO);
mSI.dwFlags = STARTF_USESTDHANDLES;
mSI.hStdOutput =hnd_ffmpeg_log;   // 標準出力にログファイル指定
mSI.hStdError =hnd_ffmpeg_log;     // 標準エラー出力にログファイル指定

// ffmpegコマンド
sprintf_s(str, 512, "c:\\ffmpeg.exe -i c:\test.mov -vcodec copy c:\test.mp4");
CreateProcess(NULL, str, &sec_attr, &sec_attr, TRUE, CREATE_NO_WINDOW | NORMAL_PRIORITY_CLASS, NULL, NULL, &mSI, &mPI);

FFmpegをx264入りで自前ビルド(MinGW使用)

ざっくりメモ。気が向いたらあとで修正。

スタティックなexeにしたかったので、とりあえずpthreadはぬきました。
本当は入れたいんだけど、どうしても生成したffmpeg.exeをWindowsコマンドプロンプトから起動すると「libpthread-2.dllをよこせ」とはじまるので、ぬいたのです!どうしたらいいのかだれか教えてください!

1.MinGW導入

よくわからんがAutoでインストールしてくれるやつのexe
http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get-inst/

MinGWをそのままデフォルトでインストールすると、c:\MinGWにインストールされてインストール時のHOMEディレクトリは、WindowsフォルダでいうとC:\MinGW\msys\1.0\home\になるみたい

2.yasm導入

ffmpegのコンパイル時に--disable-yasmできるけど、なんとなくいれておく
ソースコードをもらってきて任意の場所で展開後、展開したディレクトリで以下のコマンド。
./configure
make
make install

3.libx264導入

http://www.videolan.org/developers/x264.html

こちらもソースコードをもらってくる
ここから、好きなのをもらってくる
とりあえず最新(x264-snapshot-20101210-2245.tar.bz2)をもらってきた
また任意の場所で展開して、展開したディレクトリで以下のコマンド
./configure --disable-pthread  --enable-shared --prefix=/home/usr
make
make install

prefixをなぜつけたのかというと、普通にmake installしただけでは、この後のffmpegのビルド時にlibx264 not foundとか言われてしまったので、libx264の位置を教えてあげるためでした。
なんか他に手があるのかもしれんが、よくわからんどす!
きっとそういったパスを先に設定しておかなければならんのだと思うが。。。

4.ffmpeg導入

ソースコードをもらってくる

このままコンパイルするとstrcasecmpでエラーとなるバグがあるらしいので
こちらからパッチふたつほどいただいてきてあてましょう

リンク先より引用
> /mingw/include/string.h のパッチ。
> $ patch -p0 < strcasecmp.diff

> /mingw/include/stdio.h のパッチ。
> $ patch -p0 < tempnam.diff

パッチが終わったら、こちらも任意の場所で展開して、展開したディレクトリで以下コマンド
./configure --enable-gpl --disable-shared --enable-static --enable-memalign-hack --disable-pthreads --enable-libx264 --extra-cflags=-I/home/usr/include --extra-ldflags=-L/home/usr/lib

make
make install

3.でx264をconfigureしたときにつけたprefix位置を extra-cflagsとextra-ldflagsに指定
make installするとC:\MinGW\msys\1.0\local\binにexeができるので、windowsのコマンドプロンプトから確認できます。

TODO:  x264のプリセット?を含めてライブラリをつくりなおす

参考にさせていただいたサイト

 

※x264のconfigure部に  --enable-sharedを追記しました。
これをするとprefixを指定しなくてよくなります。

Nyancoさんありがとうございます!

« 2010年9月 | トップページ | 2011年2月 »

最近のトラックバック

2017年8月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
無料ブログはココログ