Add a "stipple_random" script that, unlike the sine, uses shuf and a sequence of integers to generate a random number to apply as the "step" in the range of stipple settings
This commit is contained in:
parent
e8a262e64f
commit
55cc8ed22c
|
@ -0,0 +1,149 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
###########################
|
||||||
|
#
|
||||||
|
# Run the stipple_gen script on a sequence
|
||||||
|
# of PNG images and then render the resulting
|
||||||
|
# preview images into a video. Fluctuate settings
|
||||||
|
# via a sine wave.
|
||||||
|
#
|
||||||
|
###########################
|
||||||
|
|
||||||
|
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}"
|
||||||
|
|
||||||
|
PI=3.14159265359
|
||||||
|
FPS=24
|
||||||
|
MULTIPLE=3
|
||||||
|
STEP=$(echo "scale=6;360/45" | bc -l)
|
||||||
|
AMP=1.0
|
||||||
|
STARTANGLE=270
|
||||||
|
|
||||||
|
RATE=`echo "scale=0;${FPS}/${MULTIPLE}" | bc`
|
||||||
|
|
||||||
|
WIDTH=404
|
||||||
|
HEIGHT=374
|
||||||
|
|
||||||
|
DOTSIZE_MIN=1.8
|
||||||
|
DOTSIZE_MAX=6
|
||||||
|
DOTSIZE_HALF=`echo "scale=6;($DOTSIZE_MAX - $DOTSIZE_MIN) / 2" | bc`
|
||||||
|
DOTSIZE=`echo "scale=6;($DOTSIZE_MIN + $DOTSIZE_HALF)" | bc`
|
||||||
|
DOTSIZE_MULTIPLE=$DOTSIZE_HALF
|
||||||
|
PARTICLES_MIN=200
|
||||||
|
PARTICLES_MAX=1000
|
||||||
|
PARTICLES_HALF=`echo "($PARTICLES_MAX - $PARTICLES_MIN) / 2" | bc`
|
||||||
|
PARTICLES=$((PARTICLES_MIN+PARTICLES_HALF))
|
||||||
|
PARTICLES_MULTIPLE=$PARTICLES_HALF
|
||||||
|
|
||||||
|
if [[ "${CONFIG}" == "" ]]; then
|
||||||
|
echo "Please provide a config file"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
IMAGES=""
|
||||||
|
|
||||||
|
fluctuation () {
|
||||||
|
i=$1
|
||||||
|
ANGLE=$(echo "scale=6;$STARTANGLE+($i * $STEP)" | bc)
|
||||||
|
FLUCTUATION=$(echo "scale=6;s($ANGLE*($PI/180))*$AMP" | bc -l)
|
||||||
|
echo $FLUCTUATION
|
||||||
|
}
|
||||||
|
|
||||||
|
stipple () {
|
||||||
|
png="${1}"
|
||||||
|
frame="${2}"
|
||||||
|
rand="${3}"
|
||||||
|
filename=`basename "${png}"`
|
||||||
|
name=`echo "${filename}" | cut -d'.' -f1`
|
||||||
|
num=`echo "${name}" | awk -F'_' '{print $(NF)}'`
|
||||||
|
tmp=`mktemp`.png
|
||||||
|
fluc=`fluctuation $rand`
|
||||||
|
particles=`echo "scale=0;($PARTICLES-($fluc*$PARTICLES_MULTIPLE))/1" | bc`
|
||||||
|
dotsize=`echo "scale=6;$DOTSIZE+($fluc*$DOTSIZE_MULTIPLE)" | bc`
|
||||||
|
#echo $fluc
|
||||||
|
echo "maxParticles: $particles"
|
||||||
|
echo "dotSizeFactor: $dotsize"
|
||||||
|
|
||||||
|
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}" \
|
||||||
|
--dotSizeFactor $dotsize \
|
||||||
|
--maxParticles $particles
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
random_int () {
|
||||||
|
shuf -i 1-360 -n 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ "${SINGLE}" != "" ]]; then
|
||||||
|
echo "Rendering a single frame, #${SINGLE}"
|
||||||
|
#files in dir
|
||||||
|
for png in "${INPUT}/"*.png ; do
|
||||||
|
if [[ ${i} -eq ${SINGLE} ]]; then
|
||||||
|
r=$(random_int)
|
||||||
|
#echo $r
|
||||||
|
stipple "${png}" ${i} ${r}
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
i=$((i+1))
|
||||||
|
done
|
||||||
|
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
i=0;
|
||||||
|
#files in dir
|
||||||
|
for png in "${INPUT}/"*.png ; do
|
||||||
|
r=$(random_int)
|
||||||
|
#echo $r
|
||||||
|
stipple "${png}" ${i} ${r}
|
||||||
|
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}"
|
Loading…
Reference in New Issue