Я пытаюсь настроить систему захвата звука, похожую на 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 секунд, которые он записал, должны быть удалены, что гарантирует, что файл никогда не превысит пяти минут.

1 ответ1

2

Вы можете использовать сегмент muxer.

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 секунд из их объединенных данных.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .