#!/bin/bash ########################### # # Run the stipple_gen script on a sequence # of PNG images and then render the resulting # preview images into a video. # ########################### if [[ "${1}" == "" ]]; then echo "Please provide a directory of images as the first argument" exit 1 fi INPUT=`realpath "${1}"` OUTPUT=`realpath "${2}"` INVERT="${3}" SINGLE="${4}" if [ ! -d "${INPUT}" ]; then echo "Directory ${1} doesn't exist" exit 2 fi mkdir -p "${OUTPUT}" FRAMERATE=12 WIDTH=404 HEIGHT=374 DOTSIZE=6 MAXGENERATIONS=50 MAXPARTICLES=900 MINDOTSIZE=0.5 LINE=0.5 FILL=true MODE="stipple" #stipple/tsp if [[ "${INVERT}" == "" ]]; then INVERT="false" fi IMAGES="" stipple () { png="${1}" filename=`basename "${png}"` name=`echo "${filename}" | cut -d'.' -f1` num=`echo "${name}" | awk -F'_' '{print $(NF)}'` tmp=`mktemp`.png bash white.sh "${png}" "${tmp}" cd ~/src/stipple_gen/ bash stipple_gen.sh \ --display "false" \ --inputImage "${tmp}" \ --outputImage "${OUTPUT}/${name}_rendered.png" \ --outputSVG "${OUTPUT}/${name}.svg" \ --canvasWidth $WIDTH \ --canvasHeight $HEIGHT \ --dotSizeFactor $DOTSIZE \ --windowWidth $WIDTH \ --windowHeight $HEIGHT \ --maxGenerations $MAXGENERATIONS \ --minDotSize $MINDOTSIZE \ --line $LINE \ --fill $FILL \ --maxParticles $MAXPARTICLES \ --mode $MODE \ --invert $INVERT if [[ "${INVERT}" != "false" ]]; then convert "${OUTPUT}/${name}_rendered.png" -channel RGB -negate "${OUTPUT}/${name}_rendered.png" fi rm "${tmp}" cd ~/src/animation/ if [ "${MODE}" != "tsp" ]; then opt=`mktemp`.svg svgsort "${OUTPUT}/${name}.svg" "${opt}" mv "${opt}" "${OUTPUT}/${name}.svg" fi } i=0; #files in dir for png in "${INPUT}/"*.png ; do stipple "${png}" i=$((i+1)) done if [[ "${IMAGES}" == "" ]]; then part=`echo "${name}" | awk -F'_0' '{print $1}'` IMAGES="${OUTPUT}/${part}_%06d_rendered.png" VIDEO="${OUTPUT}/${part}.mov" fi ffmpeg -y -r ${FRAMERATE} -f image2 -i "${IMAGES}" \ -c:v prores_ks -profile:v 3 \ "${VIDEO}"