Convert ISO to MKV with script

Discussion in 'macOS' started by frankeman90, Jan 16, 2016.

  1. frankeman90 macrumors newbie

    Joined:
    Oct 1, 2014
    #1
    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)

    !/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
     
  2. MacUser2525 macrumors 68000

    MacUser2525

    Joined:
    Mar 17, 2007
    Location:
    Canada
    #2
    Highly doubt I will get to see response as this thread will most likely be deleted for piracy discussion but.. The commands on the page fail because you have not installed homebrew first step is to do that. For it you will have had to install Xcode or it will fail to install. Once you have installed the homebrew version of makemkv before commands on page are run then you have chance of the script doing what you want.
     
  3. frankeman90 thread starter macrumors newbie

    Joined:
    Oct 1, 2014
    #3
    --- Post Merged, Jan 16, 2016 ---
    This is - believe it or not - not for pirated media.

    I have installed homebrew, and did an install of The app that way. Dont know about xcode though. Is that needed also and where do i get it?
     
  4. MacUser2525 macrumors 68000

    MacUser2525

    Joined:
    Mar 17, 2007
    Location:
    Canada
    #4
    App store but it had to be installed already or homebrew would have told you it is needed for its compiling of the packages it does when it installs them.
     
  5. bumblebritches5 macrumors 6502

    Joined:
    Nov 7, 2012
  6. Chloec macrumors member

    Chloec

    Joined:
    Nov 27, 2014
    #6
    search iso to mkv in google or app store, or reviews article in google.
     

Share This Page