En primer lugar, debe alimentar display RGB:-
bytes sin procesar, no una cadena hexadecimal codificada como la que está construyendo con esa hexdump | sed | tr
tubería.
En segundo lugar, no le está dando suficientes bytes: necesita 3 bytes por píxel, uno para cada canal de color.
Esto hace lo que quieres:
mx=320;my=256;head -c "$((3*mx*my))" /dev/urandom | display -depth 8 -size "${mx}x${my}" RGB:-
Para guardar directamente en PNG, puede hacer esto:
mx=320;my=256;head -c "$((3*mx*my))" /dev/urandom | convert -depth 8 -size "${mx}x${my}" RGB:- random.png
Aquí hay una imagen de salida típica:
Si desea hacer una animación, no es necesario crear y guardar cuadros individuales. Puede alimentar una secuencia de bytes sin procesar directamente a ffmpeg / avconv, p. Ej.
mx=320; my=256; nframes=100; dd if=/dev/urandom bs="$((mx*my*3))" count="$nframes" | avconv -r 25 -s "${mx}x${my}" -f rawvideo -pix_fmt rgb24 -i - random.mp4