Primeiramente, você precisa alimentar display RGB:-
bytes brutos, não uma string hexadecimal codificada como você está construindo com esse hexdump | sed | tr
pipeline.
Em segundo lugar, você não está dando bytes suficientes: você precisa de 3 bytes por pixel, um para cada canal de cor.
Isso faz o que você quer:
mx=320;my=256;head -c "$((3*mx*my))" /dev/urandom | display -depth 8 -size "${mx}x${my}" RGB:-
Para salvar diretamente no PNG, você pode fazer isso:
mx=320;my=256;head -c "$((3*mx*my))" /dev/urandom | convert -depth 8 -size "${mx}x${my}" RGB:- random.png
Veja uma imagem de saída típica:
Sevocêdesejacriarumaanimação,nãoénecessáriocriaresalvarquadrosindividuais.Vocêpodealimentarumfluxodebytesdiretodiretoparaffmpeg/avconv,porexemplo
mx=320;my=256;nframes=100;ddif=/dev/urandombs="$((mx*my*3))" count="$nframes" | avconv -r 25 -s "${mx}x${my}" -f rawvideo -pix_fmt rgb24 -i - random.mp4