我有一台Logitech C920网络摄像头,可提供格式正确的h264视频,以及连接华硕Xonar外置USB声卡的麦克风。我可以读取它们并将它们的数据复制到一个文件中,如下所示:
gst-launch-1.0 -e \
mp4mux name=muxy ! filesink location=/tmp/out.mp4 \
alsasrc device='hw:Device,0' do-timestamp=true ! audio/x-raw,rate=48000 ! audioconvert ! queue ! lamemp3enc ! muxy.audio_0 \
v4l2src do-timestamp=true ! video/x-h264,framerate=30/1,height=720 ! h264parse ! queue ! muxy.video_0
...但是后来音频/视频的同步性很差。音频流始终以250ms的垃圾噪声开始,最终的mp4视频为250ms(7帧或8帧,30fps)不同步。
似乎源同时启动,但声卡每次都会插入250ms的初始化垃圾。或者,相机启动时间要长250毫秒,但报告错误的流标志启动。或者,由于某种原因,我的设备中的时钟可能不同步。我不知道如何找出这些(和其他)潜在根本原因之间的区别。
不管是什么原因,我想至少修补一下症状。我一直在尝试在gstreamer管道中执行以下任何操作,其中任何一个都能满足我的要求:
我显然做错了。什么都行不通。无论如何,我总是最终在音频前面运行250ms / 7帧的视频。添加队列元素据报修复了同步问题,因为mediainfo现在报告音频和视频的持续时间值彼此相差20ms,这是可以接受的。但这并不是最终视频的实际效果。拍拍我的手,噪音到了很晚。
这可以在后处理中修复,但为什么不直接从gst管道中避免麻烦并使其正确?我完全没有技巧,只是准备回头修复每个视频的同步手动。那里有什么想法吗?
感谢您提供任何帮助,提示和建议。