gpt4 book ai didi

c++ - OpenCV编码为H264

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:22:57 25 4
gpt4 key购买 nike

我想在 OpenCV 中将图像编码为 H264 视频。

作为我的图像跟踪软件的一部分,我在 OpenCV 3.4(64 位)和 Visual Studio 2017 C++ 中使用 VideoWriter。我使用 ffmpeg 进行手动编码,因为它与 OpenCV 一起提供,所以我认为这是最佳选择。我的 OpenCV 版本表明它是用 ffmpeg 编译的,我可以验证它加载了 opencv_ffmpeg340_64.dll。

解码 H264 (AVC1) 绝对没问题,包括在专门使用 ffmpeg API 时。但是编码 MJPG 或原始图像以外的任何内容都不起作用:VideoWriter.Open() 主要返回 false,在某些情况下,它只写入一个空的或小的 header ,但不会写入帧。我不仅尝试了 ffmpeg API,还尝试了任何可用的 API。将控制台/调试输出重定向到 VC 中的中间窗口不会提供来自 OpenCV 或 ffmpeg 的任何消息。

有许多关于使用 FFmpeg 的 OpenCV 早期版本的帖子,包括 (Cisco) OpenH264 库和使用它的困难。我尝试了很多选项,安装编解码器包,包括 H264、ffmpeg 静态版本、Cisco openH264 库、设置路径等,甚至尝试了低级 ffmpeg 库函数,例如 OpenCV 中公开的 cvCreateVideoWriter,并使用不同的视频容器(AVI、MPG、 MP4) 以及 fourcc 字符串。

我不敢相信在 2018 年,支持 FFmpeg 的伟大 OpenCV 无法编码除了神秘的 MJPG 或原始图像之外的任何东西。如果它使用 FFmpeg,肯定应该有一组重要的功能可用?

虽然我认为这应该可行,但我的下一个最佳选择是使用单独的 ffmpeg 库,这会讽刺地在我想象的解决方案中添加另一个 ffmpeg.dll。任何建议表示赞赏!

代码片段(使用任何视频编码API):

VideoWriter writer;
int codec = VideoWriter::fourcc('X', '2', '6', '4');
writer.open("test.avi", codec, 30, colorImage.size(), true);
writer.write(colorImage);
writer.release();

最佳答案

回答我自己的问题 - 虽然感谢您之前的建议 - 我现在已经设法创建帧并将帧写入 H264 视频,无需任何重新编译。这是我用过的:

  • 使用 OpenCV 3.4.1 版
  • 在与 exe 相同的文件夹中:opencv_ffmpeg341_64.dll(随 OpenCV 一起提供)
  • 在同一文件夹中:openh264-1.7.0-win64.dll(可从:https://github.com/cisco/openh264/releases 获得)
  • 使用 OpenCV VideoWriter 类,省略特定的编码 API
  • 容器:MP4
  • 编解码器 fourcc 字符串:“H264”

我格式化了我的机器(Windows 10 64 位),所以我不能排除任何潜在的编解码器冲突问题——我也没有对其他组合进行全面测试。由于这似乎是一个很常见的问题(有很多误解),我希望这对您有用。

关于c++ - OpenCV编码为H264,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48817441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com