¿Se puede usar una GPU para codificar h264?

13

Me pregunto si obtengo una mejor tarjeta gráfica, ¿podría acelerar la codificación h264 en mi máquina con el freno de mano?

Si es así, ¿cómo puedo saber qué tarjeta gráfica admitirá esto?

Soy consciente de que la GPU puede decodificar el hardware de h264, pero no estoy seguro acerca de la codificación.

Peter
fuente
Relacionado: Compresión de video acelerada : de cualquier manera, desea tener una tarjeta NVIDIA para esto y estar dispuesto a gastar dinero.
slhck
Otra publicación de blog relacionada: Codifique sus videos usando su GPU
slhck
Para la codificación h.264, el freno de mano utiliza el codificador de software x264 (videolan) . Algunas respuestas a continuación implican que el freno de mano usa ffmpeg, que puede usar implementaciones x264 o hw (GPU). Aunque esta vieja (pero aún relevante) pregunta probablemente no es "cómo hacer que el freno de mano sea más rápido", sino "cómo hacer que la codificación h.264 sea más rápida". Las respuestas tendrán una vida útil (algunas ya han caducado); pero por ahora, si está haciendo ML y / o procesamiento por lotes, es posible que deba hacer coincidir una implementación con su hardware
michael
fwiw, este comentario de ffmeg me pareció interesante: "Los codificadores de hardware generalmente generan una salida de calidad significativamente menor que los buenos codificadores de software como x264, pero en general son más rápidos y no usan muchos recursos de CPU. (Es decir, requieren una tasa de bits más alta para hacer salida con la misma calidad perceptiva, o hacen una salida con una calidad perceptiva más baja a la misma tasa de bits. ""
michael

Respuestas:

7

Usando Handbrake la respuesta sería no. Handbrake es un codificador h.264 solo para CPU, aunque ahora puede usar OpenCL para escalar video y tiene cierto soporte para DXVA para decodificación de video.

La pregunta vinculada por slhck menciona MediaCoder , pero requiere una tarjeta gráfica Nvidia o una CPU Intel con un núcleo gráfico de segunda generación.

Hay un par de productos más antiguos que han quedado obsoletos, específicamente Badaboom y el software ATi Avivo.

Badaboom, que podría usar los procesadores gráficos Nvidia e Intel para acelerar el proceso de codificación, pero ahora está al final de su vida útil y no admite tarjetas gráficas más nuevas.

ATi tenía su propio codificador de video que solía llamarse "Avivo" antes de fusionarse con el paquete de códec AMD que incluía el convertidor de video AMD, aunque ya no está disponible.

Mokubai
fuente
Entonces, estoy usando una CPU AMD en este momento, ¿eso significa que es una pérdida de tiempo para mí? ¿Puede ser cualquier tarjeta NVIDIA? Ah, entonces tiene que ser compatible con CUDA?
Peter
Encontré este enlace, en.wikipedia.org/wiki/CUDA , que sugiere que muchas tarjetas NVIDIA son compatibles con CUDA.
Peter
He actualizado mi respuesta con un enlace al paquete de software AMD que puede ayudarlo a usar la GPU para codificar video, pero requiere una tarjeta de la serie HD2000 o mejor. Si tiene una CPU particularmente potente pero una tarjeta gráfica económica, entonces Handbrake aún puede ser más rápido.
Mokubai
Badaboom está siendo finalizado el 18/04/2012.
HVS
2
La respuesta anterior no es / ya no es correcta.
totaam
4

x264 ahora es compatible con la aceleración de codificación OpenCL. La cantidad de aceleración que obtenga dependerá del rendimiento de su tarjeta gráfica, en mi GTS 450 no obtengo ninguno y con tarjetas más lentas en realidad ralentiza la codificación. Mejores cartas pueden ayudar. Todo lo que necesita hacer es agregar --opencl a la línea de comando x264. Creo que el freno de mano hace uso de las mismas bibliotecas x264 y ofrece la misma aceleración OpenCL en versiones más nuevas.

Totaam
fuente
¿Cómo debo usar la aceleración de codificación OpenCL?
Dr.jacky
2

https://trac.ffmpeg.org/wiki/HWAccelIntro

FFmpeg proporciona un subsistema para la aceleración de hardware.

La aceleración de hardware permite utilizar dispositivos específicos (generalmente tarjetas gráficas> u otros dispositivos específicos) para realizar el procesamiento multimedia. Esto permite utilizar hardware dedicado para realizar cálculos exigentes mientras libera a la CPU de dichos cálculos. Normalmente, la aceleración de hardware permite que dispositivos de hardware específicos (generalmente la GPU) realicen operaciones relacionadas con la decodificación y codificación de transmisiones de video o el filtrado de video.

Cuando se usa la herramienta FFmpeg, la decodificación asistida por HW se habilita mediante la -hwaccelopción, que habilita un decodificador específico. Cada decodificador puede tener limitaciones específicas (por ejemplo, un decodificador H.264 solo puede admitir el perfil de línea de base). La codificación asistida por HW se habilita mediante el uso de un codificador específico (por ejemplo, nvenc_h264). El filtrado de procesamiento asistido por hardware solo se admite en unos pocos filtros, y en ese caso habilita el código OpenCL a través de una opción de filtro.

Existen varios API de estándares de aceleración de hardware, algunos de los cuales son compatibles hasta cierto punto con FFmpeg.

La opción "-hwaccel auto" le permite seleccionar la decodificación acelerada basada en hardware para usar en la sesión de codificación. Puede agregar este parámetro con "auto" antes de la entrada (si su x264 está compilado con soporte OpenCL puede intentar agregar -x264opts param), por ejemplo:

ffmpeg -hwaccel auto -i input -vcodec libx264 -x264opts opencl output

Lo sentimos, pero no recuerdo cómo enumerar todas las opciones disponibles para "-hwaccel".

También puedes probar esto: https://wiki.archlinux.org/index.php/Hardware_video_acceleration

Ruslan Berozov
fuente
No parece que esto responda específicamente a la pregunta, aunque parece útil. ¿Qué tal si agrega algunos detalles que muestran cómo ffmpeg y sus argumentos pueden ayudar al OP?
music2myear
Esta respuesta implica el uso de ffmpeg en lugar del freno de mano para la codificación h.264, lo que probablemente esté bien, ya que la pregunta probablemente sea solo la forma más rápida de codificar, y supone que GPU lo habilitaría. Tenga en cuenta que no todas las GPU son igualmente potentes (por ejemplo, GPU integradas frente a dedicadas), y las CPU también tienen optimizaciones que las bibliotecas pueden utilizar si la biblioteca está compilada para admitirla. Entonces, la "aceleración de hardware" es el camino correcto a seguir, ya sea a través de la CPU o la GPU.
michael
0

En la actualidad, Handbrake admite los siguientes codificadores acelerados por hardware para H.264 / AVC:

  1. Intel QuickSync (en Windows y en Linux). Esto es compatible con al menos las líneas de procesador Sandybridge (Core de segunda generación) de la serie Intel con gráficos integrados habilitados y expuestos al sistema operativo. Hardware recomendado para una calidad de codificación aceptable: Haswell (4a generación de la serie Core) y más allá, que introdujo el concepto de niveles objetivo precisos (TU), funciones anticipadas (como los modos de codificación LA-BRC e ICQ ) con un rendimiento significativamente mejor. Consulte la guía de uso de la documentación del freno de mano aquí .

  2. NVENC de NVIDIA : esto requiere al menos las GPU de la serie Kepler (GK +) de NVIDIA y superiores de las SKU de consumo de alto rendimiento (serie GTX) y las alineaciones profesionales (GPU Quadro y Tesla basadas en Kepler y más). Esto está disponible tanto en Windows como en Linux.

Es de destacar que con NVENC, estará limitado artificialmente a un máximo de dos sesiones de codificación simultáneas en las SKU del consumidor, mientras que la alineación profesional no se ve afectada por esto. Para su referencia sobre capacidades específicas del codificador, consulte la matriz de GPU . Para obtener el mejor rendimiento y calidad del codificador, adhiérase a la última versión de las GPU Pascal y Volta .

Opcionalmente:

  1. El soporte de codificación de AMD AMF también está disponible en las versiones nocturnas actuales SOLO para Windows. Una nota especial sobre el AMF de AMD (que se conecta con el codificador VCE integrado en el hardware en todos los SKU GCN + ) es que en el hardware más nuevo, como Polaris (serie RX 400+) y Vega , algunas afinaciones de codificador avanzadas para H.264 / AVC quedaron en desuso cuando introdujeron el soporte de codificación HEVC. Lo que AMD descartó fue la codificación B-frame, sin soporte para la cuantificación adaptativa (AQ), una característica que los codificadores basados ​​en hardware antes mencionados (QuickSync y NVENC) han implementado durante generaciones sin regresiones. Además, vea esto en las notas relativas a las métricas de rendimiento sobre qué esperar.

En lo que respecta al soporte de Apple, esto es, en el mejor de los casos, tentativo . La API VideoToolBox , donde se implementó más allá del alcance de Handbrake, también parece tener un conjunto muy limitado de controles. Incluso si Handbrake lo adopta corriente arriba, no espere milagros en términos de retención de calidad y rendimiento.

Tenga en cuenta que es posible que deba usar la última versión nocturna para usar las últimas funciones del codificador en su plataforma, como en la actualidad. Esto definitivamente cambiará en el futuro.

林正浩
fuente