使用 H264 编解码器将视频保存在 opencv 中

Posted

技术标签:

【中文标题】使用 H264 编解码器将视频保存在 opencv 中【英文标题】:Save video in opencv with H264 codec 【发布时间】:2022-01-11 18:31:02 【问题描述】:

我正在使用opencv-python==4.5.1.48python3.9 码头工人。我想以 h264 格式保存视频。这是我保存视频的功能:

import cv2

def save_video(frames):
    fps = 30
    video_path = '/home/save_test.mp4'
    fourcc = cv2.VideoWriter_fourcc(*'h264')
    video_writer = cv2.VideoWriter(video_path, fourcc, fps, (112, 112))

    for frame in frames:
        video_writer.write(frame)

    video_writer.release()

当我使用 .mp4 格式保存视频时,出现以下错误:

OpenCV:FFMPEG:标签 0x34363268/'h264' 不支持编解码器 ID 27 和格式 'mp4 / MP4 (MPEG-4 Part 14)' OpenCV: FFMPEG: fallback to 使用标签 0x31637661/'avc1' 找不到编解码器 id 27 的编码器: 未找到编码器

我搜索并阅读了一些解决方案,但没有一个能解决我的问题。

更新

我还安装了libx264-dev,这是在这个post 中推荐的,但是没有用。

【问题讨论】:

使用avc1fourcc -- opencv 可能使用它自己的ffmpeg,所以你在系统中安装什么并不重要 谢谢。我将 h264 更改为 avc1 并收到此错误:Could not find encoder for codec id 27: Encoder not found 因为没有帮助,我猜你不能使用 H.264 github.com/opencv/opencv-python/issues/207 或者你必须自己构建 OpenCV,或者找到一个无视 GPL 的包——使用不同的编解码器. MJPG 始终有效,因为它内置于 OpenCV 中。或者mp4v,那是H.264的前身。 【参考方案1】:

最后,我找到了解决方案。我可以在ubuntu:20.04 docker 中解决我的问题。您应该注意的重要一点是,您应该通过 apt-get install python3-opencv 安装 OpenCV,而不是使用 pip

【讨论】:

尝试在 ubuntu:20.04 上安装 python3-opencv 但没有运气。你能分享你的dockerfile吗? OpenCV:FFMPEG:标签 0x34363268/'h264' 不支持编解码器 id 27 和格式'mp4 / MP4(MPEG-4 第 14 部分)' OpenCV:FFMPEG:后备使用标签 0x31637661/'avc1' [错误:0@1.556 ] global /io/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp (2767) open 找不到 codec_id=27 的编码器,错误:找不到编码器 [ERROR:0@1.556] global /io/opencv/modules/videoio /src/cap_ffmpeg_impl.hpp (2839) 打开 VIDEOIO/FFMPEG: 无法初始化 VideoWriter 我还安装了这些 ubuntu 软件包: RUN apt-get update && apt-get install -y \ wget \ build-essential \ pkg-config \ cmake \ ninja-build \ libgl1-mesa-glx \ libleptonica-dev\ffmpeg\zlib1g-dev\libncurses5-dev\libgdbm-dev\libnss3-dev\libssl-dev\libreadline-dev\libffi-dev\python3.8\python3-pip\python3-opencv@y2kbug 我仍然收到相同的错误消息。你可以看看我的 dockerfile 吗? pastebin.com/RvCK0YBR(顺便说一句为什么标记用户名不起作用) @y2kbug 好的。我会用我的 python 示例代码检查你的 DockerFile 并将结果通知给你。 @y2kbug 我测试它。当我使用 pip 安装 OpenCV 时,它可以工作。在您的 dockerfile 中,您使用 pip 安装 OpenCV。

以上是关于使用 H264 编解码器将视频保存在 opencv 中的主要内容,如果未能解决你的问题,请参考以下文章

使用 FFMpeg 将 FLV 流式传输到 RTMP,使用 H264 编解码器和 C++ API 到 flv.js

ffmpeg用于将视频编码为H264编解码器格式

在OpenCV中使用H.264压缩编写视频文件

iOS8系统H264视频硬件编解码说明

iOS8系统H264视频硬件编解码说明

视频编解码(H264)WebRTC基础