Você pode usar o muxer de segmento.
ffmpeg -f dshow -i audio="My input device" -af aresample=async=1 -f segment -segment_time 30 -segment_wrap 2 buffer%d.wav
Isso criará primeiro buffer0.wav
. Quando tiver 30 segundos, ele gravará em buffer1.wav
até que o arquivo tenha 30 segundos.
Quando o buffer1 for preenchido, ele gravará os próximos 30 segundos de dados no buffer0 novamente. Assim, a qualquer momento após os primeiros 30 segundos de gravação, você terá pelo menos 30 segundos e até 60 segundos de dados.
Basta classificar os arquivos em ordem crescente de acordo com Last modified
time e usar os últimos 30 segundos de seus dados concatenados.