- ベストアンサー
Mac(OS X)のOpenCVで動画出力できない
- MacのOS X環境にて、OpenCV(CvVideoWriter/cv::VideoCapture)を利用した動画の書出が出来ません。
- cv::VideoCaptureを利用しwriter.write(frame)またはwriter << frame、またはCvVideoWriterを利用しcvWriteFrame(writer, frame)など、動画書出し不可。
- 質問者は、いくつかの試行を行ったが、書出しは成功しなかった。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
サンプルでもだめだとなると、私にはわかりかねるのですが、一点だけ > (3)当初MacPortsで試行するも不具合で断念 > (4)サイト(1)を参考にHomeBrewを利用しOpenCVのインストール成功 MacPortsとHomeBrewを同時に使うと、互いに依存や干渉しあって不具合が発生することがあるそうです。 例えば ・依存するパッケージとして、同じライブラリがMacPorts,HomeBrewの双方でインストールされてしまう → コンパイル時は MacPorts、実行時はHomeBrewのライブラリを使おうとして不一致によるエラーとなる 等。 使わない方はアンインストールして、どちらかに統一するのがいいかと。 ライブラリで思い出しましたが、DYLD_LIBRARY_PATH が設定されてたりはしませんね?
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
多少の手直しは必要ですが、MacPorts、OpenCV2.4.6で確認したところ、ちゃんと動画ファイルができています。 http://opencv.jp/sample/video_io.html#cap_write そのファイルサイズだと、「再生時間0の動画として書き出しに成功している」ようにも見えます。 書き出そうとしているデータが正しいか、確認できていますか?
補足
> kmeeさん 回答ありがとうございます! このサンプルもそのままに実行したのですが、書出し出来ませんでした。 この「書出し出来ない」というのは、指定したファイル名(a.aviやb.mov)にて、ファイルが作成され 414byteや747byteの容量を持つものの、内容が動画ファイルではない様子でした。 (動画再生ソフトでも起動せず、バイナリエディタでもみてみましたが、動画ファイルのようには見えませんでした(=いくつかの動画ファイルと比較してみたのですがヘッダ部分に同様のものが見いだせなかったという意味です)) > 書き出そうとしているデータが正しいか 書いてくださっている「データが正しいか」について、完全には自信がないですが、 複数の書籍、複数のサイトの、(カメラからのキャプチャ動画等をそのまま動画ファイルとして書き出す)動画書出しのサンプルソースをそのまま使用しても、同様に、小サイズのファイルが出来て終わってしまうので、 「うまくいってない=動画書出し不可」ということで照会させていただきました。 いずれにしても、回答助かります。ありがとうございます。
補足
> kmeeさん たびたびありがとうございます。 おっしゃる通り、HomeBrewインストール時に、MacPortsが既にインストールされているとコンフリクト(競合)を起こしてインストールできないようだったのでMacPortsのアンインストール後にbrewをインストールしました。 (DYLD_LIBRARY_PATHなる、ライブラリのパス設定は特に設定しておりませんで、実際いくつか設定がありそうなところを探したのですが、ありませんでした。) ----- 【結果報告】 別途、OpenCVの入れ直しからやってみてはという示唆を頂いて、改めてインストール作業をおこなったところ、なんとか動くようになりました。ありがとうございました。大変たすかりました。 【実施手順】※明確にこれが〝原因〟というものを見つけられていませんが、記録の意味で、実施した手順を念のため記載させていただきます。 (1)brewからopencv(2.3.1a)をアンインストールし(brew uninstall opencv) (2)MacPortsの再インストール(MacPorts-2.2.0-10.8-MountainLion.pkg) ※この前にHomeBrewをアンインストールするのを忘れていたのですが、いったん動いてます。上述の通りコンフリクトがあり得るそうなので消しておいた方が無難と思います。 (3)MacPortsから現時点最新のopencv(2.4.6)をインストール(sudo port install opencv) (4)XcodeのHeader Search PathとLibrary Search Pathsを再設定。 ※opencvのインストール先が異なるため、Brew時は、/usr/local/Cellar/opencv**という設定でしたが、Ports時は/opt/local/includeと/opt/local/libとしました。 (現状、私の手元の設定では、Header Search Path:/opt/local/include /opt/local/include/opencv /opt/local/include/opencv2とLibrary Search Paths:/opt/local/lib/**としています) (5)"Build Phases"の"Link Binary With Libraries"も、/usr配下からではなく、/opt配下からのリンクに再設定 (6)またこれも設定次第とは思いますが、"Apple LLVM compiler 4.2 - Language"の"C++ Standard Library"を"libstdc++"にあらためて設定(警告とエラー次第で"libc++"と"libstdc++"がどちらもあり得るようですが。) 【補足】※環境次第とは思いますが、動画出力できたコーデックを念のため記載しておきます。 //OK SVQ3 'D','I','V','X' 'X','V','I','D' 'S','V','Q','3' //NG CV_FOURCC_DEFAULT 'D','I','B',' ' 'A','V','C','1' 'F','L','V','1' 'I','2','6','3' 'U','2','6','3' 'D','I','V','3' 'M','P','4','2' 'P','I','M','1' 'M','J','P','G' 'R','P','Z','A' 'D','X','5','0' 'D','A','V','C' 0 -1 1 どちらかというとソース等の手法というより、環境設定の問題だったようで、大変お騒がせしてしまいました。申し訳ありません。 ありがとうございました。助かりました。 <(_ _)>