Gstreamer 管道多个接收器到一个 src
Gstreamer pipeline multiple sink to one src
寻找有关如何在一个模块中混合两个输入方面使用命名元素的说明。例如在一个 mpegtsmux 模型中混合音频和视频
gst-launch filesrc location=surround.mp4 ! decodebin name=dmux ! queue ! audioconvert ! lamemp3enc dmux. ! queue ! x264enc ! mpegtsmux name=mux ! queue ! filesink location=out.ts
上面的管道给出了如下所示的插件互连
所以它显示音频没有连接到 mpegtsmus。
如何修改命令行以在 mpegtsmux 中进行音频和视频混合?
谢谢!
未 link 编辑,因为您的启动行没有这样做。请注意 lamemp3enc 元素如何不 link 下游。
将您的发布行更新为:
gst-launch filesrc location=surround.mp4 ! decodebin name=dmux ! queue ! audioconvert ! lamemp3enc ! mux. dmux. ! queue ! x264enc ! mpegtsmux name=mux ! queue ! filesink location=out.ts
唯一的变化是“!mux”。在 lamemp3enc 之后告诉它 link 到 mpegtsmux。
在更新内容时,请注意您使用的 gstreamer 0.10 已经过时且无人维护,请升级到 1.x 系列以获得最新的改进和错误修复。
我会尝试给出基本的想法,虽然我不是那么精通并且可能是完全错误的。
- 一个管道可以由多个子管道组成。如果某个元素 (bin) 不是以管道 (
!
) 结束,而是以另一个元素开始,那么它就是一个新的子管道:filesrc location=a.mp4 ! qtdemux name=demp4
demp4. ! something
- 一个命名的 bin(通常是一个 muxer),或者它的 pads 像
somedemux.audio_00
可以是一个源 and/or 其他子管道中的一个接收器:demp4. ! queue ! decodebin ! x264enc ! mux.
- 通常,子管道以命名的 bin/muxer 结尾,声明为:
mpegtsmux name=mux
或通过名称引用:mux.
末尾的点是引用的语法。
- 然后命名的 muxer 可以通过管道传输到另一个子管道中的接收器:
mux. ! filesink location=out.ts
- 如果您只使用来自源的唯一音频或视频流,则不必像
muxname.audio_00
那样指定 pad。 muxname.
是 "suitable audio/video pad from muxname
". 的快捷方式
例子
也就是说,我假设您的 mp4 文件既有音频又有视频。在这种情况下,您需要先将其解复用为 2 个流,解码、重新编码,然后将它们复用回来。
确实,您的音频未连接到 mpegtsmux
。
如果你真的需要解码流,那是我会做的。不过,这对我不起作用:
gst-launch-1.0 filesrc location=surround.mp4 ! \
qtdemux name=demp4 \
demp4. ! queue ! decodebin ! audioconvert ! lamemp3enc ! mpegtsmux name=mux \
demp4. ! queue ! decodebin ! x264enc ! mux. \
mux. ! filesink location=out.ts
或者让我们使用 decodebin
神奇地解码两个流:
gst-launch-1.0 filesrc location=surround.mp4 ! \
decodebin name=demp4 \
demp4. ! queue ! audioconvert ! lamemp3enc ! mpegtsmux name=mux \
demp4. ! queue ! x264enc ! mux. \
mux. ! filesink location=out.ts
寻找有关如何在一个模块中混合两个输入方面使用命名元素的说明。例如在一个 mpegtsmux 模型中混合音频和视频
gst-launch filesrc location=surround.mp4 ! decodebin name=dmux ! queue ! audioconvert ! lamemp3enc dmux. ! queue ! x264enc ! mpegtsmux name=mux ! queue ! filesink location=out.ts
上面的管道给出了如下所示的插件互连
所以它显示音频没有连接到 mpegtsmus。
如何修改命令行以在 mpegtsmux 中进行音频和视频混合?
谢谢!
未 link 编辑,因为您的启动行没有这样做。请注意 lamemp3enc 元素如何不 link 下游。
将您的发布行更新为:
gst-launch filesrc location=surround.mp4 ! decodebin name=dmux ! queue ! audioconvert ! lamemp3enc ! mux. dmux. ! queue ! x264enc ! mpegtsmux name=mux ! queue ! filesink location=out.ts
唯一的变化是“!mux”。在 lamemp3enc 之后告诉它 link 到 mpegtsmux。
在更新内容时,请注意您使用的 gstreamer 0.10 已经过时且无人维护,请升级到 1.x 系列以获得最新的改进和错误修复。
我会尝试给出基本的想法,虽然我不是那么精通并且可能是完全错误的。
- 一个管道可以由多个子管道组成。如果某个元素 (bin) 不是以管道 (
!
) 结束,而是以另一个元素开始,那么它就是一个新的子管道:filesrc location=a.mp4 ! qtdemux name=demp4
demp4. ! something
- 一个命名的 bin(通常是一个 muxer),或者它的 pads 像
somedemux.audio_00
可以是一个源 and/or 其他子管道中的一个接收器:demp4. ! queue ! decodebin ! x264enc ! mux.
- 通常,子管道以命名的 bin/muxer 结尾,声明为:
mpegtsmux name=mux
或通过名称引用:mux.
末尾的点是引用的语法。 - 然后命名的 muxer 可以通过管道传输到另一个子管道中的接收器:
mux. ! filesink location=out.ts
- 如果您只使用来自源的唯一音频或视频流,则不必像
muxname.audio_00
那样指定 pad。muxname.
是 "suitable audio/video pad frommuxname
". 的快捷方式
例子
也就是说,我假设您的 mp4 文件既有音频又有视频。在这种情况下,您需要先将其解复用为 2 个流,解码、重新编码,然后将它们复用回来。
确实,您的音频未连接到 mpegtsmux
。
如果你真的需要解码流,那是我会做的。不过,这对我不起作用:
gst-launch-1.0 filesrc location=surround.mp4 ! \
qtdemux name=demp4 \
demp4. ! queue ! decodebin ! audioconvert ! lamemp3enc ! mpegtsmux name=mux \
demp4. ! queue ! decodebin ! x264enc ! mux. \
mux. ! filesink location=out.ts
或者让我们使用 decodebin
神奇地解码两个流:
gst-launch-1.0 filesrc location=surround.mp4 ! \
decodebin name=demp4 \
demp4. ! queue ! audioconvert ! lamemp3enc ! mpegtsmux name=mux \
demp4. ! queue ! x264enc ! mux. \
mux. ! filesink location=out.ts