diff --git a/transcode2mp4.sh b/transcode2mp4.sh new file mode 100755 index 0000000..c9f29d8 --- /dev/null +++ b/transcode2mp4.sh @@ -0,0 +1,124 @@ +#!/bin/bash + +INPUT="$1" +RESOLUTION="$3" +SEPARATE="$4" +TITLES=0 +OPTS_HIGHRES="-e x264 -q 20.0 -r 29.97 --pfr -a 1 -E faac -B 160 -6 dpl2 -R Auto -D 0.0 -f mp4 -4 -X 1024 --strict-anamorphic -m" +OPTS_LOWRES="-e x264 -q 20.0 -a 1 -E faac -B 128 -6 dpl2 -R 48 -D 0.0 -f mp4 -X 480 -m -x cabac=0:ref=2:me=umh:bframes=0:subme=6:8x8dct=0:trellis=0" +OPTS_SOURCE="-e x264 -q 20.0 -a 1,1 -E faac,ac3 -l 576 -B 160,160 -6 dpl2,auto -R Auto,Auto -D 0.0,0.0 -f mp4 --detelecine --decomb --strict-anamorphic -m -x b-adapt=2:rc-lookahead=50" +MODE="" +HANDBRAKE=HandBrakeCLI +DIRNAME=`dirname "$INPUT"` +BASENAME=`basename "$INPUT"` +OPTS="" +OUTPUT_DIR="$2" +OUTPUT_FILE_NAME="" + +if [ -z "$INPUT" ] +then + echo "usage $0 " + echo + echo "Input either file, VIDEO_TS directory or .ISO" + echo + echo -e "highres:\t1024 x 576" + echo -e "lowres:\t\t480 x 320" + echo -e "source:\t\tsame as source." + echo + echo -e "separate:\tseparate files for episodes of a serie." + exit 1 +fi + +if [ ! -z "$OUTPUT_DIR" ] +then + if [ ! -e "$OUTPUT_DIR" ] || [ ! -d "$OUTPUT_DIR" ] + then + echo "Output directory does not exist or is not a directory." + exit 1 + fi +else + echo "Output to current directory." + OUTPUT_DIR="." +fi + + +if [ ! -e "$INPUT" ] +then + echo "$INPUT does not exist!" + exit 1 +fi + +if [ -d "$INPUT" ] +then + MODE=DIR +else + MODE=FILE +fi + +echo "Input type is $MODE" + +case "$RESOLUTION" in + highres|HIGHRES ) + OPTS="$OPTS_HIGHRES" ;; + lowres|LOWRES ) + OPTS="$OPTS_LOWRES" ;; + source|SOURCE ) + OPTS="$OPTS_SOURCE" ;; + *) + echo "Resolution must be 'highres', 'source' or 'lowres'." + exit 1 + ;; +esac + +function titles () { + + TITLES=`./$HANDBRAKE -t 0 -i "$INPUT" 2>&1 | grep "+ title" | awk '{ print $3 }' | sed s/://g` + echo $TITLES +} + +if [ "$MODE" = "FILE" ] +then + mkdir -p "$OUTPUT_DIR/$DIRNAME" + OUTPUT_FILE_NAME="$OUTPUT_DIR/$DIRNAME/${BASENAME%.*}" +elif [ "$MODE" = "DIR" ] +then + echo "$INPUT" | grep -i video_ts >> /dev/null 2>&1 + if [ "$?" = "0" ] + then + INTERMEDIATE2=`basename "$DIRNAME"` + mkdir -p "$OUTPUT_DIR/$DIRNAME" + OUTPUT_FILE_NAME="$OUTPUT_DIR/$DIRNAME/$INTERMEDIATE2" + else + INTERMEDIATE2="$BASENAME" + mkdir -p "$OUTPUT_DIR/$DIRNAME/$INTERMEDIATE2" + OUTPUT_FILE_NAME="$OUTPUT_DIR/$DIRNAME/$INTERMEDIATE2/$INTERMEDIATE2" + fi + echo "INTERMEDIATE2 = $INTERMEDIATE2" +else + echo "Mode is not determined..." + exit 1 +fi + +if [ "$SEPARATE" = "separate" ] +then + TITLES=`titles $INPUT` + echo "TITLES = $TITLES" + ERROR=0 + + for x in $TITLES + do + HandBrakeCLI $OPTS -i "$INPUT" -o "$OUTPUT_FILE_NAME-$x.mp4" + if [ ! "$?" = "0" ] + then + ERROR="1" + fi + done + exit "$ERROR" +else + echo "Creating a single file." + HandBrakeCLI $OPTS -i "$INPUT" -o "$OUTPUT_FILE_NAME.mp4" +fi + + + +