Escolha do codec para transcodificação de vídeo não intensiva da CPU

2

Estou tentando obter transcodificação em tempo real de vídeos mkv / H264 em uma plataforma de baixo custo (CPU lenta).

Usando a seguinte linha de comando como um arnês de teste:

avconv -i test.mkv -c:v mjpeg -q:v 3 -c:a libmp3lame -f (codec) -y /dev/null

Eu obtenho os seguintes resultados: 37fps usando o codec rawvideo , 21fps usando o codec mpeg4 .

Por isso, estou procurando um codec "intermediário", que forneceria uma compactação mais rápida. Eu não preciso muito de uma taxa de compressão, uma vez que os dados resultantes não serão armazenados, mas diretamente transmitidos por um servidor UPnP (mas, obviamente, não saturar minha rede com vídeo bruto é desejável).

Algum conselho?

Atenciosamente.

    
por oparisy 17.06.2013 / 21:40

1 resposta

0

Você pode tentar usar o codec MPEG2

O MPEG2 é muito rápido para codificar. Isso deve funcionar -c:v mpeg2video -r 25 -b:v 8192k aumentar a taxa de bits deve dar o controle de taxa mais folga e dar velocidade de codificação mais rápida. Você também pode tentar a opção -intra , que desativa a estimativa de movimento ao custo de uma taxa de bits significativamente maior. Se isso não for suficiente, deve haver um parâmetro de etapa de quantização que você pode usar para acelerar a codificação em detrimento da qualidade visual.

Você também pode tentar H264 com resolução mais baixa com pré-ajuste ultra-rápido

Eu não tenho certeza de quão baixo você quer dizer quando fala low-end, estou transcodificando com sucesso a 720p H264 em tempo real em uma CPU Core 2 Duo 2ghz ... então, estou fornecendo isso se sua ideia de low-end é semelhante à minha ideia de low-end:)

O codec libx264 aceita predefinições para o codificador que trocam a velocidade de codificação por taxa de bits com qualidade visual constante.

Você pode tentar com a predefinição mais rápida:

-c:v libx264 -preset ultrafast -tune zerolatency -profile high10  \
    -bsf:v h264_mp4toannexb

(O parâmetro -bsf:v é necessário se você for transmitir)

Você também pode tentar tocar com o parâmetro -cbr , ele controla a alocação de bits e, portanto, a qualidade visual / bitrate. O valor padrão é 23; 0 é sem perdas e 51 é a pior qualidade / menor taxa de bits.

A resolução desempenha um grande papel na velocidade de codificação e descobri que um vídeo h264 de resolução mais baixa que foi upsampled parece comparável ao mpeg2 que não foi reduzido (com uma velocidade de codificação muito mais baixa e esperançosamente mais rápida, don ' cite-me sobre isso: 3).

Você também pode tentar brincar com isso:

-filter:v scale=-1:480

Isso redimensionará seu vídeo para ter 480 linhas de altura e manter a mesma proporção.

(Eu apenas configurei a transcodificação para H264, aqui: Transcrição em tempo real para H264 + AAC no container Matroska se você quiser ver.)

    
por 29.09.2013 / 20:23