重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

MacのOS X環境にて、OpenCV(CvVideoWriter/cv::VideoCapture)を利用した動画の書出が出来ません。手がかりだけでも分かれば有り難いです。

既頻出のQAですが何卒よろしくお願いします。<(_ _)>

【1】環境:OS X(10.8.4), OpenCV(2.4.5), Xcode(4.6.3)
【2】質問:
MacのOS X環境にてOpenCVを利用した動画の書出が出来ず方法を知りたい。手がかりだけでも分かれば有り難いです。
【3】現象:
cv::VideoCaptureを利用しwriter.write(frame)またはwriter << frame
あるいは
CvVideoWriterを利用しcvWriteFrame(writer, frame)
など、動画書出し不可。
サイズ414byte(圧縮コーデック指定)、749byte(非圧縮コーデック指定)
の無意味なデータ出来て終わり

【4】試行したが書出し出来ず:
(1)apple用のCV_FOURCC('A','V','C','1')などコーデックを試す→【6】(1)
(2)一度イメージ変数に入れて改めて書出→【6】(2)
(3)相対パスを絶対パスにする→【6】(3)

※以下、yahoo知恵袋でご示唆いただいて追記
 http://detail.chiebukuro.yahoo.co.jp/qa/question …
(4)OpenCVのバージョンを(2.3.1a)に落として再度試行も書出し不可。
(5)ハードディスクの容量確認→問題無し
(6)書込権限確認→問題無し(cv::imwriteで画像ファイルは書出し可能)

【5】(詳細実施方法不明で)未試行:
(1) QuickTimeを使用不可(disable)にしてffmpegを使う方法→【7】

【6】同等不具合の参考サイト:
(1)現象は類似。CV_FOURCCの指定次第との記載だが、当方では書出不可
http://goo.gl/nJCbIr
582~584
OpenCV 2.3 and mac OSX、cv::VideoWriter動作しない→fourccを "avc1"
(2)Mac動画書出不可。別変数(IplImage)を介すとの解決法、当方では書出不可
http://goo.gl/bwREOQ
(3)Mac動画書出不可。相対パスを絶対パスに変更とあるが当方では書出不可
http://goo.gl/atFetY
(4)Mac動画書出サンプル、当方では書出不可
http://goo.gl/eMGEV5

【7】QuickTimeを使用不可にしてffmpegを使う等
(1) http://goo.gl/v17tLl
Unfortunately,~ disable QuickTime.
(2) ./configure --without-quicktime --with-ffmpeg
- http://goo.gl/FAu2Cv
- http://goo.gl/373IIs

【8】経緯:
(1)AppStore経由でOS X(10.8.4)をインストール
(2)AppStore経由でXcode(4.6.3)をインストール
(3)当初MacPortsで試行するも不具合で断念
(4)サイト(1)を参考にHomeBrewを利用しOpenCVのインストール成功
(5)サイト(2)や書籍(2)を参考にサンプルプログラムも実行し問題無
(6)動画の書込に際し問題発生。数バイトのデータは出来るものの動画出力不可

【9】参考/インストールやサンプル:
書籍(1)OpenCV 2 プログラミングブック、マイナビ
書籍(2)詳解 OpenCV、オライリージャパン
サイト(1) http://goo.gl/iHqkmb
サイト(2) http://opencv.jp/
サイト(3) http://goo.gl/5xnVim
サイト(4) http://goo.gl/BPcyS3

手がかりだけでも分かれば有り難いです。何卒よろしくお願いします。<(_ _)>

A 回答 (2件)

サンプルでもだめだとなると、私にはわかりかねるのですが、一点だけ



> (3)当初MacPortsで試行するも不具合で断念
> (4)サイト(1)を参考にHomeBrewを利用しOpenCVのインストール成功

MacPortsとHomeBrewを同時に使うと、互いに依存や干渉しあって不具合が発生することがあるそうです。
例えば
・依存するパッケージとして、同じライブラリがMacPorts,HomeBrewの双方でインストールされてしまう
→ コンパイル時は MacPorts、実行時はHomeBrewのライブラリを使おうとして不一致によるエラーとなる
等。

使わない方はアンインストールして、どちらかに統一するのがいいかと。


ライブラリで思い出しましたが、DYLD_LIBRARY_PATH が設定されてたりはしませんね?

この回答への補足

> 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

どちらかというとソース等の手法というより、環境設定の問題だったようで、大変お騒がせしてしまいました。申し訳ありません。
ありがとうございました。助かりました。 <(_ _)>

補足日時:2013/08/06 09:29
    • good
    • 0

多少の手直しは必要ですが、MacPorts、OpenCV2.4.6で確認したところ、ちゃんと動画ファイルができています。


http://opencv.jp/sample/video_io.html#cap_write


そのファイルサイズだと、「再生時間0の動画として書き出しに成功している」ようにも見えます。
書き出そうとしているデータが正しいか、確認できていますか?

この回答への補足

> kmeeさん
回答ありがとうございます!
このサンプルもそのままに実行したのですが、書出し出来ませんでした。

この「書出し出来ない」というのは、指定したファイル名(a.aviやb.mov)にて、ファイルが作成され
414byteや747byteの容量を持つものの、内容が動画ファイルではない様子でした。
(動画再生ソフトでも起動せず、バイナリエディタでもみてみましたが、動画ファイルのようには見えませんでした(=いくつかの動画ファイルと比較してみたのですがヘッダ部分に同様のものが見いだせなかったという意味です))

> 書き出そうとしているデータが正しいか
書いてくださっている「データが正しいか」について、完全には自信がないですが、
複数の書籍、複数のサイトの、(カメラからのキャプチャ動画等をそのまま動画ファイルとして書き出す)動画書出しのサンプルソースをそのまま使用しても、同様に、小サイズのファイルが出来て終わってしまうので、
「うまくいってない=動画書出し不可」ということで照会させていただきました。

いずれにしても、回答助かります。ありがとうございます。

補足日時:2013/08/05 17:19
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!