Dopo aver testato molte possibilità, ho una riga di comando perfetta per la creazione di miniature da uno streaming live:
ffmpeg -i rtmp://srvIp/h264.stream -r 1 -an -updatefirst 1 -y thumbnail.jpg
Aggiorna un JPG ogni secondo e il web server HTTP utilizza JPG senza problemi, mostrandolo ai client web.
L'unico problema è: ogni comando utilizza dal 5 al 10% della CPU . Se voglio miniature di 20 canali, la CPU non ha energia per questo. FFmpeg probabilmente decodifica attivamente tutti i frame.
C'è un modo per ottimizzare questo comando e in qualche modo dire a FFmpeg di saltare tutti i frame tra quelli necessari. Ho provato questi filtri:
-vf fps=fps=1
-vf "'select=eq(pict_type,I)'"
- utilizzando
1/5
o1/10
come FPS
Ma questi non hanno influenzato l'utilizzo della CPU, solo la qualità dell'immagine è peggiore con (2) rispetto al comando originale ( -r 1
).
Sto bene con un'anteprima al secondo (o estraendo solo i fotogrammi chiave) e anche un'anteprima per 10 secondi va bene, ma penso che il vero problema sia probabilmente la decodifica H.264.