É possível a codificação h264 acelerada por hardware?

11

O Raspberry Pi fará a codificação h264 acelerada por hardware ao gravar vídeo da placa da câmera. Como codificar h264 (usando aceleração de hardware) quando as imagens de origem não vêm diretamente da câmera?

Existem ferramentas de linha de comando que suportam isso?

Se não, quais APIs devo procurar para tornar isso possível?

Szabolcs
fonte
O que você está codificando e como está atualmente? - você converter arquivos de vídeo, tornando-os a partir de imagens e som, etc ...
Wilf
@ Wilf Estou interessado nisso em geral, no entanto, tenho um aplicativo atual: codificação de um lapso de tempo diretamente no vídeo. Não consigo usar raspivid porque preciso de taxas de quadros baixas entre 1/5 e 2 qps. Além disso, a exposição automática raspividada entra em oscilações sob minhas condições de iluminação (pouca luz). Então, eu quero usar raspistill, mas codificar diretamente para o vídeo para que o resultado não ocupe muito espaço (como JPEGs). Como uma segunda aplicação Quero postar processo de cada quadro em tempo real usando Mathematica (vai ter um monte de tempo de CPU), e , em seguida, enviá-los para ser codificado em h264.
precisa
1
@ Wilf Eu tenho uma solução parcial que eu acho que deveria ser possível fazer funcionar: a idéia é algo como raspiyuv -o - | rpi-encode-yuv(aproximadamente) onde a rpi-encode-yuvferramenta é daqui . O tamanho do quadro é codificado nesta ferramenta, portanto, é necessário alterá-lo no início do arquivo C e recompilar. Infelizmente ainda não consegui obter uma saída adequadamente alinhada, pois raspiyuvnão parece codificar o tamanho do quadro na saída. Recebo uma imagem que muda gradualmente que acaba se transformando em lixo. Ainda trabalhando nisso.
Szabolcs

Respostas:

8

O GStreamer está incluído no Raspbian e, com seu plugin OpenMAX, ele usa os recursos de codificação de hardware do Raspberry Pi.

Consulte este link para obter um tutorial sobre como fazer o que você está procurando: https://www.raspberrypi.org/forums/viewtopic.php?t=72435

Se você está interessado em transcodificar, acabei de postar uma resposta para outra pergunta que pode lhe interessar: Qual a velocidade que posso esperar da codificação hardware-H264?

M. Rubio-Roy
fonte
Obrigado! Não posso testar isso agora, mas aceitarei antecipadamente com base no seu tutorial.
Szabolcs
1

Parece que, compilando o ffmpeg sozinho, no RPi3B + você pode obter

CODIFICAR VÍDEO DE 30 FPS DE ALTA COMPLEXIDADE A PARTIR DE UMA SEQUÊNCIA DE IMAGEM 1920 x 1080 JPEG - MOVIMENTO SIGNIFICATIVO E DETALHE INTRAFRAME - CONFIGURAÇÕES DE ALTA QUALIDADE:

Codificação H.264 (CPU) baseada em software: 2.6 FPS (11,5 vezes mais lento que o tempo real)

Codificação H.264 baseada em hardware (GPU): 6,3 FPS (4,8 vezes mais lenta que o tempo real)

CÓDIGO DE VÍDEO DE 30 FPS DE ALTA COMPLEXIDADE A PARTIR DE UMA SEQUÊNCIA DE IMAGEM DE 640 X 480 JPEG - MOVIMENTO SIGNIFICATIVO E DETALHE INTRAFRAME - CONFIGURAÇÕES DE ALTA QUALIDADE:

Codificação H.264 (CPU) baseada em software: 18 FPS (1,7 vezes mais lento que o tempo real)

Codificação H.264 baseada em hardware (GPU): 38 FPS (1,3 vezes MAIS RÁPIDO que o tempo real)

O script para ajudar a conseguir tudo isso está em um tópico do fórum .

akostadinov
fonte