妙にハマったので覚書です。
MPV4で動画を生成するとブラウザで再生できない
OpenCVでMP4を生成するとき、下記のようにコーデックをMPV4にしてしまうとブラウザなどで再生できません。
import cv2
fourcc = cv2.VideoWriter_fourcc(*"mp4v")
writer = cv2.VideoWriter("output.mp4", fourcc, 5.0, (640, 480))
cv2.VideoWriter_fourcc(*"avc1")
1 を指定することでH.264でエンコードでき、ブラウザ等で再生できます。
pipのopencv-pythonにはH.264コーデックがない
pipからインストールしたopencv-pythonにはライセンス上の理由によってH.264コーデックが同梱されていません。
Windowsなら https://github.com/cisco/openh264/releases からDLLを取ってきてpythonフォルダにでも入れておけばいいですが、Linuxだとopencvをビルドしたりする必要があります。
Debian系なら apt install python3-opencv
でコーデックの入ったopencvが使えます。
ちなみにaptとpip両方からインストールすると自分の環境ではpipが優先されてしまいコーデック無し状態になりました。
Pylanceがaptのpython3-opencvを認識しない
VSCodeのPylanceがなぜかcv2を認識しなくなりました。
pipからインストールしたときは普通に認識するのになぜ……?
型はどうせ組み込みのstub見るだけなのに……
pipとaptのインストール状態の違いについて確認してみたところ、次のようになっていました。
pip: /usr/local/lib/python3.8/dist-packages/cv2/__init__.py
apt: /usr/lib/python3/dist-packages/cv2.cpython-38-x86_64-linux-gnu.so
そこで試しに /usr/lib/python3/dist-packages/cv2
に空ディレクトリを生成してみたところ、無事Pylanceにcv2をインストール済みと認識させることができました。
sudo mkdir /usr/lib/python3/dist-packages/cv2
よかったーヽ(=´▽`=)ノ
参考
-
h264
,x264
はavc1
にフォールバックされます。 ↩