解决方案

解决方案

我使用 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=24in选项为 VLCtranscode提供了stream_out_transcode stream out: output interval 41666 (base 1)选项。

41666如果我是对的,要从fps(或 Hz)获取24,我们需要执行以下操作: 10^6 / 24 = 41666.66666... ~= 41666 µs

在我的原帖中,我没有fps=24transcode选项中定义。因此,输出间隔的默认值为40 000µs。

如果我认为我的视频很3600长,我会执行以下操作: 3600 * (1-40000/41666) = 143.9447秒。

它 > 2mn,并且与观察到的增量相对应。

正确选项的结果:图片链接(图片)。


评论

audio-sync虽然选项里有参数transcode,但是并没有达到我的预期,只有增加fps参数才行。


参考

您可以在这里找到参考资料:

相关内容