GStreamer Tee(多路复用器)

2024-03-20

我正在尝试将视频流(来自我的网络摄像头)存储到 MKV 和 FLV 文件中。这意味着我必须在 h264 编码后分割视频和音频管道,并使用不同的复用器复用每个路径。

这就是我想象的它应该如何工作:

                                             |->queue->matroskamux->filesink
v4l2src->videorate->videoscale->x264enc->tee-|
                                             |->queue->flvmux->filesink

这个假设正确吗?所有的队列都在正确的地方吗?像这样的 GStreamer 命令会是什么样子?我对“Tee”这个概念尤其感到困扰。如何/在哪里在命令中启动它们以及如何操作不同的 Tee 路径。我在 GStreamer 文档中查找了“Tee”,但在应用它们时仍然遇到问题。

提前致谢!

编辑:好的,感谢 mreithub 我让它可以用于视频。该命令目前如下所示:

gst-launch-0.10 -v -m v4l2src ! videorate ! videoscale ! ffmpegcolorspace ! x264enc ! tee name=muxtee ! queue2 ! matroskamux name=mkvmux ! filesink location=file1.mkv muxtee. ! queue ! flvmux name=flvmux ! filesink location=file1.flv

这是我尝试让音频运行的尝试:

gst-launch-0.10 -v -m v4l2src ! videorate ! videoscale ! ffmpegcolorspace ! x264enc ! tee name=muxtee ! queue2 ! matroskamux name=mkvmux pulsesrc ! ffenc_aac ! filesink location=file1.mkv muxtee. ! queue ! flvmux name=flvmux pulsesrc ! ffenc_aac ! filesink location=file1.flv

这不起作用(命令执行但立即停止 - 没有错误消息)。但我也无法确定放置音频编码的位置。在我尝试的解决方案中,我对每个 Tee-Pipeline 中的音频进行编码(对吗?)。但我只想对音频进行一次编码,然后将其相应地混合到两个管道路径中。

这是另一个尝试:在音频编码之后,我使用 Tee 分割管道并将其分配给 mkvmuxer 和 flvmuxer:

gst-launch-0.10 -v -m v4l2src ! videorate ! videoscale ! ffmpegcolorspace ! x264enc ! tee name=muxtee ! queue2 ! matroskamux name=mkvmux ! filesink location=file1.mkv muxtee. ! queue ! flvmux name=flvmux ! filesink location=file1.flv pulsesrc ! ffenc_aac ! tee name=t2 ! queue ! mkvmux. t2. ! queue ! flvmux.

但对于这个,我收到以下错误消息:

could not link queue1 to flvmux

Thanks!


As you want video and audio in your pipeline, it is going to be a little complicated (I thought a little pic might help): GraphViz diagram showing the resulting pipeline

为了使 gst-launch 命令尽可能清晰,我将每个线性管道片段放入一个命令行中(第一行中的红色连接,然后是蓝色、绿色和黄色连接,最后是黑色的排队内容)上图):

gst-launch-0.10 v4l2src ! videorate ! videoscale ! x264enc ! tee name=videoTee \
    pulsesrc ! ffenc_aac ! tee name=audioTee \
    flvmux name=flvMux ! filesink location=/tmp/foo.flv \
    matroskamux name=mkvMux ! filesink location=/tmp/foo.mkv \
    audioTee. ! queue ! flvMux. \
    audioTee. ! queue ! mkvMux. \
    videoTee. ! queue ! flvMux. \
    videoTee. ! queue ! mkvMux.

最后一点:我尝试使用lame代替ffenc_aac因为我没有安装它,但它应该可以与它们一起使用。

Edit:完全重写了答案,包括音频支持,添加了管道图片(顺便说一句,该图片是使用很棒的 GraphViz 工具制作的)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GStreamer Tee(多路复用器) 的相关文章

  • 将网络摄像头从浏览器流式传输到 RTMP 服务器

    我正在尝试将一些内容从浏览器的网络摄像头实现流式传输到随机 RTMP 服务器 我让它工作到每 2 秒将 WEBM 我相信是 VP8 编码的电影片段发送到我的服务器的部分 但棘手的部分是从该部分将其发送到 RTMP 服务器 对 FFMPEG
  • FFmpeg - 找不到 ExecuteBinaryResponseHandler - Android/Java

    我正在尝试制作一个用于反应原生的模块 它将把视频变成 gif 我对 android studios java 几乎没有经验 但我很想了解更多 我在用这个图书馆 https github com WritingMinds ffmpeg and
  • 来自 http 直播 m3u8 文件的 FFMPEG mp4? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何从 http 直播 m3u8 文件中提取 mp4 我尝试了下面这个命令 ffmpeg i input file f rawvideo
  • GAE Golang Gorilla mux - 404 页面未找到

    我在 GAE 中使用 gorilla mux 时遇到一些问题 当我尝试时 我发现 404 页面未找到 未调用 rootHandler 函数 未生成任何痕迹 以下是我的代码的一部分 有什么想法吗 提前考虑 func init r mux Ne
  • 将ffmpeg安装到虚拟环境中

    我正在尝试安装ffmpeg以便在 OpenAI 上使用它来录制视频 我已经使用它安装了brew install ffmpeg但不知怎的 当我编译我的代码时 我得到了同样的错误 就像我的包无法识别一样virtualenv我工作的地方 Pyth
  • 我可以从带时间戳的图像创建 VFR 视频吗?

    首先 我对图像制作视频的经验几乎为零 我拥有的是一组带有 BMP 时间戳的图像 我想从中生成视频 由于时间戳的间隔不相等 我不能简单地使用从图像创建恒定帧速率视频的软件 一个可能的解决方案是在固定的时间间隔创建人造图像 但如果我无法制作 V
  • 列出可用于 gstreamer 1.0 中 ksvideosrc 视频捕获的设备名称

    我正在尝试使用 c 中的 gstreamer 1 0 查询 Windows 上可用视频捕获设备 网络摄像头 的列表 我使用 ksvideosrc 作为源 我能够捕获视频输入 但我无法查询可用设备 及其上限 的列表 在 gstreamer 0
  • 为 iOS6.0 ARMv7 处理器构建 FFMPEG 库

    WARNING 我刚刚被另一位用户告知 在 iOS 上使用 FFMPEG 存在一些法律问题 请在此处留下链接http multinc com 2009 08 24 compatibility Between the iphone app s
  • 在 FFmpeg 中使用 -filter_complex amerge 时混合流

    我目前遇到 ffmpeg 及其过滤器之一的问题 我正在尝试将视频的 2 个音频流合并为一个 为此我尝试了这个命令 ffmpeg i home maniaplanet Videos ManiaPlanet 2014 08 21 20 09 1
  • 在 R 中导入 png 文件并转换为动画(.mp4)

    我正在尝试用 R 中的几个 png 文件创建一个简短的动画 我尝试了 packagemagick但只有当我将它们保存为 gif 时它才有效 当我尝试另存为 mp4 时 它将生成一个 mp4 文件 但一旦打开它 只会显示第一张图像 我的代码是
  • C# 从视频文件的一部分中提取帧

    使用 AForge ffmpeg 包装器 您可以使用 VideoFileReader 类从视频中提取帧并将其保存为位图 请参阅以下示例 提取 avi 文件的帧 https stackoverflow com questions 178256
  • 合并来自 ffmpeg 的两个视频

    我想使用 ffmpeg 将两个 mp4 视频组合成一个 mp4 视频 到目前为止我尝试过的是 ffmpeg i input1 mp4 i input2 mp4 output mp4 但是 每次我获取带有第一个输入的视频编解码器的视频而不是另
  • FFmpeg - H264 编码器找不到有效设备并且无法配置编码器

    我尝试使用 H264 编码器进行编码 但是当我这样做时 出现以下错误 h264 v4l2m2m 0x55682d2416c0 Could not find a valid device h264 v4l2m2m 0x55682d2416c0
  • 使用 libx264 为 Raspberry pi 编译 Xuggler 时的问题 #2

    我正在尝试编译Xuggler http www xuggle com xuggler 对于 Raspberry Pi 在 Debian 操作系统上运行 又名 Raspbian 我遵循了可用的 基本构建说明 here http www xug
  • 从编码视频文件中提取运动向量

    我正在尝试从编码的 mp4 文件中提取运动矢量数据 在之前的帖子中我发现 一个答案http www princeton edu jiasic cos435 motion vector c http www princeton edu jia
  • 使用 ffmpeg 提取帧的最快方法?

    您好 我需要使用 ffmpeg 从视频中提取帧 有没有比这更快的方法 ffmpeg i file mpg r 1 1 filename 03d jpg 如果 JPEG 编码步骤对性能要求太高 您可以始终将未压缩的帧存储为 BMP 图像 ff
  • VLC 和 ffmpeg 如何协同工作?

    我从源代码编译了VLC 它运行良好 当我执行 Vlc 时 vlc 运行 我还从源代码编译了 ffmpeg 它也运行良好 当我执行 ffmpeg i f toto flv mp3 vn acodec copy new toto mp3 时 会
  • H264 字节流到图像文件

    第一次来这里所以要温柔 我已经在给定的 H 264 字节流上工作了几个星期 一般注意事项 字节流不是来自文件 它是从外部源实时提供给我的 字节流使用 Android 的媒体编解码器进行编码 当将流写入扩展名为 H264的文件时 VLC能够正
  • 使用 Ffmpeg 编辑视频元数据

    我想更改视频元数据 原始视频信息 ffmpeg i video mp4 Metadata major brand mp42 minor version 0 compatible brands isomavc1mp42 creation ti
  • Python 子进程(ffmpeg)仅在我按 Ctrl-C 程序时启动?

    我正在尝试使用 Cygwin 和 Python 2 7 并行运行一些 ffmpeg 命令 这大概是我所拥有的 import subprocess processes set commands ffmpeg i input mp4 outpu

随机推荐