Tengo un proyecto web en el que estoy trabajando que requiere la transcodificación de múltiples clips de video cortos (6-10 segundos) cargados por los usuarios en un formato H.264 compatible con la web en mi servidor Linux. Pude habilitar la aceleración de hardware NVIDIA NVENC con ffmpeg y una GeForce GTX 670 de 4 años, y estoy obteniendo velocidades de codificación de hardware dos veces superiores a las de mi codificación de software (Xeon E5-1620 v3). Con un presupuesto de tarjeta de video de $800, me gustaría poder transcodificar estos clips de video cortos lo más rápido posible porque varios usuarios los cargarán simultáneamente.
El motor NVENC tiene limitaciones de licencia cuando se implementa en una tarjeta NVIDIA de nivel de consumidor: solo se pueden ejecutar 2 subprocesos de transcodificación de video simultáneamente, incluso si tiene varias tarjetas. Si decido optar por una de las costosas líneas de tarjetas quadro, entonces solo estoy limitado por el otro hardware en otras partes de mi sistema en términos de cuántos subprocesos puedo ejecutar. Sin embargo, con mi proyecto específico, es mucho mejor transcodificar estos clips en una serie en lugar de paralelos porque los clips se verán en el orden en que se cargan. Los clips posteriores en la cola se pueden transcodificar a medida que se ven los clips anteriores. Si los clips se transcodifican en paralelo en la misma tarjeta, el rendimiento es inversamente proporcional al número de subprocesos simultáneos.
Dicho esto, mi plan es configurar dos tarjetas NVIDIA y ejecutar un único subproceso en cada una para maximizar el rendimiento. El SDK del códec de NVIDIA es vago en cuanto a la diferencia de rendimiento de NVENC entre varias tarjetas, pero parece que hay una gran diferencia entre las generaciones de GPU Maxwell Gen 2> Maxwell Gen 1> Kepler. No puedo encontrar puntos de referencia confiables para la codificación NVENC (a diferencia de la evaluación comparativa CUDA, que es fácil de encontrar).
En ausencia de datos de evaluación comparativa duros que comparen varias tarjetas, ¿qué características de las tarjetas actualmente disponibles tendrían el mayor impacto en la velocidad de codificación NVENC de un solo hilo? Dado que la GPU real no se utiliza por completo durante la transcodificación, ¿la GPU y la velocidad del reloj de la memoria afectan mucho a esta función? Tengo $400 por tarjeta para gastar, pero si el nivel básico de Maxwell Gen 2 GeForce GTX 960 es tan bueno como las tarjetas más recientes, entonces invertiré dinero extra en otros aspectos del servidor (CPU/RAM/SSD, etc.). Sé que esto puede parecer una pregunta subjetiva (qué es lo mejor ), pero estoy tratando de hacer una suposición autodidacta basada en la comprensión del hardware de transcodificación.
Hay dos características principales en la codificación NVIDIA NVENC:
De acuerdo con la limitación de la licencia: es posible ejecutar solo 2 subprocesos de codificación simultáneamente en las tarjetas NVIDIA de nivel de consumidor (cualquier tarjeta GTX). Está regulado a nivel del controlador, sin embargo, es posible eliminar esta limitación. En este caso, el valor de los subprocesos de transcodificación máximos dependerá del tamaño de la memoria de video y la utilización del motor de video. El tamaño de la memoria de video que se necesita para un flujo de transcodificación es diferente y depende del modelo de tarjeta de video. Para codificar el flujo SD en QUADRO K4200 (4 GB) se necesitan 100 MB de memoria de video, pero para codificar el mismo flujo en GTX 980TI (6 GB) necesitamos 170 MB.
Mis resultados en la transcodificación de fuentes SD en tiempo real son:
Mi conclusión (para 2016): si necesita transcodificar no más de 2 subprocesos en paralelo, entonces GTX 960 es una buena variante. Además, puede ahorrar algo de dinero en otro hardware y buscar otra tarjeta de video con Maxwell Gen1. Si opta por la forma de piratear, entonces GTX 960 es una buena variante pero solo con 4 GB de memoria de video.
ACTUALIZACIÓN DE 2018: Hoy en día la situación en esta área ha cambiado en una mejor dirección. La tarjeta con el mejor codificador es Tesla V100, pero es demasiado cara. La mejor variante de trabajo son las tarjetas de video basadas en Pascal CHIP. Si prefiere la forma de pirateo, GTX1050TI (4 GB), será perfecto para su presupuesto en 800 $. Por lo demás, la Quadro P2000 no tiene limitaciones de licencia y además es muy cómoda por el mismo presupuesto.
En la parte superior de su presupuesto de $ 800, puede obtener una Quadro M4000 que NO tiene la limitación de licencia de 2 transcodificaciones simultáneas. Usamos estas tarjetas para transcodificar de 5 a 10 transmisiones en vivo entrantes a 2 o 3 tasas de bits de salida.
kimgroth
usuario255406
usuario255406