小编Yos*_*777的帖子

OpenCV编码为H264

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

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

解码H264(AVC1)绝对不错,包括特别是使用ffmpeg API时。但是对MJPG或原始图像以外的任何其他内容进行编码均无效:VideoWriter.Open()通常返回false,在某些情况下,它仅写入空或较小的标头,而不会写入帧。我不仅尝试了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();
Run Code Online (Sandbox Code Playgroud)

c++ video opencv ffmpeg video-encoding

6
推荐指数
1
解决办法
7406
查看次数

标签 统计

c++ ×1

ffmpeg ×1

opencv ×1

video ×1

video-encoding ×1