Limitando o tamanho de um buffer de áudio no ffmpeg como ShadowPlay

0

Estou tentando montar um sistema de captura de áudio como o Nvidia ShadowPlay, no qual há um programa em segundo plano que mantém constantemente um buffer dos últimos X minutos de gravação (ou áudio neste caso) e, no comando, salva-o permanentemente para um arquivo separado. O que eu tenho até agora é:

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

para gravar e, em seguida,

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

Para copiar os últimos 30 segundos do buffer. No entanto, isso vem com o problema do arquivo de buffer atingir centenas de megabytes em questão de minutos. Eu gostaria de poder ajustar a duração máxima da gravação, de modo que, depois de ultrapassar esse limite, ela seja cortada na frente do arquivo. Em outras palavras, se houver um limite de 5 minutos no arquivo e ele tiver sido gravado por 5 minutos e 10 segundos, os primeiros 10 segundos que ele gravou devem ser excluídos, garantindo que o arquivo nunca ultrapasse cinco minutos de duração. / p>     

por Jakob 15.03.2018 / 22:43

1 resposta

2

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.

    
por 16.03.2018 / 07:24

Tags