Uma GPU pode ser usada para codificar h264?

13

Gostaria de saber se eu consigo uma placa gráfica melhor, poderia acelerar a codificação h264 na minha máquina usando o freio de mão?

Em caso afirmativo, como posso saber qual placa gráfica suporta isso?

Estou ciente de que a GPU pode decodificar o h264 por hardware, mas não tenho certeza sobre a codificação.

Pedro
fonte
Relacionado: Compressão de vídeo acelerada - de qualquer forma, você deseja ter uma placa NVIDIA para isso e estar disposto a gastar dinheiro.
slhck
Outro post relacionado: codificar seus vídeos Utilizar o GPU
slhck
Para a codificação h.264, o freio de mão usa o codificador de software x264 (videolan) . Algumas respostas abaixo implicam que o handbrake usa ffmpeg, que pode usar implementações x264 ou hw (GPU). Embora essa pergunta antiga (mas ainda relevante) provavelmente não esteja perguntando "como acelerar o freio de mão", mas "como tornar a codificação h.264 mais rápida". As respostas terão prazo de validade (algumas já expiraram); mas, por enquanto, se estiver executando o processamento de ML e / ou em lotes, talvez seja necessário corresponder uma implementação ao seu hardware
michael
fwiw, achei este comentário do ffmeg interessante: "Os codificadores de hardware normalmente geram uma saída com qualidade significativamente menor que os bons codificadores de software como x264, mas geralmente são mais rápidos e não usam muito recurso da CPU. (Ou seja, eles exigem uma taxa de bits mais alta para gerar saída com a mesma qualidade perceptiva, ou eles produzem saída com uma qualidade perceptual mais baixa na mesma taxa de bits.) "
michael

Respostas:

7

Usando o Handbrake, a resposta seria não. O Handbrake é um codificador h.264 somente para CPU, embora agora seja capaz de usar o OpenCL para dimensionamento de vídeo e tenha algum suporte para DXVA para decodificação de vídeo.

A questão vinculada pelo slhck menciona o MediaCoder , mas requer uma placa de vídeo Nvidia ou uma CPU Intel com um núcleo gráfico de segunda geração.

Existem alguns produtos mais antigos que foram obsoletos, especificamente o Badaboom e o software ATi Avivo.

O Badaboom, que poderia usar os processadores gráficos Nvidia e Intel para acelerar o processo de codificação, mas agora está no fim da vida útil e não suporta placas gráficas mais recentes.

A ATi tinha seu próprio codificador de vídeo que costumava ser chamado de "Avivo" antes de ser incorporado ao AMD Codec Package, que incluía o AMD Video Converter, embora ele não esteja mais disponível.

Mokubai
fonte
Então, eu estou usando uma CPU AMD no momento, isso significa que é uma perda de tempo para mim? Pode ser qualquer placa NVIDIA - oh, então ela tem que suportar CUDA?
peter
Encontrei este link, en.wikipedia.org/wiki/CUDA , que sugere que muitas placas NVIDIA suportam CUDA.
peter
Atualizei minha resposta com um link para o pacote de software da AMD que pode ajudá-lo a usar a GPU para codificar o vídeo, mas requer uma placa da série HD2000 ou melhor. Se você possui uma CPU particularmente poderosa, mas uma placa gráfica econômica, o Handbrake ainda pode ser mais rápido.
Mokubai
O Badaboom está sendo finalizado em 18/04/2012.
HVS
2
A resposta acima não está mais correta.
totaam 4/09/13
4

O x264 agora suporta aceleração de codificação OpenCL. A quantidade de aceleração que você obtém dependerá do desempenho da sua placa gráfica, no meu GTS 450 não recebo nenhuma e, com placas mais lentas, ela diminui a codificação. Cartões melhores podem ajudar. Tudo o que você precisa fazer é adicionar --opencl à linha de comando do x264. Acredito que o handbrake utiliza as mesmas bibliotecas x264 e oferece a mesma aceleração OpenCL nas versões mais recentes.

totaam
fonte
Como devo usar a aceleração de codificação OpenCL?
precisa saber é o seguinte
2

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

O FFmpeg fornece um subsistema para aceleração de hardware.

A aceleração por hardware permite o uso de dispositivos específicos (geralmente placas gráficas> ou outros dispositivos específicos) para executar o processamento multimídia. Isso permite usar hardware dedicado para executar cálculos exigentes enquanto libera a CPU de tais cálculos. Normalmente, a aceleração de hardware permite que dispositivos de hardware específicos (geralmente a GPU) executem operações relacionadas à decodificação e codificação de fluxos de vídeo ou filtragem de vídeo.

Ao usar a ferramenta FFmpeg, a decodificação assistida por HW é ativada usando o -hwaccel opção que habilita um decodificador específico. Cada decodificador pode ter limitações específicas (por exemplo, um decodificador H.264 pode suportar apenas o perfil da linha de base). A codificação assistida por HW é ativada através do uso de um codificador específico (por exemplo, nvenc_h264). A filtragem do processamento assistido por HW é suportada apenas em alguns filtros e, nesse caso, você ativa o código OpenCL através de uma opção de filtro.

Existem vários padrões de aceleração de hardware API, alguns dos quais são suportados em certa medida pelo FFmpeg.

A opção "-hwaccel auto" permite selecionar a decodificação acelerada baseada em hardware a ser usada na sessão de codificação. Você pode adicionar esse parâmetro com "auto" antes da entrada (se o seu x264 for compilado com o suporte ao OpenCL, você poderá tentar adicionar o parâmetro -x264opts), por exemplo:

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

Desculpe, mas não lembro como listar todas as opções disponíveis para "-hwaccel".

Além disso, você pode tentar o seguinte: https://wiki.archlinux.org/index.php/Hardware_video_acceleration

Ruslan Berozov
fonte
Parece que isso não responde especificamente à pergunta, embora pareça útil. Que tal você adicionar alguns detalhes que mostram como o ffmpeg e seus argumentos podem ajudar o OP.
Music2myear
Essa resposta implica usar ffmpeg em vez de freio de mão para a codificação h.264, o que provavelmente é bom, pois a pergunta provavelmente está apenas pedindo a maneira mais rápida de codificar - e presume que a GPU permitiria isso. Observe que nem todas as GPUs são igualmente poderosas (por exemplo, GPUs integradas versus dedicadas), e as CPUs também possuem otimizações que as bibliotecas podem utilizar se a biblioteca for compilada para dar suporte a ela. Portanto, a "aceleração de hardware" é o caminho certo a seguir, seja por CPU ou GPU.
Michael
0

No momento, o Handbrake suporta os seguintes codificadores acelerados por hardware para o H.264 / AVC:

  1. Intel QuickSync (no Windows e no Linux). Isso é compatível com pelo menos as linhas de processadores Sandybridge (segunda geração Core) da série Intel com gráficos integrados ativados e expostos ao sistema operacional. Hardware recomendado para qualidade de codificação aceitável: Haswell (série Core de 4ª geração) e além, que introduziu o conceito de níveis de granulação fina (TUs), funções de lookahead (como modos de codificação LA-BRC e ICQ ) com desempenho significativamente melhor. Consulte o guia de uso da documentação do freio de mão aqui .

  2. NVENC da NVIDIA : Isso requer pelo menos as GPUs da série Kepler (GK +) da NVIDIA e acima dos SKUs de consumidor de alto desempenho (série GTX) e as formações profissionais (GPUs Quadro e Tesla baseadas em Kepler e além). Está disponível no Windows e Linux.

É importante notar que, com o NVENC, você estará artificialmente limitado a no máximo duas sessões de codificação simultânea nos SKUs do consumidor, enquanto a formação profissional permanece inalterada. Para sua referência sobre recursos específicos do codificador, consulte a matriz GPU . Para obter melhor desempenho e qualidade do codificador, siga a iteração mais recente das GPUs Pascal e Volta .

Opcionalmente:

  1. O suporte à codificação do AMD AMF também está disponível nas versões noturnas atuais para o Windows SOMENTE. Uma observação especial sobre o AMF da AMD (que utiliza o codificador VCE embutido no hardware em todas as GCN + SKUs) é que, em hardware mais recente, como Polaris (série RX 400+) e Vega , algumas afinações avançadas de codificador para H.264 / AVC foram preteridos quando introduziram o suporte à codificação HEVC. O que a AMD abandonou foi a codificação de quadro B, sem suporte para quantização adaptativa (AQ), um recurso que os codificadores baseados em hardware acima mencionados (QuickSync e NVENC) implementaram por gerações sem regressões. Além disso, consulte isso em notas sobre métricas de taxa de transferência sobre o que esperar.

No que diz respeito ao suporte da Apple, isso é, na melhor das hipóteses, tentativa . A API VideoToolBox , onde implementada além do escopo do Handbrake, também parece ter um conjunto muito limitado de controles. Mesmo que o Handbrake o adote a montante, não espere milagres em termos de retenção e produtividade da qualidade.

Observe que você pode precisar usar a versão noturna mais recente para usar os recursos mais recentes do codificador em sua plataforma, como no momento. Isso definitivamente mudará no futuro.

林正浩
fonte