当前位置:  开发笔记 > 编程语言 > 正文

在Linux上使用FFmpeg从OpenCV 3编写x264

如何解决《在Linux上使用FFmpeg从OpenCV3编写x264》经验,为你挑选了2个好方法。

我在通过FFmpeg("'X','2','6','4'"FOURCC)用OpenCV 3编写h264视频时遇到问题.到目前为止,我已经看过所有相关帖子,但没有任何帮助.码:

cv::VideoWriter writer(output_path.string(),    CV_FOURCC('X','2','6','4'), 60, frame_size);

输出:

OpenCV:FFMPEG:标签0x34363258 /'X264'不支持编解码器ID 28和格式'mp4/MP4(MPEG-4 Part 14)'OpenCV:FFMPEG:回退使用标签0x00000021 /'!???'

生成的视频非常小(按字节)并且不可读.将four_cc设置为-1会导致来自FFmpeg的"未知标记",我没有像其他人建议的那样提示选择编解码器.

OpenCV 3文档指出:

具有MP4容器的FFMPEG后端本身使用其他值作为fourcc代码:请参阅ObjectType,因此您可能会收到OpenCV关于fourcc代码转换的警告消息.

他们引用的那个页面没有列出h264/x264,我不确定如何解释该语句,因为早期的SO帖子似乎都将X.2.6.4列为适当的代码.使用H.2.6.4实际上提供相同的输出.

有什么建议/解决方法吗?

PS ffmpeg是最新的Ubuntu维护者,它列出了它配置的 --enable-libx264

编辑:我试图使用mkv容器而不是mp4.关于标记不受支持的警告消失了,但生成的视频仍然无法读取.



1> Jameson..:

我认为你的发现是关键:

具有MP4容器的FFMPEG后端本身使用其他值作为fourcc代码:请参阅ObjectType,因此您可能会收到OpenCV关于fourcc代码转换的警告消息.

实现的mp4标记值用于ffmpeg确认,并且位于ff_mp4_obj_type[],in isom.c.OpenCV中的代码cap_ffmpeg_impl.hpp可能需要更新才能支持这一点.我捅了一两个小时,意识到这是非平凡的,并且保释.

一种解决方法是输出到.avi文件.有很多人在使用OpenCV和mp4时遇到问题,并被告知要使用.mov.avi.(这是一个.)

@Greg Kramida:设置isColor = false对我没有帮助:消息仍然存在,我的输出文件只变为~48个字节.根据文档,它是一个Windows标志 - 无论它在Linux上为我做什么,它都不好.

你确认你可以用ffmpeg生成x264吗?

在我在命令行上调用它时确认libx264的值为0x21:

ffmpeg -i x264-input.mp4 -vcodec libx264 -f mp4 x264-output.mp4

我决定0x21直接使用VideoWriter.open().这会生成一个有效且可解释的视频文件.

作为参考,我的软件是ffmpeg 3.0:

ffmpeg -version
ffmpeg version 3.0 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 4.9.2 (Debian 4.9.2-10)
configuration: --enable-libx264 --enable-gpl --prefix=/usr/local --enable-shared --cc=`gcc -fPIC` --enable-libfdk-aac --enable-libx265 --enable-nonfree --enable-libmp3lame
libavutil      55. 17.103 / 55. 17.103
libavcodec     57. 24.102 / 57. 24.102
libavformat    57. 25.100 / 57. 25.100
libavdevice    57.  0.101 / 57.  0.101
libavfilter     6. 31.100 /  6. 31.100
libswscale      4.  0.100 /  4.  0.100
libswresample   2.  0.101 /  2.  0.101
libpostproc    54.  0.100 / 54.  0.100

和OpenCV 3.1.0配置:

cmake \
    -D WITH_IPP=ON \
    -D INSTALL_CREATE_DISTRIB=ON \
    -D CMAKE_BUILD_TYPE=Release \
    -D CMAKE_INSTALL_PREFIX=/usr/local ..

x264是libx264-142:amd64Debian Jessie 的发行版.



2> Greg Kramida..:

该问题与显示的警告无关。我正在尝试编写单通道图像,而VideoWriter期望使用3通道彩色图像(默认值为isColor,VideoWriter的构造函数的第5个参数为“ true”)。解决方案是将isColor设置为false。

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有