在GStreamer中混合使用时,视频比音频快得多

时间:2019-05-27 17:01:19

标签: command-line gstreamer video-capture audio-recording muxer

我正在尝试学习记录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混合器强加它?

1 个答案:

答案 0 :(得分:1)

  

gst-launch-1.0 ximagesrc xid = $ XID! video / x-raw,framerate = 30/1!排队!   视频转换!视频率!排队! x264enc!排队! avimux名称= mux!   排队! filesink location = out.avi pulsesrc device = $ DEV!排队!   音频转换!排队! lamemp3enc比特率= 192!排队!多路复用器。

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

  

如果您对我的用法进行更正,我也将不胜感激。排队!   在哪里需要?在当前设置中,我几乎永远不会收到警告   样品被丢弃。

队列只是缓冲区,它们需要在一个元素较慢而一个元素较快的地方使用,因此例如,视频生成(ximagesrc)与x264enc(软件编码)相比要快得多,因此您需要添加一个队列在它们之间,以便不丢失缓冲区。

  

gst-launch-1.0 ximagesrc! video / x-raw,framerate = 30/1!排队!   视频转换!排队! x264enc key-int-max = 5!排队! mp4mux   名称=多路复用保留字节每秒= 100   reserved-max-duration = 20184000000000   reserved-moov-update-period = 100000000!排队!文件库   location = out.mp4 audiotestsrc!排队!音频转换!排队!   lamemp3enc比特率= 192!排队!多路复用器。

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