gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 22:38:03 28 4
gpt4 key购买 nike

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

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

输出:

OpenCV: FFMPEG: tag 0x34363258/'X264' is not supported with codec id 28 and format 'mp4 / MP4 (MPEG-4 Part 14)' OpenCV: FFMPEG: fallback to use tag 0x00000021/'!???'

生成的视频非常小(按字节计算)且不可读。将four_cc设置为-1会导致FFmpeg出现“未知标签”,我没有得到任何提示选择其他人建议的编解码器。

OpenCV 3 文档指出:

FFMPEG backend with MP4 container natively uses other values as fourcc code: see ObjectType, so you may receive a warning message from OpenCV about fourcc code conversion.

他们引用的那个页面没有列出 h264/x264,我不确定如何解释该声明,因为 earlier SO posts似乎所有人都将 X.2.6.4 列为适当的代码。使用 H.2.6.4 实际上给出了相同的输出。

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

附: ffmpeg 是 Ubuntu 维护人员提供的最新版本,它列出了它是使用 --enable-libx264

配置的

编辑:我尝试使用 mkv 容器而不是 mp4。不支持标签的警告消失了,但生成的视频仍然无法阅读。

最佳答案

我认为您在这里的发现是关键:

FFMPEG backend with MP4 container natively uses other values as fourcc code: see ObjectType, so you may receive a warning message from OpenCV about fourcc code conversion.

ffmpeg 实现的 mp4 标签值证实了这一点,并且在 ff_mp4_obj_type[] 中,在 isom.c 中. OpenCV 的 cap_ffmpeg_impl.hpp 中的代码可能需要更新以支持这一点。我看了一两个小时,意识到这很重要,于是放弃了。

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

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

您是否确认可以使用 ffmpeg 自行生成 x264?

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

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

我决定直接使用 0x21VideoWriter.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 是 Debian Jessie 的 libx264-142:amd64 版本。

关于c++ - 在 Linux 上使用 FFmpeg 从 OpenCV 3 编写 x264,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34024041/

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