Python OpenCV视频格式在浏览器中播放

Python OpenCV视频格式在浏览器中播放,python,python-2.7,opencv,opencv3.0,Python,Python 2.7,Opencv,Opencv3.0,我试图从一系列图像创建一个视频并在浏览器中显示,但出于某种奇怪的原因,无论我使用何种编解码器或文件格式,我都会出现以下错误: 找不到支持格式和mime类型的视频 这是我的密码: ready_images = [] import cv2 for img in videos['Images']: image = cv2.imread(img.fileName) ready_images.append(image) fourcc = cv2.VideoWriter_fourcc(*

我试图从一系列图像创建一个视频并在浏览器中显示,但出于某种奇怪的原因,无论我使用何种编解码器或文件格式,我都会出现以下错误:

找不到支持格式和mime类型的视频

这是我的密码:

ready_images = []
import cv2

for img in videos['Images']:
    image = cv2.imread(img.fileName)
    ready_images.append(image)

fourcc = cv2.VideoWriter_fourcc(*'MP4V')

video_name = videos['Images'][0].gifLocationPath + "//" + videos['Name']
frame = cv2.imread(videos['Images'][0].fileName)
height, width, layers = frame.shape

video_name = video_name[:-4]+".mp4"
video = cv2.VideoWriter(video_name, fourcc, 20.0, (width, height))

for image in ready_images:
    video.write(image)

cv2.destroyAllWindows()
video.release()
有趣的是,在Firefox或Chrome中,视频不工作,但在Edge中。。。它们确实有效

我不想使用FFMPEG,我更愿意使用OpenCV

如果你们当中有人知道我应该使用什么格式的视频(我知道网络格式是webm、ogg、mp4)或编解码器,请告诉我


谢谢。

大多数浏览器不支持MP4V或MPEG-4第2部分,您可能想试试H.264(MPEG-4第10部分)

为此,请更改:

fourcc = cv2.VideoWriter_fourcc(*'MP4V')

如果您使用的是Python 3,请改用以下十六进制代码(使用四字节表示法时似乎存在错误):

运行脚本,您可能会收到以下错误消息:

未能加载OpenH264库:OpenH264-1.6.0-win32msvc.dll 请检查环境和/或下载库:

您需要按照消息所说的做,从github下载所需的库,并将其放置在您的路径可以访问的地方


使用H.264压缩,您还将获得一个更小的文件,这对Web更有利。

我知道这个问题很老,但对于所有正在为Web浏览器寻找兼容编解码器+容器的人来说: VP8或VP80是兼容的编码器

cv2.VideoWriter_fourcc('V','P','8','0')
我将它与.webM一起用作容器

Mozilla Firefox、[7][8]Opera、[9][10]和Google Chrome[11]在2010年Google I/O大会上宣布了对原生WebM的支持

它工作起来很有魅力,性能也很好尽管如此 由于某些原因,我在创建videoWriter对象时出现了以下错误:

OpenCV: FFMPEG: tag 0x30385056/'VP80' is not supported with codec id 139 and format 'webm / WebM'

获取
.webm
后缀音频文件

fourcc = cv2.VideoWriter_fourcc(*'vp80')
video_writer = cv2.VideoWriter('file.webm', fourcc, 20, (640, 480))
在html中:

<body>
<video width="320" height="240" controls>
    <source src="file.webm" type="video/webm">
</video>
</body>


它在centos7和Windows10上工作。

我通过
fourcc=-1
打印所有可用的mp4编解码器

然后我检查对我有用的编解码器。我看到那里有
avc1
。 因此,我编写的代码如下:

fourcc = cv2.VideoWriter_fourcc(*'avc1')

当打印代码时,您还可以看到它们是小写的。

您的解决方案会告诉我以下消息:
OpenCV:FFMPEG:tag 0x34363248/'H264'不受codec id 27和格式“mp4/mp4”(MPEG-4第14部分)的支持'OpenCV:FFMPEG:fallback to use tag 0x31637661/'avc1'找不到codec id 27:encoder not found的编码器
我试图安装所有依赖项,但它仍然像这样工作。你也有这个问题吗?或者这只是在linux中?如果我设置
fourcc=-1
我会得到mp4的所有编解码器,但没有一个是h264,也没有一个是x264。甚至在安装了图书馆之后。这是由于软件包配置错误导致的一些问题。还有另一个不是H264的web浏览器支持的编解码器?您安装了x264包吗?我发现如果我以
pip install opencv python
的形式安装opecv,那么x264就不支持编码,因为它是在GPL许可下安装的。升级FFmpeg不会有帮助,因为opencv python附带了自己的FFmpeg。只要找到opencv安装FFmpeg的位置并替换或删除它,确保FFmpeg在您的路径中是可访问的。出现这样的错误很奇怪,但无论如何它都可以工作。感谢您的回答:)不幸的是,vp80在创建视频时速度非常慢。2k帧需要2分钟来构建,默认xvid编码不到1秒。是的,这确实是一个需要考虑的重要问题!它需要更多的处理能力,但同时也具有一些优点,比如文件大小通常较小,而且是免版税的(开源)。我要说的是,选择并不是微不足道的,根据具体情况,两者都可能是好的。
<body>
<video width="320" height="240" controls>
    <source src="file.webm" type="video/webm">
</video>
</body>
fourcc = cv2.VideoWriter_fourcc(*'avc1')