#!/bin/bash -e
#============================================================================#
# Конвертация видео в группу файлов (в т.ч. ускоренное воспроизведение       #
# ускорение производится фиксированно в 1.6 раз                              #
#============================================================================#
# (C) Denis Smirnov <mithraen@freesource.info>          http://mithraen.ru/  #
#============================================================================#


ARGS=`getopt -n vfast -s bash -o o: -- "$@"` ||:
eval set -- "$ARGS"

while true;
do
    case "$1" in
        -o)
            # Output to one file only
            OUTPUT_DIR=$(dirname "$2")
            if [ ! -d "$OUTPUT_DIR" ]; then
                echo "Directory: $OUTPUT_DIR not found"
                exit -1
            fi
            OUTPUT_DIR=`realpath "$OUTPUT_DIR"`
            OUTPUT_FN=${2##*/}
            OUTPUT_FILE="$OUTPUT_DIR/$OUTPUT_FN";
            shift
            shift
            ;;
    --)
            shift
            break;;
    esac
done

IN="$1"

if [ ! -f "$IN" ]; then
    exit -1
fi

IN=$(realpath "$IN")

dir=$(dirname "$IN")
cd "$dir"

# каталог, куда отправляем результат (или временный каталог, если указана опция -o)
outdir=${IN%.*}
mkdir -p "$outdir"

# делаем копию оригинального файла
ln "$IN" "$outdir"/original

# извлекаем звук (конвертируя сразу же в wav)
avconv -i "$IN" -vn -y "$outdir"/in.wav

# извлекаем видео
avconv -i "$IN" -an -y -vcodec copy "$outdir"/in.mkv

# конвертируем видео в ускоренный вариант и сразу конвертируем в lossless H.264
avconv -i "$outdir"/in.mkv -vf setpts=0.625*PTS -an \
     -vcodec libx264 -pre:v lossless_ultrafast \
    "$outdir"/fast.mkv

# конвертируем аудио в ускоренный формат
echo "Audio file converting -- tempo"
sox --norm=-3 "$outdir"/in.wav "$outdir"/fast.wav tempo 1.6

# конвертируем ускоренное аудио в mp3
sox "$outdir"/fast.wav "$outdir"/fast.mp3

avconv -i "$outdir"/fast.mkv -i "$outdir"/fast.mp3 -acodec copy -vcodec copy  "$outdir"/out-fast.mkv

if [ ! -z "$OUTPUT_FILE" ]; then
    mv "$outdir"/out-fast.mkv "$OUTPUT_FILE"
    rm -f "$outdir/original"
    rm -f "$outdir"/{in,fast}.{mkv,wav,mp3,avi}
    rmdir "$outdir"
fi
