Para começar, eu perderia o individual -rtbufsize
para cada entrada. Se o ffmpeg estiver atrasado, o aumento do buffer em tempo real não ajudará, a menos que você esteja tentando remediar picos ocasionais. Eu não tenho certeza de quanta headroom o ffmpeg reserva no windows, mas eu acho que é seguro assumir que se você estiver obtendo 12fps com a taxa de frames de saída configurada para 30, ele nunca vai alcançar. Basicamente, é possível gravar até 1GB da captura de tela para codificar mais tarde, agindo como um buffer de talvez um minuto, provavelmente mais curto antes de soltar quadros.
Você disse que conseguiu salvar a 30fps sem problemas, então provavelmente é a velocidade de upload para o facebook. Então você tem que fazer a saída menor, basicamente.
Tenho certeza que o ffmpeg lê todas as entradas como 25fps por padrão, então definir a saída para 25fps em vez de 30 provavelmente aumentaria seu fps para mais de 20 de graça. Eu não tenho certeza sobre como o dshow funciona, então eu posso estar errado sobre isso, se você realmente quer 30fps.
e eu notei que você colocou -b:v 8M
para o codificador ... isso é realista para a sua conexão com a internet? Muitos provedores de internet vão acelerar os uploads para seus clientes residenciais, então você pode não conseguir fazer mais do que 3-4mbps, especialmente se quiser transmitir ao vivo.
Você deseja usar -preset=slow
ou medium
se for usar uma predefinição. Pode ser diferente para o codificador de hardware, então você pode querer verificar suas opções, mas com velocidades de rede como gargalos, não há muito o que fazer se você quiser streaming em tempo real, o vídeo tem que ser menor, seja na taxa de quadros , resolução ou compactação.