週末はホビープログラマ、ということで。
ちょっと MLT (Media Lovin' Toolkit) で遊ぼうと思って
最新の mlt-0.9.2 をビルドして、Pythonバインディングのサンプル (mlt-0.9.2/src/swig/python/play.py) に適当な動画ファイルを渡して実行したら
Python[7087:d07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error (1000) creating CGSWindow on line 263'
とか出て落ちるわけですよ
PythonとかSWIGのせいではなさそうです
mlt.Consumer() で "sdl" 以外のConsumerプラグイン、例えば "sdl_audio" とか "rt_audio" を指定するとちゃんと音だけ出るのです
SDLを入れなおしたりビルドしなおしたりXCodeをアップデートしたり、色々やりましたけど
結論からいうと、
http://stackoverflow.com/questions/12641755/sdl-video-init-causes-exception-on-mac-os-x-10-8
にある pre_init()
をまるっと mlt-0.9.2/src/modules/sdl/consumer_sdl.c に貼り付けて、consumer_start()
の先頭で呼ぶようにしたら解決しました。
(libSDLmainをリンクする、というのも試してみたけどうまくいかなかった)
Macでは、SDLのビデオカードの初期化に問題があって、それが最新版 (SDL 1.2.15)でも直っていないとかそんなような話のようです。
====
ちなみに
なんでOpenCVじゃなくて?って思われた方の為に。
先に試してます。
- cv2では開きたい動画が開けなかった(codecの対応が弱いのか?ffmpegでは開けてるのだけど)
- 音声も利用したい
といった辺り。pyffmpeg はメンテナンスされてなくて最新のffmpegに対応してないらしいし。