diff --git a/policy.xml b/policy.xml
deleted file mode 100644
index 25f583c..0000000
--- a/policy.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
-
-
-
-
-
-]>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/th.sh b/th.sh
deleted file mode 100644
index 1044e15..0000000
--- a/th.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/bin/bash
-#
-#
-# Dependencies/Requirements:
-# 1. ffmpeg
-# 2. ImageMagick with modified policy.xml (avaliable on this git)
-#
-# Usage:
-# . th.sh COLUMNS ROWS SIZE INPUT
-#
-# COLUMNS means number of columns;
-# ROWS means nubler of rows;
-# SIZE is the length of the longer side of the output, e.g., 1920 if you want
-# to get an 1920*1080 output image;
-# INPUT is the path to the input file;
-#
-# Example:
-# . th.sh 3 14 1920 video.mp4
-if [[ $# != 4 ]]; then
- echo "wrong number of arguments
-
-Usage:
-. th.sh COLUMNS ROWS SIZE INPUT
-COLUMNS means number of columns;TILE is in the form 'MxN' (where M * N should match NFRAMES), e.g., 4x4;
-ROWS means nubler of rows;
-SIZE is the length of the longer side of the output, e.g., 1920 if you want
-to get an 1920*1080 output image;
-INPUT is the path to the input file;
-OUTPUT is the path to the output file (make sure intermediate directories
-exist).
-
-Example:
-. th.sh 3 14 1920 video.mp4
-"
- return 1
-fi
-NFRAMES=$(echo "scale=0;$1*$2" | bc)
-TILE=$(echo "$1x$2")
-SIZE=$3
-INPUT=$4
-DURX=$(ffmpeg -i "$4" 2>&1 | grep Duration | awk '{print $2}' | tr -d ,)
-DURATION=$(ffmpeg -i "$4" 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' | awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }')
-RES=$(ffmpeg -i "$4" 2>&1 | grep -oP 'Stream .*, \K[0-9]+x[0-9]+')
-FILESIZE=$(du -sm "$4" | awk '{print $1}')
-TMPDIR=/tmp/thumbnails-${RANDOM}/
-mkdir $TMPDIR
-for (( VARIABLE=0; VARIABLE>${TMPDIR}myfile.txt
-echo $RES >>${TMPDIR}myfile.txt
-echo "$FILESIZE Mb" >>${TMPDIR}myfile.txt
-echo $DURX >>${TMPDIR}myfile.txt
-convert -size ${SIZE}x150 -fill black -interline-spacing 10 -background white -pointsize 20 -gravity west caption:@${TMPDIR}myfile.txt ${TMPDIR}text1.jpg
-convert ${TMPDIR}output.jpg -resize ${SIZE}x${SIZE} ${TMPDIR}th.jpg
-thewidth=$(identify -ping -format %w ${TMPDIR}th.jpg)
-convert ${TMPDIR}text1.jpg -crop ${thewidth}x150+0+0 ${TMPDIR}text.jpg
-montage ${TMPDIR}text.jpg ${TMPDIR}th.jpg -background white -geometry +0+0 -tile 1x2 thumbnails-${RANDOM}.jpg
diff --git a/thumbgen.sh b/thumbgen.sh
index 1a4252d..39f7c06 100644
--- a/thumbgen.sh
+++ b/thumbgen.sh
@@ -1,52 +1,38 @@
#!/bin/bash
-#
-#
-# Dependencies/Requirements:
-# 1. ffmpeg
-# ImageMagick dependence is REMOVED
-#
-# Usage:
-# . th.sh COLUMNS ROWS SIZE INPUT
-#
-# COLUMNS means number of columns;
-# ROWS means nubler of rows;
-# SIZE is the length of the longer side of the output, e.g., 1920 if you want
-# to get an 1920*1080 output image;
-# INPUT is the path to the input file;
-#
-# Example:
-# . th.sh 3 14 1920 video.mp4
-if [[ $# != 4 ]]; then
- echo "wrong number of arguments
-Usage:
-. th.sh COLUMNS ROWS SIZE INPUT
-COLUMNS means number of columns;TILE is in the form 'MxN' (where M * N should match NFRAMES), e.g., 4x4;
-ROWS means nubler of rows;
-SIZE is the length of the longer side of the output, e.g., 1920 if you want
-to get an 1920*1080 output image;
-INPUT is the path to the input file;
-OUTPUT is the path to the output file (make sure intermediate directories
-exist).
-
-Example:
-. th.sh 3 14 1920 video.mp4
-"
- return 1
+if [ -z "$1" ]; then
+ echo "usage: ./thumbgen.sh INPUT [COLUMNS=5] [ROWS=5] [SIZE=1600]"
+ exit
fi
-NFRAMES=$(echo "scale=0;$1*$2" | bc)
-TILE=$(echo "$1x$2")
-SIZE=$3
-INPUT=$4
-DURX=$(ffmpeg -i "$4" 2>&1 | grep Duration | awk '{print $2}' | tr -d ,)
-DURATION=$(ffmpeg -i "$4" 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' | awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }')
-RES=$(ffmpeg -i "$4" 2>&1 | grep -oP 'Stream .*, \K[0-9]+x[0-9]+')
-FILESIZE=$(du -sm "$4" | awk '{print $1}')
-TMPDIR=/tmp/thumbnails-${RANDOM}/
+
+# Define variables
+INPUT=$1
+COLUMNS=$2
+if [ -z "$COLUMNS" ]; then
+ COLUMNS=5
+fi
+ROWS=$3
+if [ -z "$ROWS" ]; then
+ ROWS=5
+fi
+SIZE=$4
+if [ -z "$SIZE" ]; then
+ SIZE=1600
+fi
+NFRAMES=$(echo "scale=0;$COLUMNS*$ROWS" | bc)
+DURX=$(ffmpeg -i "$INPUT" 2>&1 | grep Duration | awk '{print $2}' | tr -d ,)
+DURATION=$(ffmpeg -i "$INPUT" 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' | awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }')
+RES=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 "$INPUT")
+FILESIZE=$(du -sm "$INPUT" | awk '{print $1}')
+FONT="/System/Library/Fonts/Supplemental/PTMono.ttc"
+METADATA_PX=90
+TMPDIR="/tmp/thumbnails-${RANDOM}/"
mkdir $TMPDIR
+
for (( VARIABLE=0; VARIABLE>${TMPDIR}myfile.txt
-echo " $RES" >>${TMPDIR}myfile.txt
-echo " $FILESIZE Mb" >>${TMPDIR}myfile.txt
-echo " $DURX" >>${TMPDIR}myfile.txt
-thewidth=$(ffmpeg -i ${TMPDIR}output.jpg 2>&1 |grep Video|awk '{ split( $8, pieces, /[x,]/ ) ; print pieces[1] }')
-theheight=$(ffmpeg -i ${TMPDIR}output.jpg 2>&1 |grep Video|awk '{ split( $8, pieces, /[x,]/ ) ; print pieces[2] }')
-theheight=$(echo "scale=0;$theheight*$SIZE/$thewidth" | bc)
-ffmpeg -i ${TMPDIR}output.jpg -vf scale=${SIZE}x${theheight} -vframes 1 ${TMPDIR}th.jpg
-theheight=$(echo "$theheight+150" | bc)
-ffmpeg -f lavfi -i color=white:${SIZE}x${theheight} -i ${TMPDIR}th.jpg -filter_complex "[0:v][1:v] overlay=0:150,drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf:fontsize=20:fontcolor=black:x=30:y=20:textfile=${TMPDIR}myfile.txt" -vframes 1 th${RANDOM}.jpg
+
+# Merge thumbnails into tile image
+ffmpeg -pattern_type glob -i "${TMPDIR}*.png" -filter_complex tile=${COLUMNS}x${COLUMNS}:margin=4:padding=4:color=white ${TMPDIR}output.png
+
+# Output metadata to file
+echo "Filename: $INPUT" >>${TMPDIR}metadata.txt
+echo "Resolution: $RES" >>${TMPDIR}metadata.txt
+echo "Filesize: $FILESIZE Mb" >>${TMPDIR}metadata.txt
+echo "Duration: $DURX" >>${TMPDIR}metadata.txt
+
+# Get dimensions of tile image
+thewidth=$(ffmpeg -i ${TMPDIR}output.png 2>&1 |grep Video|awk '{ split( $6, pieces, /[x,]/ ) ; print pieces[1] }')
+theheight=$(ffmpeg -i ${TMPDIR}output.png 2>&1 |grep Video|awk '{ split( $6, pieces, /[x,]/ ) ; print pieces[2] }')
+
+# Redefine height & scale (according to $SIZE)
+scaledheight=$(echo "scale=0;$theheight*$SIZE/$thewidth" | bc)
+ffmpeg -i ${TMPDIR}output.png -vf scale=${SIZE}x${scaledheight} -vframes 1 ${TMPDIR}th.png
+
+# Add space to the top of the image
+finalheight=$(echo "$scaledheight+$METADATA_PX" | bc)
+
+# Add Metadata
+ffmpeg -f lavfi -i color=black:${SIZE}x${finalheight} -i ${TMPDIR}th.png \
+-filter_complex "[0:v][1:v] overlay=0:$METADATA_PX,drawtext=fontfile=$FONT:fontsize=20:fontcolor=white:x=10:y=10:textfile=${TMPDIR}metadata.txt" \
+-vframes 1 th${RANDOM}.png
diff --git a/thumbnails-5455.jpg b/thumbnails-5455.jpg
deleted file mode 100644
index 80e9d93..0000000
Binary files a/thumbnails-5455.jpg and /dev/null differ