Ann*_*wan 14 python video opencv codec
做其他事情时,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或用了重建opencv WITH_UNICAP=OFF,但它根本不会影响问题.错误消息永远不会改变.
Ann*_*wan 25
我将该mp4文件转换为avi文件ffmpeg.然后上面的opencv代码可以avi很好地播放该文件.
因此,我确信这是一个编解码器问题.
(然后我将该mp4文件转换为另一个mp4文件使用ffmpeg,认为可能ffmpeg有助于将原始不可读的.mp4编解码器转换为可读的.mp4编解码器,但最终的.mp4文件最终会被破坏.这个事实可能与此问题有关,也可能没有,只是提到,以防任何人需要这些信息.)
尽管知道这是一个编解码器问题,我尝试了很多其他方法,但仍然无法解决它.最后我尝试重建ffmpeg和opencv,然后问题解决了!
以下是我详细的重建程序.
(1)构建ffmpeg
FFmpeg网站:https://www.ffmpeg.org/download.html
ffmpeg-2.7.1.tar.bz2链接:http://ffmpeg.org/releases/ffmpeg-2.7.1.tar.bz2
tar -xvf ffmpeg-2.7.1.tar.bz2cd ffmpeg-2.7.1./configure --enable-pic --extra-ldexeflags=-pie
来自http://www.ffmpeg.org/platform.html#Advanced-linking-configuration
如果您静态编译FFmpeg库并且想要使用它们来构建自己的共享库,则可能需要强制PIC支持(
--enable-pic在FFmpeg配置期间).如果您的目标平台需要与位置无关的二进制文件,则应将正确的链接标志(例如
-pie)传递给--extra-ldexeflags.
如果您遇到错误:
yasm/nasm not found or too old. Use --disable-yasm for a crippled build.只是
sudo apt-get install yasm
进一步的构建选项:https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
例如添加选项
--enable-libmp3lame启用png编码器.(在./configure您需要之前sudo apt-get install libmp3lame-dev版本≥3.98.3)
make -j5 (在ffmpeg文件夹下)sudo make install(2)构建Opencv
wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.9/opencv-2.4.9.zipunzip opencv-2.4.9.zipcd opencv-2.4.9mkdir buildcd buildcmake -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 ..
您可以根据需要更改这些选项.只有最后一个
-D CMAKE_SHARED_LINKER_FLAGS=-Wl,-Bsymbolic是关键选项.如果省略这个,那么make将跳出错误.这也来自http://www.ffmpeg.org/platform.html#Advanced-linking-configuration(上面第4步的相同链接)
如果您静态编译FFmpeg库并且想要使用它们来构建自己的共享库,则可能需要...并将以下选项添加到项目中
LDFLAGS:-Wl,-Bsymbolic
make -j5sudo make installsudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'sudo ldconfig现在opencv代码应该mp4很好地播放文件!
WITH_UNICAP=ON WITH_V4L=ON在cmakeopencv 时添加.但根本没用.
cap = cv2.VideoCapture("MOV_0006.mp4")
print cap.get(cv2.cv.CV_CAP_PROP_FOURCC)我在两个环境中测试了这个.在opencv的第一个环境中工作,而在另一个环境中opencv无法播放视频.但两者都打印出相同的编解码器
828601953.0.我试图改变他们的编解码器,
cap.set(cv2.cv.CV_CAP_PROP_FOURCC, cv2.cv.CV_FOURCC(*'H264'))但根本没有工作.
opencv-2.4.8/3rdparty/lib/在我的可行环境中将库更改为库.但甚至无法成功建造.
我grep
AVC: nal size并发现库包含此错误消息opencv-2.4.8/3rdparty/lib/libavcodec.a等.这就是为什么我试图替换它们.但事实证明这是一个坏主意.
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
VideoCapture无法在OpenCV 2.4.2中运行 - 来自answers.opencv.org
这个提到重建
ffmpeg!但这些论点对我来说还不够.
Mp4读取问题 - 我安装了OpenCV 2.4.1和python 2.7并制作了一个简短的程序,成功读取了avi文件.但它无法读取mp4文件.- 来自answers.opencv.org
无法在_Windows 7机器中使用OpenCV 2.4.3,Python 2.7打开".mp4"视频文件 - 来自Stack Overflow
OpenCV 2.4 VideoCapture无法在Windows上运行 - 来自Stack Overflow
| 归档时间: | 
 | 
| 查看次数: | 26087 次 | 
| 最近记录: |