如何将我的桌面记录到“重播缓冲区”中,以便我可以重播最后 x 秒?

Ank*_*nko 3 ffmpeg video

今天,我了解到了一款名为Overwolf Replay HUD的仅适用于 Windows 的产品,它可以让用户按下一个键来在他们的屏幕上重播最近 20 秒发生的事情。它适用于想要快速回顾忙碌时刻的玩或观看快节奏电子游戏的人。

我试图在 Linux 上复制这种行为。到目前为止,我认为我可以轻松地开始ffmpeg(使用-f x11grab)捕获到/tmp(内存映射)中的文件,然后使用sxhkd绑定键盘快捷键来启动mpv以播放该文件的最后 20 秒。

但是,录音的其余部分仍将被存储,而且我最终会耗尽 RAM。我怎么能只保留最后 20 秒?

Gya*_*yan 6

段复用器将工作。

第 1 步

ffmpeg -i input force_key_frames expr:gte(t,n_forced*4) -c:v libx264 -c:a aac -f segment -segment_time 4 -segment_wrap 6 -segment_list list.m3u8 -segment_list_size 6 seg%d.ts
Run Code Online (Sandbox Code Playgroud)

这将以 4 秒为一段保存录音。写入 6 个段后,下一个段将覆盖第一个文件。播放列表会相应更新。

第 2 步

ffmpeg -i list.m3u8 -c copy video.mp4
Run Code Online (Sandbox Code Playgroud)

或者

ffplay list.m3u8
Run Code Online (Sandbox Code Playgroud)

保存的镜头的持续时间是20 < duration < 24.