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