Для начала я бы потерял индивидуума -rtbufsize
для каждого входа. Если ffmpeg отстает, увеличение буфера в реальном времени не поможет, если только вы не пытаетесь исправить случайные пики. Я не уверен, сколько запаса ffmpeg резервирует на окнах, но я думаю, можно с уверенностью предположить, что если вы получаете 12 кадров в секунду с частотой кадров на выходе, равной 30, это никогда не наверстает упущенное. Это в основном запись до 1 ГБ снимка экрана для последующего кодирования, выступающего в качестве буфера, возможно, минуты, возможно, короче, прежде чем он пропускает кадры.
Вы сказали, что можете без проблем сохранить в файл со скоростью 30 кадров в секунду, так что это, вероятно, скорость загрузки в Facebook. Таким образом, вы должны сделать вывод меньше, в основном.
Я почти уверен, что ffmpeg по умолчанию считывает все входные данные как 25fps, поэтому установка выходного значения 25fps вместо 30, вероятно, увеличит ваш fps до более 20 бесплатно. Я не уверен в том, как работает dshow, поэтому я могу ошибаться, если вы действительно хотите 30fps.
и я только что заметил, что вы поставили -b:v 8M
кодировщик ... это реально для вашего интернет-соединения? Многие интернет-провайдеры будут ограничивать загрузку для своих частных клиентов, поэтому вы не сможете делать больше, чем 3-4 Мбит / с, особенно если вы хотите транслироваться в прямом эфире.
Вы хотите использовать -preset=slow
или medium
если вы собираетесь использовать пресет. Он может отличаться для аппаратного кодировщика, поэтому вы можете проверить его параметры, но с узкими местами для скорости сети вы ничего не сможете сделать, если хотите потоковую передачу в реальном времени, видео должно быть меньше, либо по частоте кадров разрешение или сжатие.