LoginSignup
1
1

More than 5 years have passed since last update.

OpenCV3.3で動画ファイルのリードができない(Ubuntu16.04)

Posted at

OpenCVでは、ビデオキャプチャからの動画入力が、カメラであろうと動画ファイルであろうと同じように扱えるはず。

##!/usr/bin/python
# -*- coding: utf-8 -*-

import cv2

cap = cv2.VideoCapture('2017_0706_082809_003.MOV')

while(cap.isOpened()):
    ret,frame = cap.read()
    print("ret=",ret)
    gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame',gray)
    if cv2.waitKey(1)&0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

ところが、

Failed to query video capabilities: Invalid argument
libv4l2: error getting capabilities: Invalid argument
VIDEOIO ERROR: V4L: device 2017_0717_114442_006.MOV: Unable to query number of channels

となり読み込めない。C++で記述しても同様なので、バインディングの問題ではなさそう。

環境

Ubuntu Linux 16.04
OpenCV 3.3.0
Python は2.7系

調査

OpenCVをソースから再コンパイル。そもそもコーデックがちゃんと入っているのかを見ると、FFMPEGもGStreamerも入っていない。。

-- Video I/O:
-- DC1394 1.x: NO
-- DC1394 2.x: NO
-- FFMPEG: NO
-- avcodec: NO
-- avformat: NO
-- avutil: NO
-- swscale: NO
-- avresample: NO
-- GStreamer: NO

解決策

根本的にはFFMPEGをcmakeの時に見つけられていないことが原因と思われる。が、これの直し方がよくわからない。代わりに、gstreamerで試してみると、なぜかうまく行った。

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
cmake  (略) ..
make & make install
--   Video I/O:
--     DC1394 1.x:                  NO
--     DC1394 2.x:                  NO
--     FFMPEG:                      NO
--       avcodec:                   NO
--       avformat:                  NO
--       avutil:                    NO
--       swscale:                   NO
--       avresample:                NO
--     GStreamer:                   
--       base:                      YES (ver 1.8.3)
--       video:                     YES (ver 1.8.3)
--       app:                       YES (ver 1.8.3)
--       riff:                      YES (ver 1.8.3)
--       pbutils:                   YES (ver 1.8.3)
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1