Depois de testar muitas possibilidades, tenho uma linha de comando perfeita para criar miniaturas a partir de uma transmissão ao vivo:
ffmpeg -i rtmp://srvIp/h264.stream -r 1 -an -updatefirst 1 -y thumbnail.jpg
Ele atualiza um JPG a cada segundo e o servidor web HTTP usa JPG sem problemas, exibindo-o para clientes da Web.
O único problema é: todo comando usa 5 a 10% da CPU . Se eu quiser miniaturas de 20 canais, a CPU não tem energia para isso. O FFmpeg provavelmente decodifica ativamente todos os quadros.
Existe uma maneira de otimizar este comando e de alguma forma dizer ao FFmpeg para pular todos os quadros entre os necessários. Eu tentei este filtros:
-vf fps=fps=1
-vf "'select=eq(pict_type,I)'"
1/5
ou 1/10
como FPS Mas estes não tiveram influência no uso da CPU, apenas a qualidade da imagem é pior com (2) contra o comando original ( -r 1
).
Eu estou bem com uma miniatura por segundo (ou extraindo quadros-chave apenas), e uma miniatura por 10 segundos também é ok, mas eu acho que o problema real é provavelmente a decodificação H.264.
Tags ffmpeg streaming thumbnails h.264