Call script with Hazel – and help with ISO►MKV

Get help. Get answers. Let others lend you a hand.

Moderator: Mr_Noodle

I have a fully automated download process and using hazel to move movies to Plex.
Having spent 20+ hours to try and find a solution to the last step I am almost giving up.
What I have is lots of IMG and ISO files that are unrared. Theese I unpack with TheUnarchiver to get VIDEO_TS folders.
BUT – how do I automate the process of making MKV:s of theese? I simply want a batch processor/script for MKV but cant find any that seems to work.

Found the script below, but cant understand how to use it with hazel – and cant find a way to install MKV to make it command-line available (the commands on the page result in an error).

https://github.com/hcr/convertingMkvScript

ANY help most appriciated.

(I want all subtitles, all languages etc and preserve filename from folder so that Plex can identify the movie)

I am aware of that this might not be an applescript, but guess anyone here knows how to get this to work anyway :-)

!/bin/sh

INPUT_DIR="/Users/AF/Desktop/hotfolder_videodrive"
OUTPUT_DIR="/Users/AF/Desktop/videodrive_klara"
MIN_LENGTH_IN_SECONDS=120
TEMPORARY FOLDERS

TEMP_FOLDER_PATH=""
LOGS_FOLDER_PATH=""
RESULT FOLDERS

SUCCES_FOLDER_PATH=""
FAILED_FOLDER_PATH=""
SCRIPT VARIABLES

NEW_FILE_PATH_WITH_EXT=""
echoStars() {
echo "***********************************************************"
}
echoStripes() {
echo "-----------------------------------------------------------"
}
move() {
local destination=$(dirname "${2}")
mkdir -pv "${destination}"
mv -n$3 -- "${1}" "${2}"
}
createLoggingFolder() {
local name="logs"
local counter=1
local suffix=""
local keep_going=true
while $keep_going; do
if [ -e "${OUTPUT_DIR}/${name}${suffix}" ]; then
suffix="_${counter}"
counter=$((counter + 1))
else
keep_going=false
fi
done
LOGS_FOLDER_PATH="${OUTPUT_DIR}/${name}${suffix}"
mkdir "${LOGS_FOLDER_PATH}"
}
createSuccessFolder() {
SUCCES_FOLDER_PATH="${LOGS_FOLDER_PATH}/success"
mkdir "${SUCCES_FOLDER_PATH}"
}
createFailedFolder() {
FAILED_FOLDER_PATH="${LOGS_FOLDER_PATH}/failure"
mkdir "${FAILED_FOLDER_PATH}"
}
createTempFolder() {
local name="temp"
local counter=1
local keep_going=true
while $keep_going; do
if [ -e "${OUTPUT_DIR}/${name}${counter}" ]; then
counter=$((counter + 1))
else
keep_going=false
fi
done
TEMP_FOLDER_PATH="${OUTPUT_DIR}/${name}${counter}/"
mkdir "${TEMP_FOLDER_PATH}"
}
deleteTempFolder() {
if [ "$(ls -A $TEMP_FOLDER_PATH)" ]; then
echo "Temporary folder ${TEMP_FOLDER_PATH} is not empty, so not removing it"
else
rmdir "${TEMP_FOLDER_PATH}"
fi
}
echoFoldersToProcess() {
echoStars
echo "Input directory : " $INPUT_DIR
echo "Output directory : " $OUTPUT_DIR
echo "Minimum length in seconds : " $MIN_LENGTH_IN_SECONDS
echo "Directories to be processed :"
find "${INPUT_DIR}" -type d -iname "VIDEO_TS" | while read path_to_be_processed;
do
echo " ${path_to_be_processed}"
done
echoStars
}
tryToMakeMkv() {
eval "makemkvcon -r --minlength=$MIN_LENGTH_IN_SECONDS mkv file:\"${1}\" all \"${TEMP_FOLDER_PATH}\" > \"${LOGS_FOLDER_PATH}/makeMkv.log\""
}
checkIfMkvWasCreated() {
if [ "$(ls -A $TEMP_FOLDER_PATH)" ]; then
echo "Success"
move "${LOGS_FOLDER_PATH}/makeMkv.log" "${SUCCES_FOLDER_PATH}${1}.log"
else
echo "Failure"
move "${LOGS_FOLDER_PATH}/makeMkv.log" "${FAILED_FOLDER_PATH}${1}.log"
fi
}
determineNewFileName() {
local new_file_path="${OUTPUT_DIR}${1}"
local counter=1
local suffix=""
local extension=".mkv"

local keep_going=true
while $keep_going; do
if [ -e "${new_file_path}${suffix}${extension}" ]; then
suffix="_${counter}"
counter=$((counter + 1))
else
keep_going=false
fi
done

NEW_FILE_PATH_WITH_EXT="${new_file_path}${suffix}${extension}"
}
renameMkvs() {
if [ "$(ls -A $TEMP_FOLDER_PATH)" ]; then
for file in "${TEMP_FOLDER_PATH}"*
do
determineNewFileName "${1}"
move "${file}" "${NEW_FILE_PATH_WITH_EXT}" v
done
fi
}
echoFinished() {
echoStars
local resultfile="${LOGS_FOLDER_PATH}/result.log"
echoStars >> "${resultfile}"

if [ "$(ls -A $SUCCES_FOLDER_PATH)" ]; then
echo "Successfully converted:" >> "${resultfile}"
find "${SUCCES_FOLDER_PATH}" -type f -iname "*.log" | while read log;
do
local logfile="${log%.log}"
echo "${logfile#${SUCCES_FOLDER_PATH}/}" >> "${resultfile}"
done
echoStars >> "${resultfile}"
fi

if [ "$(ls -A $FAILED_FOLDER_PATH)" ]; then
echo "Failure to convert:" >> "${resultfile}"
find "${FAILED_FOLDER_PATH}" -type f -iname "*.log" | while read log;
do
local logfile="${log%.log}"
echo "${logfile#${FAILED_FOLDER_PATH}/}" >> "${resultfile}"
done
echoStars >> "${resultfile}"
fi

echo "Finished script"
echo "Check ${LOGS_FOLDER_PATH}/result.log for the result"
}
process() {
echoFoldersToProcess
createLoggingFolder
createSuccessFolder
createFailedFolder

echoStars

find "${INPUT_DIR}" -type d -iname "VIDEO_TS" | while read path_to_be_processed;
do
echo "Processing directory: ${path_to_be_processed}"

local without_input_folder=${path_to_be_processed#${INPUT_DIR}}
local media_name=${without_input_folder%/[V,v][I,i][D,d][E,e][O,o]_[T,t][S,s]}

createTempFolder

tryToMakeMkv "${path_to_be_processed}"

checkIfMkvWasCreated "${media_name}"

renameMkvs "${media_name}"

deleteTempFolder

echoStripes
done

echoFinished
}
if [ $# -eq 0 ]; then
echo "Please supply on of these arguments: info, process"
elif [ "$1" = "info" ]; then
echoFoldersToProcess
elif [ "$1" = "process" ]; then
process
else
echo "Invalid argument [${1}]. Please supply on of these arguments: info, process"
fi
Frank90
 
Posts: 6
Joined: Sat Jan 16, 2016 5:28 am

Debugging the script is a bit beyond the support I can give but first off, that is a shell script, not AppleScript, so you'll want to use the "Run shellscript" action instead.

You'll have to figure out how to adapt the script. That github page is sparse on details of what parameters it takes. Hazel only sends in one, which is the file being matched. You'll have to start gaining some proficiency in shell scripting to take it from there.
Mr_Noodle
Site Admin
 
Posts: 11951
Joined: Sun Sep 03, 2006 1:30 am
Location: New York City


Return to Support