#!/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