#!/bin/bash

#
set -e

# loglevels: quiet, panic, fatal, error, warning, info, verbose, debug
LOGLEVEL=info

# set nice level, 20 lowest, -20 highest
NICE="nice -n 19"

# on pass or two pass encoding
PASSES="2"

###
###
###

if ! [ -f "$1" ]
then
	echo ""$!" is not a file. Nothing to convert."
	exit
fi

trap cleanup EXIT
cleanup() {
	    set +e
			rm -f "${PASSLOGFILE}-0.log" "${PASSLOGFILE}-0.log.mbtree" "${TEMPFILE}"
}

# get creation date
TIMESTAMP=$(stat -l -t "%Y-%m-%d %H:%M:%S" "$1" | awk '{ print $6" "$7 }')
# get betrate
BITRATE=$(ffmpeg -i "$1" 2>&1 |grep bitrate | awk '{print $6}')

# set task priority to low
NICE="nice -n 19"

EXT="mp4"

DIRECTORY=$(dirname "$1")
FILENAME=$(basename "$1")
NOW=$(date "+%Y%m%d%-H%M%S")
TEMPFILE="$DIRECTORY/.${FILENAME%.*}_${NOW}_ffmpeg.${EXT}"

#METADATA="-metadata creation_time=\"$TIMESTAMP\""

if [ "$PASSES" == "1" ]
then
	# 1 pass encoding
	$NICE ffmpeg -i "$1" -threads auto -loglevel "$LOGLEVEL" -vcodec libx264 -b:v "${BITRATE}k" -vf yadif=1 -acodec libfaac -ab 192k -ar 48000 -sn -metadata creation_time="$TIMESTAMP" -f mp4 -y "${TEMPFILE}"
else
	# 2 pass encoding
	PASSLOGFILE="$DIRECTORY/.${FILENAME%.*}_${NOW}_ffmpeg"
	$NICE ffmpeg -i "$1" -threads auto -loglevel "$LOGLEVEL" -vcodec libx264 -b:v "${BITRATE}k" -vf yadif=1 -pass 1 -passlogfile "$PASSLOGFILE" -an -sn -f rawvideo -y /dev/null
	$NICE ffmpeg -i "$1" -threads auto -loglevel "$LOGLEVEL" -vcodec libx264 -b:v "${BITRATE}k" -vf yadif=1 -pass 2 -passlogfile "$PASSLOGFILE" -acodec libfaac -ab 192k -ar 48000 -sn -metadata creation_time="$TIMESTAMP" -f mp4 -y "${TEMPFILE}"
	rm "${PASSLOGFILE}-0.log"
	rm "${PASSLOGFILE}-0.log.mbtree"
fi

touch -r "$1" "${TEMPFILE}"

if [ -f "${1%.*}.${EXT}" ]
then
	mv -f "${TEMPFILE}" "${1%.*}_${NOW}.${EXT}"
	echo
	echo "File "${1%.*}.${EXT}" already exist, moved to: "${1%.*}_${NOW}.${EXT}""
	echo
else
	mv -i "${TEMPFILE}" "${1%.*}.${EXT}"
fi

exit