FFmpeg no transcodifica en tiempo real

FFmpeg no transcodifica en tiempo real

He estado configurando una compilación de grabación para que un amigo se parezca a la mía, pero parece que no puedo hacer que las cosas funcionen en tiempo real a pesar de tener suficiente hardware (hasta donde yo sé).

Especificaciones del sistema: 8600K, GTX 1050ti, 16 Gb de RAM, 1 TB 860 EVO

Comando de prueba (actualizado 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

El objetivo de este comando es registrar 2 salidas sincronizadas separadas. Sin embargo, por una razón u otra, este comando no transcodifica video en tiempo real, lo cual es un gran problema cuando intentas grabar, no simplemente convertir un archivo. Cuando omito una de las dos salidas o si reduzco a la mitad la resolución de cada entrada/salida, todo funciona en tiempo real. Esto me haría creer que hay un cuello de botella en el sistema en alguna parte, pero cuando se monitorea todo en el administrador de tareas, nada está siquiera cerca de alcanzar el límite (codificador de GPU, CPU, RAM y SSD por debajo del 30 % de uso).

Además, cuando intento grabar ambas transmisiones en un video 4K60 a través de OBS, las cosas funcionan perfectamente bien, como en tiempo real. Así que no entiendo cómo la transcodificación de dos transmisiones de 1080p60 en FFmpeg sería más intensiva que una transmisión de 4K60 en OBS...

Desde entonces, cambié el 1050ti por un GTX 1080 sin diferencia en el rendimiento. Esto me llevaría a creer que la culpa es de la CPU. Parece que FFmpeg en realidad solo está accediendo a 1 o 2 subprocesos... ¿alguna forma de obligarlo a usar más? -threads no parece tener ningún efecto independientemente de dónde lo inyecte en el comando. Lo que es realmente extraño es que tengo un comando muy similar, pero estoy haciendo dos transmisiones 4K60 en lugar de dos transmisiones 1080p60 con una GTX 1080 y 6800K... Hasta donde puedo decir, el 8600K tiene un mayor rendimiento por subproceso en comparación con el 6800K, así que no estoy seguro de cómo puedo salirme con la mía con tanto más.

Cualquier idea sería muy apreciada.

Respuesta1

El problema estaba en las tarjetas de captura. Saqué una de su sistema, la puse en el mío y pude replicar el problema. Esto no es reproducible con ninguna de mis otras tarjetas de captura y tengo 4 de ellas.

El problema parece ser causado por el bloatware del motor de transmisión de Avermedia almacenado en la propia tarjeta. La tarjeta en realidad se muestra como dos dispositivos, uno sin motor de transmisión en el nombre y otro con, si selecciona el que tiene los problemas aliviados pero aún presentes. De todos modos, como puedo confirmar que el problema no existe en el HD60 Pro de Elgato, hemos realizado un pedido de 2 de ellos.

En retrospectiva, el bloatware/firmware no convencional explica fácilmente los problemas extremadamente difíciles de diagnosticar. Afortunadamente, compramos los Avermedia Live Gamer HD 2 en oferta y podemos revenderlos para obtener un reembolso completo, buen viaje.

información relacionada