This animation, which I created by accident while trying to do something else, struck me as eye catching.
This is the complete C code used to generate video frames as individual PNM image files:
// // offcut.c // Written by Ted Burke, 1-2-2018 // See http://batchloaf.com // // To build: // gcc -O3 -Wall -o offcut offcut.c -lm // // To run: // ./offcut 0 1 400 // // To combine individual frames into a movie: // // ffmpeg -framerate 8 -f image2 -s 1920x1080 -i %03d.pnm -framerate 8 -s 1920x1080 -i %03d.pnm -filter_complex "[0:v:0][1:v:0]concat=n=2:v=1[outv];[outv]scale=1920x1080[outv]" -c:v libx264 -preset slow -crf 17 -pix_fmt yuv420p -c:a copy -map [outv] -r 8 offcut.mkv // #include <stdio.h> #include <stdlib.h> #include <math.h> #include <complex.h> #define W 3840 #define H 2160 unsigned char p[H][W][3] = {0}; int main(int argc, char **argv) { int n, N=25, x, y, v, t, t_start, t_step, T; complex double z, c; double zlim = 10.0; char filename[1024]; FILE *f; t_start = atoi(argv[1]); t_step = atoi(argv[2]); T = atoi(argv[3]); fprintf(stderr, "t_start:%d t_step:%d T:%d\n", t_start, t_step, T); for (t=t_start ; t<T ; t+=t_step) { // Vary parameter c = -0.825 -0.1*I - 0.2*cexp(I*t*2.0*M_PI/T); // Generate pixels for (y=0 ; y<H ; ++y) for (x=0 ; x<W ; ++x) { z = 0.002 * (I*(x-W/2.0) + (y-H/2.0)); // This iterating function makes a good texture - it's unusual! for (n=0 ; n<N && cabs(z)<zlim ; ++n) z = 1 / (cpow(z,z+c) + c); // Colour mapping from angle of final z value to shade of blue v = 128.0 + 127.0 * carg(z)/M_PI; p[y][x][0] = v>127 ? 2*(v-127) : 0; p[y][x][1] = v>127 ? 2*(v-127) : 0; p[y][x][2] = v>127 ? 255 : 2*v; } // Write current frame to a PNM image file sprintf(filename, "%03d.pnm", t); fprintf(stderr, "Writing file %s...", filename); f = fopen(filename, "w"); fprintf(f, "P6\n%d %d\n255\n", W, H); fwrite(p, 3, W*H, f); fclose(f); fprintf(stderr, "done\n"); } return 0; }
I decided to render the frames at double resolution (3840 x 2160 px) and then scale back down to 1080p resolution during the video conversion. This was the ffmpeg command I used to combine PNM images into a single video at 8 frames per second, with the full sequence repeated twice:
ffmpeg -framerate 8 -f image2 -s 1920x1080 -i %03d.pnm -framerate 8 -s 1920x1080 -i %03d.pnm -filter_complex "[0:v:0][1:v:0]concat=n=2:v=1[outv];[outv]scale=1920x1080[outv]" -c:v libx264 -preset slow -crf 17 -pix_fmt yuv420p -c:a copy -map [outv] -r 8 mugz.mkv