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

时间:2018-03-28 09:29:00

标签: 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(*'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)或我应该使用的编解码器,请告诉我。

感谢。

4 个答案:

答案 0 :(得分:3)

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

为此,请更改:

fourcc = cv2.VideoWriter_fourcc(*'MP4V')

fourcc = cv2.VideoWriter_fourcc(*'H264')

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

fourcc = 0x00000021

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

  

无法加载OpenH264库:openh264-1.6.0-win32msvc.dll           请检查环境和/或下载库:https://github.com/cisco/openh264/releases

您需要按照消息的说明进行操作,并从github下载所需的库并将其放在PATH可访问的位置。

使用H.264压缩,您还可以获得更小的文件,这对Web更好。

答案 1 :(得分:1)

获取.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上使用。

答案 2 :(得分:0)

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

cv2.VideoWriter_fourcc('V','P','8','0')

我将它与.webM用作容器。

  

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

https://en.wikipedia.org/wiki/WebM

它像魅力一样运转,并且表现出色,尽管 由于某些原因,在创建videoWriter对象时出现此错误:

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

答案 3 :(得分:0)

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

之后,我检查对我有用的编解码器。我在那儿看到avc1。 所以我写这样的代码:

fourcc = cv2.VideoWriter_fourcc(*'avc1')

打印代码时,您还会看到它们是小写字母。