在GStreamer中进行多路复用时,视频的速度比音频快得多 [英] Video is much faster than audio when muxed in GStreamer

查看:0
本文介绍了在GStreamer中进行多路复用时,视频的速度比音频快得多的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在努力学习录制X11 Windows的内容,以便为YouTube制作游戏截屏。这应该是一项相当微不足道的任务,但它已经花了整整一个晚上。现在我已经学习了一些关于多路传输和排队的知识(使用gst-launch),但问题仍然存在:当我将音频和视频多路传输到Avi中时,视频的播放速度比生成的文件中的音频快几倍。这意味着视频很快就会结束并静止,而音频在背景中继续喋喋不休。

这是导致问题的筛选器链:

gst-launch-1.0 ximagesrc xid=$XID ! video/x-raw,framerate=30/1 ! videoconvert ! 
    x264enc ! queue ! avimux name=mux ! queue ! filesink location=out.avi 
    pulsesrc device=$DEV ! queue ! audioconvert ! 
    lamemp3enc bitrate=192 ! queue ! mux.

但是,当我只有视频,并且它以完全正常的速度播放时,这个问题就消失了:

ximagesrc xid=0x0820000b ! video/x-raw,framerate=30/1 ! videoconvert ! 
    x264enc ! avimux ! filesink location=out.avi

如果您对! queue !的用法给我指正,我将不胜感激。哪里需要它?在目前的设置中,我几乎从未收到过样本被丢弃的警告。

更新:我更喜欢使用MP4多路复用器,但它产生的文件无法播放,缺少Moov ATOM。YouTube建议把它放在文件的开头,我能用MP4多工器强制这样做吗?

推荐答案

GST-Launch-1.0ximagesrc xid=$xid!视频/x-RAW,帧速率=30/1!排队! 视频转换!录下来!排队!X264enc!排队!航空复用器名称=复用器! 排队!文件链接位置=out.avi脉冲rc设备=$DEV!排队! 音响转换!排队!Lamemp3enc比特率=192!排队!MUX。

上述管道应以适当的速度播放音频视频。

如果您纠正我对!的用法,我也将不胜感激。排队!。 哪里需要它?在目前的设置中,我几乎从未收到过警告 样本已被丢弃。

队列只是缓冲区,需要在一个元素较慢、一个元素较快的地方使用,例如视频生成(Ximagesrc)比x264enc(软件编码)要快得多,所以您需要在它们之间添加一个队列,以免缓冲区被丢弃。

GST-Launch-1.0 ximagesrc!视频/x-RAW,帧速率=30/1!排队! 视频转换!排队!X264enc key-int-max=5!排队!MP4mux 名称=多路保留字节数/秒=100 预留最长持续时间=20184000000000 预留-moov-更新-周期=100000000!排队!文件链接 位置=out.mp4音频测试src!排队!音响转换!排队! Lamemp3enc比特率=192!排队!MUX。

上述管道将创建一个MP4文件mp4mux,但moov原子本身将位于末尾。还请注意,请确保根据需要更改mp4mux属性。

这篇关于在GStreamer中进行多路复用时,视频的速度比音频快得多的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆