FFmpeg não transcodifica em tempo real

FFmpeg não transcodifica em tempo real

Estou configurando uma compilação de gravação para um amigo que se pareça com a minha, mas não consigo fazer as coisas funcionarem em tempo real, apesar de hardware suficiente (até onde posso dizer).

Especificações do sistema: 8600K, GTX 1050ti, 16 Gb de RAM, 1 TB 860 EVO

Comando de teste (atualizado para simplificar):

ffmpeg -y -hide_banner -thread_queue_size 9999 -f dshow -rtbufsize 2147.48M -video_size 1920x1080 -framerate 60 `
-i video="@device_pnp_\\?\usb#vid_07ca&pid_0570&mi_00#7&3886ab1a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" `
-thread_queue_size 9999 -f dshow -rtbufsize 2147.48M -video_size 1920x1080 -framerate 60 `
-i video="@device_pnp_\\?\usb#vid_07ca&pid_0570&mi_00#7&24df76f&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" `
-map 0 -c:v h264_nvenc -r 60 -preset: llhp -pix_fmt yuv420p -b:v 1M -minrate 1M -maxrate 1M -bufsize 1M `
C:\Users\Jordan\Videos\FFmpeg\Left\Left.ts `
-map 1 -c:v h264_nvenc -r 60 -preset: llhp -pix_fmt yuv420p -b:v 1M -minrate 1M -maxrate 1M -bufsize 1M `
C:\Users\Jordan\Videos\FFmpeg\Right\Right.ts

O objetivo deste comando é registrar 2 saídas sincronizadas separadas. No entanto, por um motivo ou outro, esse comando não transcodifica o vídeo em tempo real, o que é um grande problema quando você está tentando gravar, e não simplesmente converter um arquivo. Quando omito uma das duas saídas ou se reduzo pela metade a resolução de cada entrada/saída tudo funciona em tempo real. Isso me faria acreditar que há um gargalo no sistema em algum lugar, mas ao monitorar tudo no gerenciador de tarefas, nada está nem perto de atingir o limite (codificador GPU, CPU, RAM e SSD abaixo de 30% de uso).

Além disso, quando tento gravar ambos os streams em um vídeo 4K60 via OBS, as coisas funcionam perfeitamente bem, como em tempo real. Então, não entendo como a transcodificação de dois streams 1080p60 no FFmpeg seria mais intensa do que um stream 4K60 no OBS...

Desde então, troquei o 1050ti por uma GTX 1080 sem diferença no desempenho. Isso me levaria a acreditar que a culpa é da CPU. Parece que o FFmpeg está atingindo apenas 1-2 threads... alguma maneira de forçá-lo a usar mais? -threads não parece ter nenhum efeito, independentemente de onde eu o injeto no comando. O que é realmente estranho é que tenho um comando muito semelhante, mas estou fazendo dois streams de 4K60 em oposição a dois streams de 1080p60 com GTX 1080 e 6800K... Pelo que posso dizer, o 8600K tem maior desempenho por thread em comparação com o 6800K, então não tenho certeza de como consigo fazer muito mais.

Qualquer visão seria muito apreciada.

Responder1

O problema estava nas placas de captura, tirei uma do sistema dele e coloquei no meu e consegui replicar o problema. Isso não pode ser reproduzido com nenhuma das minhas outras placas de captura e tenho 4 delas.

O problema parece ser causado pelo bloatware do mecanismo de stream da Avermedia armazenado no próprio cartão. Na verdade, a placa aparece como dois dispositivos, um sem mecanismo de stream no nome e outro com, se você selecionar aquele com os problemas aliviados, mas ainda presentes. De qualquer forma, como posso confirmar que o problema não existe no HD60 Pro da Elgato, fizemos um pedido de 2 deles.

Em retrospecto, bloatware/firmware não convencional explica facilmente os problemas extremamente difíceis de diagnosticar. Felizmente, compramos os Avermedia Live Gamer HD 2s com desconto e podemos revendê-los com reembolso total, já vai.

informação relacionada