#!/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}"` CONFIG="${3}" SINGLE="${4}" if [ ! -d "${INPUT}" ]; then echo "Directory ${1} doesn't exist" exit 2 fi mkdir -p "${OUTPUT}" MULTIPLE=3 FPS=24 RATE=`echo "scale=0;${FPS}/${MULTIPLE}" | bc` WIDTH=404 HEIGHT=374 DOTSIZE=2 MAXGENERATIONS=25 MAXPARTICLES=1200 MINDOTSIZE=1.5 LINE=1.5 FILL=true MODE="stipple" #stipple/tsp if [[ "${CONFIG}" == "" ]]; then echo "Please provide a config file" exit 1 fi IMAGES="" stipple () { png="${1}" frame="${2}" filename=`basename "${png}"` name=`echo "${filename}" | cut -d'.' -f1` num=`echo "${name}" | awk -F'_' '{print $(NF)}'` tmp=`mktemp`.png bash white.sh "${png}" "${tmp}" source "${CONFIG}" cd ~/src/stipple_gen/ bash stipple_gen.sh \ --inputImage "${tmp}" \ --outputImage "${OUTPUT}/${name}_rendered.png" \ --outputSVG "${OUTPUT}/${name}.svg" \ --config "${CONFIG}" if [[ "${invert}" == "true" ]]; 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 CURRENT=$(pwd) cd / svgsort --no-adjust "${OUTPUT}/${name}.svg" "${opt}" cd $CURRENT mv "${opt}" "${OUTPUT}/${name}.svg" fi } if [[ "${SINGLE}" != "" ]]; then i=0; echo "Rendering a single frame, #${SINGLE}" #files in dir for png in "${INPUT}/"*.png ; do if [[ ${i} -eq ${SINGLE} ]]; then stipple "${png}" ${i} break fi i=$((i+1)) done exit fi i=0; #files in dir for png in "${INPUT}/"*.png ; do stipple "${png}" ${i} 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 ${RATE} -f image2 -i "${IMAGES}" \ -r ${FPS} \ -c:v prores_ks -profile:v 3 \ "${VIDEO}"