无法使用“打开”打开视频

2024-09-30 02:30:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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!

我的vlcmplayer可以播放此视频,但opencv不能

我已经安装了x264libx264-142编解码器包。(使用sudo apt-get install

我的ubuntu版本是14.04 trusty

我不确定这是不是一个编解码器的问题?

我已经用WITH_UNICAP=ONWITH_UNICAP=OFF重新构建了opencv,但它根本不影响问题。错误信息永远不会改变。


Tags: 代码图像size视频编解码器with事情cv2
2条回答

对于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

  1. 下载ffmpeg-2.7.1.tar.bz2

    FFmpeg website: https://www.ffmpeg.org/download.html

    ffmpeg-2.7.1.tar.bz2 link: http://ffmpeg.org/releases/ffmpeg-2.7.1.tar.bz2

  2. tar -xvf ffmpeg-2.7.1.tar.bz2
  3. cd ffmpeg-2.7.1
  4. ./configure --enable-pic --extra-ldexeflags=-pie

    From http://www.ffmpeg.org/platform.html#Advanced-linking-configuration

    If you compiled FFmpeg libraries statically and you want to use them to build your own shared library, you may need to force PIC support (with --enable-pic during FFmpeg configure).

    If your target platform requires position independent binaries, you should pass the correct linking flag (e.g. -pie) to --extra-ldexeflags.


    If you encounter error: yasm/nasm not found or too old. Use --disable-yasm for a crippled build.

    Just sudo apt-get install yasm


    Further building options: https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu

    e.g. Adding option --enable-libmp3lame enables png encoder. (Before ./configure you need to sudo apt-get install libmp3lame-dev with version ≥ 3.98.3)

  5. make -j5(在ffmpeg文件夹下)
  6. sudo make install

(2)构建Opencv

  1. wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.9/opencv-2.4.9.zip
  2. unzip opencv-2.4.9.zip
  3. cd opencv-2.4.9
  4. mkdir build
  5. cd build
  6. 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 ..

    You can change those options depend on your needs. Only the last one -D CMAKE_SHARED_LINKER_FLAGS=-Wl,-Bsymbolic is the key option. If you omit this one then the make will jump out errors.

    This is also from http://www.ffmpeg.org/platform.html#Advanced-linking-configuration (the same link of step 4 above)

    If you compiled FFmpeg libraries statically and you want to use them to build your own shared library, you may need to ... and add the following option to your project LDFLAGS: -Wl,-Bsymbolic

  7. make -j5
  8. sudo make install
  9. sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
  10. sudo ldconfig

现在opencv代码应该可以很好地播放一个mp4文件了!

我试过但没用的方法

  1. cmake打开cv时,尝试添加WITH_UNICAP=ONWITH_V4L=ON。但根本不起作用。
  2. 尝试更改python opencv代码中的编解码器。但徒劳无功。

    cap = cv2.VideoCapture("MOV_0006.mp4")

    print cap.get(cv2.cv.CV_CAP_PROP_FOURCC)

    I tested this in two environment. In the first environment the opencv works, and in the other the opencv fails to play a video. But both printed out same codec 828601953.0.

    I tried to change their codec by cap.set(cv2.cv.CV_CAP_PROP_FOURCC, cv2.cv.CV_FOURCC(*'H264')) but didn't work at all.

  3. 尝试在我的工作环境中将opencv-2.4.8/3rdparty/lib/下的库更改为库。但都没能成功建造。

    I grep AVC: nal size and find the libraries contain this error message are opencv-2.4.8/3rdparty/lib/libavcodec.a etc. That's why I tried to replace them. But it turns out that this is a bad idea.

  4. 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

    Try to install some that thing and some this thing. But it was totally useless.

相关问题

我在网上搜索过很多类似的问题,但没有一个能解决!

下面是我认为和我一样的问题。

  • OpenCV/ffmpeg不播放我的mp4视频。- 来自opencv-users.nabble.com

  • 视频捕获在OpenCV 2.4.2中不起作用- answers.opencv.org

    This one mentions rebuilding ffmpeg! But the arguments weren't enough for me.

  • 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

相关问题 更多 >

    热门问题