像 ShadowPlay 一样在 ffmpeg 中限制音频缓冲区的大小

像 ShadowPlay 一样在 ffmpeg 中限制音频缓冲区的大小

我正在尝试设置一个类似于 Nvidia ShadowPlay 的音频捕获系统,其中有一个后台程序,它不断保存最后 X 分钟的镜头(或在这种情况下为音频)的缓冲区,并在命令下将其永久保存到单独的文件中。到目前为止,我想到的是:

ffmpeg -f dshow -i audio="My input device" buffer.wav

录制,然后

ffmpeg.exe -sseof -30 -i buffer.wav -c copy capture.wav

复制缓冲区的最后 30 秒。但是,这会带来缓冲区文件在几分钟内达到数百兆字节的问题。我希望能够调整录音的最大长度,这样一旦超过此限制,它就会开始在文件开头截断。换句话说,如果文件的限制为 5 分钟,并且已经录制了 5 分 10 秒,则应删除录制的前 10 秒,从而确保文件时长不超过 5 分钟。

答案1

您可以使用段复用器。

ffmpeg -f dshow -i audio="My input device" -af aresample=async=1 -f segment -segment_time 30 -segment_wrap 2 buffer%d.wav

这将首先创建buffer0.wav。一旦有 30 秒,它将写入buffer1.wav直到该文件有 30 秒。

一旦缓冲区 1 填满,它将再次将接下来的 30 秒数据写入缓冲区 0。因此,在录制的第一个 30 秒之后的任何时间,您将拥有至少 30 秒、最多 60 秒的数据。

只需按照时间升序对文件进行排序Last modified,然后使用其连接数据中的最后 30 秒的数据。

相关内容