Dom*_*ber 4 ffmpeg tee gstreamer mux
我正在尝试将视频流(来自我的网络摄像头)存储到MKV和FLV文件中.这意味着我必须在h264编码后拆分视频和音频管道,并使用不同的复用器复用每个路径.
这就是我想象它应该如何工作:
|->queue->matroskamux->filesink
v4l2src->videorate->videoscale->x264enc->tee-|
|->queue->flvmux->filesink
Run Code Online (Sandbox Code Playgroud)
这个假设是否正确?所有队列都在正确的位置吗?这样的GStreamer命令怎么样?我对"T恤"的概念特别麻烦.在命令中如何/在何处启动它们以及如何操纵不同的Tee-Path.我在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
Run Code Online (Sandbox Code Playgroud)
这是我试图让音频运行:
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
Run Code Online (Sandbox Code Playgroud)
这不起作用(命令执行但立即停止 - 没有错误消息).但我也无法确定放置音频编码的位置.在我尝试的解决方案中,我对每个Tee-Pipeline中的音频进行编码(对吗?).但我只想对音频进行一次编码,然后相应地在两个管道路径中对其进行复用.
这是另一个尝试:在音频编码后,我使用Tee分割pipleine并将其分配给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.
Run Code Online (Sandbox Code Playgroud)
但是有了这个,我收到以下错误消息:
could not link queue1 to flvmux
Run Code Online (Sandbox Code Playgroud)
谢谢!
mre*_*hub 18
正如您在管道中想要视频和音频一样,它会有点复杂(我认为有点照片可能会有所帮助):

为了使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.
Run Code Online (Sandbox Code Playgroud)
最后一个注意事项:我尝试使用lame而不是ffenc_aac因为我没有安装它,但它应该适用于它们.
编辑:完全重写了答案,包括音频支持,添加了管道图片(图片顺便说一句是使用了很棒的GraphViz工具制作的).