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

Val*_*ali 5 python opencv python-2.7 opencv3.0

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

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

这是我的代码:

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()
Run Code Online (Sandbox Code Playgroud)

有趣的是,在Firefox或Chrome浏览器中,视频无法正常运行,但在Edge中却可以正常运行。

我不想使用FFMPEG,而是希望使其与OpenCV一起使用。

如果你们中有人知道我应使用哪种视频格式(我知道Web格式是webm,ogg,mp4)或编解码器,请告诉我。

谢谢。

Ism*_*sma 9

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

为此,请更改:

fourcc = cv2.VideoWriter_fourcc(*'MP4V')
Run Code Online (Sandbox Code Playgroud)

fourcc = cv2.VideoWriter_fourcc(*'H264')
Run Code Online (Sandbox Code Playgroud)

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

fourcc = 0x00000021
Run Code Online (Sandbox Code Playgroud)

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

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

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

使用 H.264 压缩,您还将获得更适合 Web 的较小文件。

  • 您的解决方案让我收到这条消息:`OpenCV: FFMPEG: tag 0x34363248/'H264' is not supported with codec id 27 and format 'mp4 / MP4 (MPEG-4 Part 14)' OpenCV: FFMPEG: fallback to use tag 0x31637661/ 'avc1' 找不到编解码器 ID 27 的编码器:找不到编码器` 我尝试安装所有依赖项,但它仍然像这样工作。你也有这个问题吗?或者这只是在linux中? (6认同)
  • 只需找到 opencv 安装 ffmpeg 的位置并替换它或删除它,并确保 ffmpeg 在您的路径中可访问。 (2认同)

JGa*_*ier 5

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

cv2.VideoWriter_fourcc('V','P','8','0')
Run Code Online (Sandbox Code Playgroud)

我将它与 .webM 一起用作容器。

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

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

尽管由于某种原因我在创建 videoWriter 对象时遇到了这个错误,但它的工作很有吸引力并且性能非常好

OpenCV: FFMPEG: tag 0x30385056/'VP80' is not supported with codec id 139 and format 'webm / WebM'
Run Code Online (Sandbox Code Playgroud)