FFMPEG x11grab/pulse AV 捕获:非单调的 DTS

FFMPEG x11grab/pulse AV 捕获:非单调的 DTS

我尝试了很多方法试图解决这个问题,但我认为最好从我想要的开始,然后寻求帮助。我想捕捉一些模拟的游戏画面,通常分辨率为 256*240,所以我认为我也可以无损地捕捉画面,而无需重新缩放。我使用这个命令行:

ffmpeg -f x11grab -i :0.0 -f pulse -i alsa_output.pci-0000_08_00.3.analog-stereo.monitor -ac 2 -c:v libx264rgb -pix_fmt bgr0 -c:a copy -y /tmp/capture.mkv

(顺便说一下,我使用 /tmp 作为 ram 磁盘/tmpfs 分区,我不确定这是否会影响事情。)

但是,我总是遇到某种时间戳问题,并出现如下警告:

[matroska @ 0x55b042f269b0] Non-monotonous DTS in output stream 0:1;
previous: 144, current: 141; changing to 144. This may result in
incorrect timestamps in the output file.

生成的视频音频/视频不同步,播放时视频会随机冻结、加速,音频失真,播放过程中可能会完全停止。单独录制视频或音频可以正常工作,但当 ffmpeg 尝试同步它们时,问题似乎开始出现。

我尝试过论坛帖子中的各种选项,特别是在 StackExchange 网络上的选项,但唯一似乎朝着正确方向发展的选项是-async 1/-af aresample=async=1:min_hard_comp=0.100000:first_pts=0

ffmpeg -f x11grab -i :0.0 -f pulse -i alsa_output.pci-0000_08_00.3.analog-stereo.monitor \
    -ac 2 -c:v libx264rgb -pix_fmt bgr0 -c:a pcm_s16le \
    -af aresample=async=1:min_hard_comp=0.100000:first_pts=0 -y /tmp/capture.mkv

这不会打印任何与 DTS 相关的警告,但我在游戏过程中确实遇到了音频/视频冻结,并且生成的视频仍然不太好。我有点怀疑,但可能是我的硬件无法同时处理游戏模拟、录制和编码的开销。也许如果可以将 vcodec 和 acodec 都设置为“复制”,将其多路复用到 .nut(mkv 显然不喜欢原始视频),并以某种方式在后期重新同步视频和音频,我就可以确认是否是这种问题。

这个问题可能没有很好地组织起来,对此我深感抱歉,但我已经束手无策了。我认为最好自己发布一个问题,从我的目标开始,然后介绍一些我尝试过的方法。我想排除故障,再次尝试不同的建议,并评估我尝试做的事情是否真的可以用我的硬件实现。这可能有点过于乐观,因为如果提问者认为他们的问题在 5 小时内没有得到解决,并且没有人能够提供任何其他信息,那么大多数 stackexchange 问题似乎都会消失。

根据“neofetch”,这些是相关的规格:

CPU: AMD Ryzen 5 1600 (12) @ 3.200GHz
GPU: NVIDIA GeForce GTX 970
Memory: 2910MiB / 16017MiB

相关内容