opencv在做其他事情时工作得很好。它可以打开图像并显示图像。但它不能打开视频。
我用来打开视频的代码如下
import cv2
cap = cv2.VideoCapture("MOV_0006.mp4")
while True:
ret, frame = cap.read()
cv2.imshow('video', frame)
if cv2.waitKey(1) & 0xff == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
但在执行时,它输出如下错误消息
[h264 @ 0x1053ba0] AVC: nal size 554779904
[h264 @ 0x1053ba0] AVC: nal size 554779904
[h264 @ 0x1053ba0] no frame!
我的vlc
和mplayer
可以播放此视频,但opencv不能
我已经安装了x264
和libx264-142
编解码器包。(使用sudo apt-get install
)
我的ubuntu版本是14.04 trusty
。
我不确定这是不是一个编解码器的问题?
我已经用WITH_UNICAP=ON
或WITH_UNICAP=OFF
重新构建了opencv,但它根本不影响问题。错误信息永远不会改变。
对于ubuntu 14.04,这就是我修复它的方法。
安装OpenCV所需的依赖项“
sudo apt get删除ffmpeg x264 libx264 dev
sudo apt get更新
sudo apt get install libgstreamer0.10-0 libgstreamer0.10-dev gstreamer0.10-tools gstreamer0.10-plugins-base libgstreamer-plugins-base0.10-dev gstreamer0.10-plugins-good gstreamer0.10-plugins-uggh gstreamer0.10-plugins-bad gstreamer0.10-ffmpeg
sudo apt get-y安装libopencv dev build essential cmake git libgtk2.0-dev pkg config python dev python numpy libdc1394-22 libdc1394-22-dev libjpeg dev libpng12 dev libtiff4 dev libjasper dev libavcodec dev libavformat dev libswscale dev libxine dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l dev libtbb dev libqt4 devlibfaac dev libmp3lame dev libopencore amrnb dev libopencore amrwb dev libtheora dev libvorbis dev libxvidcore dev x264 v4l utils解压
sudo add apt repository ppa:mc3man/gstffmpeg keep
sudo apt get更新
sudo apt get安装gstreamer0.10-ffmpeg
sudo apt get install gstreamer0.10-plugins-bad
sudo apt get更新
在anaconda3中安装ffmpeg“
conda安装-c menpo ffmpeg=2.7.0
向下加载Opencv 3.1.0“
工作组https://github.com/Itseez/opencv/archive/3.1.0.zip 解压缩3.1.0.zip
mkdir生成
cd生成
(python3-c“导入系统;print(sys.prefix)“)-DPYTHON3_EXECUTABLE=$(哪个python3.5)-DPYTHON3_INCLUDE_DIR=$(python3-c“from distutils.sysconfig import get_python_inc;print(get_python_inc())”)-DPYTHON3_PACKAGES_PATH=$(python3-c“from distutils.sysconfig import get_python_lib;print(get_python_lib())”。。
制造
sudo make安装
是编解码器的问题
我用
ffmpeg
将该mp4
文件转换为avi
文件。然后上面的opencv代码可以很好地播放这个avi
文件。因此,我确信这是一个编解码器的问题。
(然后,我使用
ffmpeg
将该mp4
文件转换为另一个mp4
文件,认为ffmpeg
可能有助于将原始的不可读.mp4
编解码器转换为可读的.mp4
编解码器,但最终生成的.mp4
文件被破坏。这一事实可能与此问题有关,也可能与此无关,只要提及,以防有人需要此信息。)答案是重建FFmpeg然后重建Opencv
尽管知道这是一个编解码器的问题,我尝试了许多其他的方法,但仍然无法解决它。最后我试着重建ffmpeg和opencv,然后问题就解决了!
下面是我详细的重建过程。
(1)构建ffmpeg
tar -xvf ffmpeg-2.7.1.tar.bz2
cd ffmpeg-2.7.1
./configure --enable-pic --extra-ldexeflags=-pie
make -j5
(在ffmpeg文件夹下)sudo make install
(2)构建Opencv
wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.9/opencv-2.4.9.zip
unzip opencv-2.4.9.zip
cd opencv-2.4.9
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_QT=OFF -D WITH_V4L=ON -D CMAKE_SHARED_LINKER_FLAGS=-Wl,-Bsymbolic ..
make -j5
sudo make install
sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
现在opencv代码应该可以很好地播放一个
mp4
文件了!我试过但没用的方法
cmake
打开cv时,尝试添加WITH_UNICAP=ON
WITH_V4L=ON
。但根本不起作用。opencv-2.4.8/3rdparty/lib/
下的库更改为库。但都没能成功建造。sudo apt-get -y install libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff4-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip
相关问题
我在网上搜索过很多类似的问题,但没有一个能解决!
下面是我认为和我一样的问题。
OpenCV/ffmpeg不播放我的mp4视频。- 来自opencv-users.nabble.com
视频捕获在OpenCV 2.4.2中不起作用- 从answers.opencv.org
Mp4读取问题-我安装了OpenCV 2.4.1和python2.7,并编写了一个短程序,成功读取avi文件。但是它无法读取mp4文件- 从answers.opencv.org
无法在Windows 7机器中使用OpenCV2.4.3、Python 2.7打开“.mp4”视频文件- 从Stack Overflow
在Windows上,OpenCV2.4视频捕获无法工作- 从Stack Overflow
相关问题 更多 >
编程相关推荐