ローリングコンバットピッチなう!

AIとか仮想化とかペーパークラフトとか

conda-forgeのOpenCVが何時の間にか動画対応(ffmpeg対応)になっていた

[technology][python]conda-forgeのOpenCVが何時の間にか動画対応(ffmpeg対応)になっていた

いつもchainer等の実験に使っているanacondaベースのpython3.6環境でOpenCVを使って動画ファイルの操作をしようとしたのですが、上手く行かない。
具体的には

import cv2

input_video = cv2.VideoCapture('test.mp4')

の様にして、

input_video0.isOpened()

をチェックするとFalseになっていて、動画ファイルをオープン出来ない。
色々ググってみると、「anaconda環境にOpenCVをインストールする際のメジャーなインストール元リポジトリであるcondaやmenpoに登録されたOpenCVのパッケージはffmpegを使う様にビルドされていないので、自分でOpenCVをビルドして組み込むのが吉」というもの。

いくつか同様の事をやっているブログ等を参考にビルド環境を作ろうとしたのですが、ふと思いついて、

$ conda update opencv

を実行すると、動画ファイルの読み込みが出来る様になりました。
インストールされているopencvはconda-forge由来のもので、

$ conda install -c conda-forge opencv

でインストールしたものです。
update後のパッケージ情報を見ると(py36は今使っているpython3.6環境の名前です)

$  conda list -n py36
〜中略〜
ffmpeg                    4.0                  hcdf2ecd_0  
〜中略〜
libopencv                 3.4.2                hb342d67_1  
〜中略〜
opencv                    3.4.2            py36h6fd60c2_1  
openh264                  1.7.0                         0    conda-forge

の様にOpenCVが3.4.2になっており、ffmpegもconda環境に入っています。
この環境でcv2経由での動画ファイルの読み込み、書き出しが両方とも動作しています。
以前は動画扱えなかったんですが、最新のconda-forgeのパッケージではffmpeg対応している様です。

ちなみにOSはUbuntu 16.04 LTSです。


2019/10/01追記:
今日気がついたのですが、conda-forgeから取ったパッケージ+Ubuntuの組み合わせだとcv2.imshow()が使えないみたいです。
とりあえずmempo版に戻しました。

やっぱり自前でビルドするしか無いのか。