我使用 VLC 媒体播放器 2.2.8 Weatherwax(修订版 2.2.7-14-g3cc1d8cba9),从我的 distrib repo(Arch Linux)安装。我的目的是创建一个命令,录制我的桌面视频,并通过微机输入音频。
经过一些研究,我使用了这个命令:
vlc screen://
:screen-fps=24
:screen-follow-mouse
:screen-mouse-image=cursor.png
:input-slave=alsa://hw:1,0
:sout="#transcode{vcodec=h264,venc=x264,vb=2048,acodec=mp3,scale=1.0,vfilter=croppadd{cropleft=0,croptop=0,cropright=0,cropbottom=0}}:duplicate{dst=std{mux=mp4,access=file,dst=out.mp4}}"
我用一段约 1 分钟的视频测试了它,它没有任何明显的问题。然后我录制了一段约 1 小时的视频,结果如下: 图片链接(图片)。
这些值是近似值。音频延迟开始于约 3 秒,结束于约 3 分钟。除延迟外,视频和音频均正常工作。
为什么会有音频延迟?是因为某种压缩,还是因为“微输入比屏幕视频捕获慢”之类的原因?
谢谢您的回答。
答案1
好的,我想我找到了解决方案。如果我错了,请纠正我。
解决方案
vlc screen://
:screen-fps=24
...
:sout="#transcode{...fps=24}...
解决方案是在 transcode 选项中指定与 :screen-fps 选项中相同的 fps。
完整命令(供参考):
vlc screen://
:screen-fps=24
:screen-follow-mouse
:screen-mouse-image=cursor.png
:input-slave=alsa://hw:1,0
:sout="#transcode{vcodec=h264,venc=x264,vb=2048,acodec=mp3,scale=1.0,vfilter=croppadd{cropleft=0,croptop=0,cropright=0,cropbottom=0},fps=24}:duplicate{dst=std{mux=mp4,access=file,dst=out.mp4}}"
细节
默认情况下,VLC 具有:
- 输入
500 000 µs
- 的输出
40 000 µs
。
您可以在 vlc 命令后在控制台中看到它: 图片链接(图片)。
- 该
:screen-fps=24
选项stream_out_transcode stream out: input interval 41666 (base 1)
为 VLC 提供了选项。 fps=24
in选项为 VLCtranscode
提供了stream_out_transcode stream out: output interval 41666 (base 1)
选项。
41666
如果我是对的,要从fps(或 Hz)获取24
,我们需要执行以下操作:
10^6 / 24 = 41666.66666... ~= 41666 µs
在我的原帖中,我没有fps=24
在transcode
选项中定义。因此,输出间隔的默认值为40 000
µs。
如果我认为我的视频很3600
长,我会执行以下操作:
3600 * (1-40000/41666) = 143.9447
秒。
它 > 2mn,并且与观察到的增量相对应。
正确选项的结果:图片链接(图片)。
评论
audio-sync
虽然选项里有参数transcode
,但是并没有达到我的预期,只有增加fps
参数才行。
参考
您可以在这里找到参考资料: