For the third variation I began to explore rhythm further by repeating the random segments a number of times. I used the script from Variation #2 – although I only created 20 segments – and then repeated these between two and six times each.
Observations
This variation bears more resemblance to a skipping CD than the previous two. The possibility of this being performed by live musicians becomes impossible due to the very short length of some of the segments.
Code
This script requires libav to run and has been tested on Ubuntu 13.04.
#!/bin/bash
#Usage: ./movie_cut.sh /path/to/file.avi
#e.g. ./movie_cut.sh video.avi
filenumber=$(printf "%05d")
while [ $filenumber -le 20 ]
do
#calculate the length of the video
length=`expr $(avprobe -loglevel error -show_streams $1 | grep duration | cut -f 2 -d = | head -1 | cut -d "." -f 1) \* 100`
#start position
startPos=$(echo "scale=2;$(shuf -i 1-$length -n 1) / 100" | bc | sed -e s/^/0/)
#define random duration (up to 0.999 seconds)
duration=$(echo "0.$RANDOM")
#get path of file
path=$( readlink -f "$( dirname "$1" )" )
#get filename minus extension
file=$(basename "$1")
filename="${file%.*}"
#cut the video
avconv -i $1 -ss $startPos -t $duration -qscale 0 -ab 384k -y "$path"/"$filenumber"_"$filename"_cut.avi
filenumber=`expr $filenumber + 1`
filenumber=$(printf "%05d" $filenumber)
done
The following script was then run on the output files from the previous script. It creates numbered duplicates of the source files.
#!/bin/bash
for file in *.avi
do
#number of times to duplicate the file (between 1 and 6)
max=$(shuf -i 1-6 -n 1)
number=1
while [ $number -le $max ]
do
#get path of file
path=$( readlink -f "$( dirname "$file" )" )
#get filename minus extension
file=$(basename "$file")
filename="${file%.*}"
#get extension
extension="${file##*.}"
#copy the file to a new file
cp $file "$path"/"$filename"_"$number".$extension
number=`expr $number + 1`
done
done