if [ "$#" -ne 2 ]; then echo "usage episodes2mkv.sh [path to vdr recording] [path to movies]"; exit 1; fi if [ ! -d "$1" ]; then echo "vdr recording directory not valid: $1"; exit 1; fi if [ ! -d "$2" ]; then echo "movie directory not valid: $2"; exit 1; fi echo "vdr recordings directory: $1"; echo "movie directory: $2"; echo `pwd` readarray -t LINES < "$1/episodes.lst" echo "lines ${#LINES[@]}"; FILE_LIST="$1/episodes.lst" for LINE in "${LINES[@]}"; do #while IFS= read -r LINE #do echo "processing '$LINE'"; cd "$1/$LINE"; MOVIENAME=$(sed -n -e 's/^T \(.*\)$/\1/p' info); EPISODE=$(sed -n -e 's/^S \(.*\)$/\1/p' info); BASE_PATH="$2/$MOVIENAME/$EPISODE" DEST_NAME="$2/$MOVIENAME/$EPISODE.mkv" TRIMMED_NAME="$MOVIENAME.trimmed.ts" if [ ! -f "$DEST_NAME" ]; then echo "converting $MOVIENAME - $EPISODE"; STAMPS=($(sed -n -e 's/^\([0-9:]\+.[0-9]\{2\}\).*$/\1/p' marks)) if [ "${#STAMPS[@]}" -ne "2" ]; then echo "more than two cut marks found; skipping"; echo "${#STAMPS[@]}"; exit 1; fi; echo ${STAMPS[0]} echo ${STAMPS[1]} FILENAMES=$(ls *.ts | paste -sd "|" -); # if [ ! -d "$2/$MOVIENAME" ]; then # echo mkdir "$2/$MOVIENAME"; # fi if [ ! -f "$TRIMMED_NAME" ]; then echo ffmpeg -i "concat:$FILENAMES" -ss ${STAMPS[0]} -to ${STAMPS[1]} -c:v copy -c:a copy "$TRIMMED_NAME"; ffmpeg -nostdin -i "concat:$FILENAMES" -ss ${STAMPS[0]} -to ${STAMPS[1]} -c:v copy -c:a copy "$TRIMMED_NAME"; fi echo ffmpeg -i "$TRIMMED_NAME" -c:v libx264 -c:a copy "'$EPISODE.mkv'"; ffmpeg -nostdin -i "$TRIMMED_NAME" -c:v libx264 -c:a copy "$EPISODE.mkv"; else echo "video file $DEST_NAME already exists; skipping"; fi cd -; done < "$FILE_LIST"