Necesito ayuda para descubrir cuáles podrían ser las razones por las que una PC y/o VLC usarían la CPU para reproducir video 4k en lugar de la GPU. (Creo que siempre usa la CPU para renderizar video, independientemente del video, porque los gráficos de rendimiento del sistema siempre muestran quizás entre un 2% y un 5% de uso de GPU y entre un 30% y un 80% de uso en algunos o todos los subprocesos de la CPU)
Esto es lo que sé:
- jugandoeste videoen el navegador de youtube a 2160p 60 fps, funciona bien con un 80% de uso de CPU en la mitad de los núcleos; aunque todavía no hay mucho uso de GPU en el monitor de mi sistema. Jugandolo mismoSin embargo, el video en VLC usa el 100% de mi CPU Ryzen 5, 6 núcleos, 12 subprocesos y 4,2 GHz, y, en el mejor de los casos, tartamudea y normalmente se queda quieto. [EDITAR] Obtuve el video en 3 formatos: mp4, mkv y webm, todos 4k@60. MKV y WEBM usan los mismos recursos (cpu) que en el navegador/yt; sin embargo, el FPS es más bajo, definitivamente a menos de 20 fps en lugar de 60 fps. Sin embargo, el MP4 utiliza el 100% de mi CPU y tartamudea como le expliqué.
- VLC está configurado para usar aceleración de hardware y probé todas las opciones (Automático, direct3D 11, directx DXVA 2.0), reinicié vlc (e incluso mi PC) después de los cambios, y no hubo diferencia.
- Estoy usando el último VLC (3.0.11)
- la GPU es una gtx 1660Ti, que debería tener una potencia excesiva, puede hacer realidad virtual de 120 Hz, etc., y utiliza los últimos controladores de nvidia. No tengo ninguna otra tarjeta gráfica integrada.
¿Es posible que debido a que no tengo algún tipo de códec/controlador en mi sistema, VLC utilice de forma predeterminada el procesamiento de la CPU? Y la misma pregunta para mi navegador, que funciona a mejores fps que en VLC pero todavía parece usar solo la CPU. Además, ¿cómo puedo saber qué decodificación es compatible con qué hardware y qué códecs se necesitan? ¿Cómo puedo encontrar un registro o algo en lo que VLC me diga si está procesando o no el video actual usando la GPU y por qué?
¿Por qué es tan difícil decodificar vídeo en la GPU? Si puedes escribir un sombreador de computación que haga cálculos GPGPU para cualquier cosa antigua, como calcular física, generar mallas, esculpir nubes de puntos, factorizar números primos o ejecutar un videojuego estilo sombreador de demostración 100% completo, ¿por qué no un video? Entiendo que algunos códecs son muy peculiares y tal vez estén diseñados para CPU, pero seguramente una GPU para juegos 2019-2020 puede hacer fuerza bruta mejor que una CPU de 6 núcleos o el módulo de video con chip ARM de un teléfono inteligente de mala calidad.
[Actualización] Descubrí que está relacionado con la codificación. El video en el contenedor MP4 no usa GPU en absoluto, mientras que MKV y WEBM usan GPU:
Parece que el youtube MP4 usaCodificación del códec AV1y los otros 2 usancodificación VP9. Ambos son formatos de código abierto, por lo que VLC no debería tener problemas para manejarlos.
TambiénParece que no hay tarjetas de video.Ahora mismo que incorporan el decodificador en su chip. Pero si hay o no un ASIC, no significa que la gpu en sí no pueda decodificarlo de manera GPGPU (como también se menciona en la entrada de Wikipedia para AV1). De cualquier manera, esto no resuelve mi problema, pero explica las razones.
Respuesta1
Descubrí que el problema está relacionado con la codificación. Youtube empaqueta el video en 3 contenedores: el contenedor MP4 cuando se reproduce en vlc no usa la GPU en absoluto, mientras que los otros 2 contenedores MKV y WEBM usan la GPU:
Parece que el youtube MP4 usaCodificación del códec AV1y los otros 2 usancodificación VP9. Ambos son formatos de código abierto, por lo que VLC no debería tener problemas para manejarlos, pero por alguna razón no puede reproducir AV1 en la gpu. Entonces la pregunta es por qué vlc/windows no puede reproducir av1 en la gpu.
TambiénParece que no hay tarjetas de video.ahora mismo que incorporan el decodificador AV1 en su chip (como hicieron con h.264 y h.265). Pero si hay o no un ASIC, etc., no significa que la gpu en sí no pueda decodificarlo en forma GPGPU (como también se menciona en la entrada de Wikipedia para AV1). De cualquier manera, esto no resuelve mi problema al 100%, pero explica las razones y sé qué buscar ahora (cómo reproducir AV1 en la gpu, pero no sé con qué frecuencia encontraré AV1 en mi rutina diaria). vida así que por ahora soy feliz sin ella)
Respuesta2
La fuente de la diferencia es que VLC usa sus propios códecs, mientras que el navegador usa los códecs instalados en el sistema.
He descargado el vídeo en varias resoluciones. Utiliza un códec identificado como "isom (isom/iso2/mp41)" y lo probó:
- Con VLC, versión 8K - sin vídeo
- Con VLC, versión 4K: vídeo saltado con grandes intervalos entre fotogramas (congelados)
- Con MP-HC (x64), versiones 8K y 4K: fluido, pero usé todos mis núcleos al 100 % y aproximadamente entre el 30 y el 50 % de la GPU.
- Con Chrome YouTube: fluido con poco uso de CPU y GPU, pero 720p es la resolución más grande ofrecida
- Con Firefox YouTube: versión 4K, fluida, poca CPU, 20-50 % de GPU
- PERO cuando se eliminaron los archivos de video 8K y 4Kdirectamente en Firefox o Chrome, la reproducción de video básicamente no funcionó.
Mi conclusión es que este códec necesita muchos recursos y es bastante problemático para la mayoría de los jugadores. Los navegadores cuando usan YouTube hacen trampa al usar una resolución mucho más baja que la que se supone que deben usar.