GStreamer 与 FFmpeg
Posted
技术标签:
【中文标题】GStreamer 与 FFmpeg【英文标题】:GStreamer vs FFmpeg 【发布时间】:2012-02-02 04:26:58 【问题描述】:我尝试使用 OpenCV 框架录制视频,并希望将其与一些额外的数据流一起保存到 Matroska(mkv) 容器中。
首先我认为使用 FFmpeg 就是这样。 但是在查看 OpenCV 源代码并在网上搜索时,我发现了 GStreamer。
因为 GStreamer 中的文档比 FFmpeg 文档要好得多,所以我更喜欢使用这个框架。
据我了解,GStreamer 主要用于流式传输,但也可以对视频数据进行 rncode 和复用。
使用 GStreamer 代替 FFmpeg 有什么缺点吗?
提前致谢 霍斯特
【问题讨论】:
【参考方案1】:我尝试使用 OpenCV 框架录制视频并希望将其保存到 Matroska(mkv) 中
我不认为 OpenCV 可以将视频存储为 MKV,
连同一些额外的数据流。
OpenCV 不提供此操作的功能。
简单的解决方法是简单地调用 ffmpeg 或 gstreamer 的命令行应用程序为您进行转换。
GStreamer 确实有一个不错的文档,它也可以完成这项工作。明显的缺点是,如果您知道如何使用 FFmpeg,则更改为 GStreamer 将需要一些额外的时间来了解它的工作原理,因为两者都有完全不同的 API:GStreamer 架构的灵感来自 DirectShow 和 Quicktime。
优势是 GStreamer(除了跨平台之外)被用于多个大型项目,了解 GStreamer 肯定会为您的编程库增加一项很棒的技能强>。
【讨论】:
OpenCV 将其数据输出存储在代理的概念和模式上。您可以使用 Ffmpeg 代理、Gstreamer 代理,甚至是 图像代理,这是一种适用于(可能包括其他)JPEG 图像的零代理。看看this paste 的the cvCreateVideoWriter function。例如,我用来配置一个普通的 OpenCV,没有大量的代理配置,只处理图像并在外部调用 Ffmpeg 进行视频复用和解复用。【参考方案2】:我认为使用 gstreamer 没有任何缺点。事实上,我认为 gstreamer 是一个框架,而不仅仅是一个工具或单一用途的库。您可以使用它来开发自己的插件,这些插件可以无缝地挂接到 gstreamer 管道中。
【讨论】:
【参考方案3】:您可以通过 ffmpeg 或 gstreamer 后端使用 OpenCv VideoWriter 并进行比较。例如(您可以适应您的平台插件和视频模式):
# Using ffmpeg backend
cv::VideoWriter ffmpeg_h264_writer ("test-ffmpeg-h264-writer.mkv",
cv::CAP_FFMPEG,
cv::VideoWriter::fourcc ('X', '2', '6', '4'),
fps,
cv::Size (width, height));
# Using gstreamer backend:
cv::VideoWriter gst_omxh264_writer ("appsrc ! queue ! videoconvert ! video/x-raw,format=I420 ! queue ! omxh264enc ! video/x-h264,format=byte-stream ! matroskamux ! filesink location=test-gstreamer-omxh264-writer.mkv ",
cv::CAP_GSTREAMER,
0,
fps,
cv::Size (width, height));
其中宽度和高度是整数值,fps 是浮点值。
【讨论】:
以上是关于GStreamer 与 FFmpeg的主要内容,如果未能解决你的问题,请参考以下文章