我正在尝试使用 ffmpeg D3D11VA 帧 @60 fps 的形式使用桌面复制 api 和 on-gpu D3D11 纹理捕获我的 windows10 桌面。 此处给出所需命令。最重要的是,我还试图拦截我的麦克风音频。为此,我正在使用这个命令,
ffmpeg -init_hw_device d3d11va -filter_complex ddagrab=framerate=60 -f dshow -i audio="Microphone (High Definition Audio Device)" -c:v h264_nvenc -rc vbr -cq 24 -qmin 24 -qmax 24 -profile:v main -b:v 0K output.mp4
在我观看 output.mp4 时桌面捕获过程后,我面临音频延迟。更准确地说,我的麦克风音频是在 28/29 视频帧之后出现的。 IE。 (28/60)*1000 = 466 毫秒音频延迟。
我尝试捕捉@30fps 但没有改善。现在我得到 14 帧延迟,即。 (14/30)*1000 = 466 毫秒音频延迟。
经过一些研究,我开始了解关键帧间隔。默认情况下,h264_nvenc 使用 200 秒的关键帧间隔。所以我尝试使用 h264_nvenc 编码器的 -g 选项来降低它。这里也没有改善。
一个可能的解决方案是使用 -itsoffset 选项延迟我的视频。这些堆栈溢出和超级用户解决方案仅适用于预先录制的视频,
在ffmpeg中,如何在不转换音频的情况下仅延迟.mp4视频的音频?
但我在旅途中(即同时)进行捕获和编码。
我是视频编辑和ffmpeg的新手。