13 Commits

Author SHA1 Message Date
Chris A. Bunt
985f4b5235 upgrade audio disc logging capabilities
Enhance the logging methodology for audio discs. If an audio disc is
identified the musicbrainz or cddb disc ID is used as a logging file
name. This makes multipe rip processes easier to identify and
troubleshoot, and puts audio ripping logs in position to be cleaned by
the existing log-cleaning routine.
2017-06-04 23:43:54 -05:00
Chris A. Bunt
d7a66d4800 Enhance audio disc logging
Enhanced the logging methodology for audio discs. If an audio disc is
identified the musicbrainz or cddb disc ID is used as a logging file
name. This makes multipe rip processes easier to identify and
troubleshoot, and puts audio ripping logs in position to be cleaned by
the existing log-cleaning routine.
2017-06-04 23:31:38 -05:00
Benjamin Bryan
1376566d48 Merge pull request #52 from ahnooie/pushover
Pushover notify support
2017-03-12 22:11:00 -07:00
Benjamin Bryan
f7d96c204f add pushover support 2017-03-12 22:06:33 -07:00
Benjamin Bryan
f2f4413e28 Merge pull request #48 from ahnooie/multiple-drives-data-rip
eject correct drive
2017-02-23 20:42:33 -08:00
Benjamin Bryan
635aa556dd eject correct drive 2017-02-23 19:34:23 -08:00
Benjamin Bryan
067c7785c0 Fix blank mkv args (#41)
* MKV_ARGS shouldn't be quoted
2017-01-15 13:25:04 -08:00
Benjamin Bryan
a986bb450d Merge pull request #40 from ahnooie/readme
region info, git url
2017-01-15 08:12:03 -08:00
Benjamin Bryan
61a944f322 region info, git url 2017-01-15 08:08:37 -08:00
RandomNinjaAtk
4e0a5c4321 Added MakeMKV Profile, Plex and Main movie Support (#38)
* MakeMKV Args for Profiles

* Updating extra Folders to support Plex

Going to add a system wide variable that can be turned on to create the folder needed for Plex Extras Support. If it is not enabled, it will default to how Emby wants it, but add a ".plexignore" file to the extras folder. This will allow you to use both Plex and Emby at the same time. Same thing if you enable Plex Support, an ".ignore" file will be added to the Plex Featurettes folder to tell Emby to ignore those files since it does not match its naming convention..

* Added Plex Support Configuration 

This will enable the new modifications that I made to the "video_transcode.sh" script to enable Plex support, the other minor changes I made to the default Directories make it more Generic for support of Plex, Emby or Kodi use.

* Updating extra Folders to support Plex

Going to add a system wide variable that can be turned on to create the folder needed for Plex Extras Support. If it is not enabled, it will default to how Emby wants it, but add a ".plexignore" file to the extras folder. This will allow you to use both Plex and Emby at the same time. Same thing if you enable Plex Support, an ".ignore" file will be added to the Plex Featurettes folder to tell Emby to ignore those files since it does not match its naming convention..

* Detect and Move Main Movie File in Extras to Root Movie Folder

This addition detects the largest file in the "Extras/Featurettes" folder and assumes it is the main movie, which it will then move it to the root folder for detection in Plex/Emby/Kodi...

* Add Replaygain, Change Output/Various Artists Folder

Changed the default output directory to make it more Plex/Emby/Kodi friendly. Added Replaygain support as a default setting so applications that can utilize it will have the necessary tags. Updated the Various Artists folder path to actually group the ablums into a "Various Artists" folder for proper use with Plex/Emby/Kodi.

* Updated File Output for Various Artists Albums

Plex/Emby/Kodi prefer to have a separate folder for Various Artists, previously each artist had their own folder, but Various Artists albums did not get sorted that way. This is rectifying that.

* Changed Default Destination File Path

This is to enhance functionality and make it more Plex/Emby/Kodi friendly.

* Add Replaygain Tags For Albums & Songs

This adds replaygain tags to converted files so that media players that utilize those tags will be able to take advantage of it.

* Updated Install Process

Updated the Install Process to account for necessary folders for Sorting of media. This also enables it to be used in a standalone setup without the need for a NAS/File Server.

* Add Git and Regionset to Install Process

For new installs of Ubuntu, Git and Region Set for the disc drive is not installed. This adds that and helps the user to set the proper region for their disc drive for ripping media.

* Adding "-p" arguments to mkdir commands

This will simply the install setup by not requiring users to create those directories, previously the script would fail to move files unless one had manually created those directories. But now the script will automatically create them if they don't exist with the addition of this change!

* New Settings, File Permissions

This is to enable the script to change the file permissions of outputted files for enable the user to read/write/modify the files as desired. Currently this is not possible if storing the data locally because the data is locked to the sudo/root user.

* Enabled New File Permission Config Setting

Enabled the use of the new configuration setting to set file permission

* Added CHMOD_VALUE settings

This settings allows one to adjust the default file permissions if they desire.
2017-01-15 07:59:10 -08:00
muckngrind4
58cba08405 Added HB_ARGS (#39)
* Try to handle incorrect year coming from metaservices
* Added HB_ARGS for user configurable HandBrake arguments
* Changed default hb_args to match old hardcoded arguments
2017-01-14 15:12:39 -08:00
muckngrind4
1d5c60bd3f Yearmismatch (#33)
* Try to handle incorrect year coming from metaservices
2016-12-29 21:59:39 -08:00
muckngrind4
32ebce8d89 Move files to media directory for "all files" on bluray (#32)
* Added Emby processes to more scenarios
* Comment editiing
* Fix mv command
* Disable some shecllcheck errors
2016-12-20 19:20:55 -08:00
11 changed files with 371 additions and 67 deletions

View File

@@ -63,26 +63,26 @@ CDPARANOIAOPTS="--never-skip=40"
CDDISCID=cd-discid
# Give the base location here for the encoded music files.
OUTPUTDIR="/mnt/media/ARM/"
OUTPUTDIR="/mnt/media/ARM/Media/Music/"
# The default actions that abcde will take.
ACTIONS=cddb,playlist,getalbumart,read,encode,tag,move,clean
ACTIONS=cddb,playlist,getalbumart,read,encode,replaygain,tag,move,clean
# Decide here how you want the tracks labelled for a standard 'single-artist',
# multi-track encode and also for a multi-track, 'various-artist' encode:
OUTPUTFORMAT='${OUTPUT}/${ARTISTFILE}/${ALBUMFILE}/${TRACKNUM}.${TRACKFILE}'
VAOUTPUTFORMAT='${OUTPUT}/Various-${ALBUMFILE}/${TRACKNUM}.${ARTISTFILE}-${TRACKFILE}'
VAOUTPUTFORMAT='${OUTPUT}/Various Artists/${ALBUMFILE}/${TRACKNUM}.${ARTISTFILE}-${TRACKFILE}'
# Decide here how you want the tracks labelled for a standard 'single-artist',
# single-track encode and also for a single-track 'various-artist' encode.
# (Create a single-track encode with 'abcde -1' from the commandline.)
ONETRACKOUTPUTFORMAT='${OUTPUT}/${ARTISTFILE}/${ALBUMFILE}/${ALBUMFILE}'
VAONETRACKOUTPUTFORMAT='${OUTPUT}/Various-${ALBUMFILE}/${ALBUMFILE}'
VAONETRACKOUTPUTFORMAT='${OUTPUT}/Various Artists/${ALBUMFILE}/${ALBUMFILE}'
# Create playlists for single and various-artist encodes. I would suggest
# commenting these out for single-track encoding.
PLAYLISTFORMAT='${OUTPUT}/${ARTISTFILE}/${ALBUMFILE}/${ALBUMFILE}.m3u'
VAPLAYLISTFORMAT='${OUTPUT}/Various-${ALBUMFILE}/${ALBUMFILE}.m3u'
VAPLAYLISTFORMAT='${OUTPUT}/Various Artists/${ALBUMFILE}/${ALBUMFILE}.m3u'
# This function takes out dots preceding the album name, and removes a grab
# bag of illegal characters. It allows spaces, if you do not wish spaces add

1
.gitignore vendored
View File

@@ -4,3 +4,4 @@ archive/
config
temp/
test.py
*.sh~

View File

@@ -34,18 +34,24 @@ See: https://b3n.org/automatic-ripping-machine
## Install
If you have a new DVD drive that you haven't used before, some require setting the region before they can play anything. Be aware most DVD players only let you change the region a handful (4 or 5?) of times then lockout any further changes. If your region is already set or you have a region free DVD drive you can skip this step.
sudo apt-get install regionset
sudo regionset /dev/sr0
sudo apt-get install git
sudo add-apt-repository ppa:heyarje/makemkv-beta
sudo add-apt-repository ppa:stebbins/handbrake-releases
sudo add-apt-repository ppa:mc3man/xerus-media
sudo apt update
sudo apt install makemkv-bin makemkv-oss
sudo apt install handbrake-cli libavcodec-extra
sudo apt install abcde flac imagemagick glyrc cdparanoia
sudo apt install at
sudo apt install python3 python3-pip
sudo apt-get install libdvd-pkg
sudo dpkg-reconfigure libdvd-pkg
sudo su
add-apt-repository ppa:heyarje/makemkv-beta
add-apt-repository ppa:stebbins/handbrake-releases
add-apt-repository ppa:mc3man/xerus-media
apt update
apt install makemkv-bin makemkv-oss
apt install handbrake-cli libavcodec-extra
apt install abcde flac imagemagick glyrc cdparanoia
apt install at
apt install python3 python3-pip
apt-get install libdvd-pkg
dpkg-reconfigure libdvd-pkg
cd /opt
git clone https://github.com/ahnooie/automatic-ripping-machine.git arm
cd arm

View File

@@ -11,7 +11,7 @@ ARM_CHECK_UDF=true
# For BluRays attempts to extract the title from an XML file on the disc
GET_VIDEO_TITLE=true
# Skip transcoding if you want the original MakeMKV files as our final output
# Skip transcoding if you want the original MakeMKV files as your final output
# Thiw will produce the highest quality videos (and use the most storage)
# Note: RIPMETHOD must be set to "mkv" for this feature to work
SKIP_TRANSCODE=false
@@ -22,7 +22,7 @@ SKIP_TRANSCODE=false
# Base directory of ARM media directory
# Ripped and transcoded files end up here
ARMPATH="/mnt/media/ARM/"
ARMPATH="/mnt/media/ARM/Media/Unidentified/"
# Path to raw MakeMKV directory
# Destination for MakeMKV and source for HandBrake
@@ -30,7 +30,7 @@ RAWPATH="/mnt/media/ARM/raw/"
# Path to final media directory
# Destination for final file. Only used for movies that are positively identified
MEDIA_DIR="/mnt/media/ARM/emby/movies/"
MEDIA_DIR="/mnt/media/ARM/Media/Movies/"
# Path to directory to hold log files
# Make sure to include trailing /
@@ -39,6 +39,16 @@ LOGPATH="/opt/arm/logs/"
# How long to let log files live before deleting (in days)
LOGLIFE=1
########################
## File Permissions ##
########################
# Enabling this seting will allow you to adjust the default file permissions of the outputted files
# The default value is set to 777 for read/write/execute for all users, but can be changed below using the "CHMOD_VALUE" setting
# This setting is helpfuly when storing the data locally on the system
SET_MEDIA_PERMISSIONS=false
CHMOD_VALUE=777
########################
## MakeMKV Parameters ##
########################
@@ -54,6 +64,13 @@ MINLENGTH="600"
# DVD's will always default back to the "mkv" mode. If this is set to "backup" then you must also set HandBrake's MAINFEATURE to true.
RIPMETHOD="mkv"
# MakeMKV Arguments
# MakeMKV Profile used for controlling Audio Track Selection.
# This is the default profile MakeMKV uses for Audio track selection. Updating this file or changing it is considered
# to be advanced usage of MakeMKV. But this will allow users to alternatively tell makemkv to select HD audio tracks and etc.
# MKV_ARGS="--profile=/opt/arm/default.mmcp.xml"
MKV_ARGS=""
##########################
## HandBrake Parameters ##
##########################
@@ -76,6 +93,16 @@ HANDBRAKE_CLI=HandBrakeCLI
# However, it does not handle tv shows well at all. You will likely want this value to be false when ripping tv shows.
MAINFEATURE=false
# Additional HandBrake arguments.
HB_ARGS="--subtitle scan -F"
#####################
## Enable Plex Use ##
#####################
# Set this setting to true, to enable Plex Extras support
PLEX_SUPPORT=false
#####################
## Emby Parameters ##
#####################
@@ -85,6 +112,9 @@ MAINFEATURE=false
# Scan emby library after succesful placement of mainfeature (see above)
EMBY_REFRESH=false
# Use subfolders in Emby as described here: https://github.com/MediaBrowser/Wiki/wiki/Movie%20naming#movie-extras
EMBY_SUBFOLDERS=true
# Server parameters
# Server can be ip address or domain name
EMBY_SERVER=""
@@ -123,14 +153,24 @@ PB_KEY=""
# IFTTT Event Name
IFTTT_EVENT="arm_event"
# Pushover API User and Application Key
# Leave User key empty or comment out to disable Pushover notifications
PO_USER_KEY=""
PO_APP_KEY=""
# Determine logfile name
# use the label of the DVD/CD or else use empty.log
# this is required for udev events where there is no media available
# such as ejecting the drive
if [ -z "$ID_FS_LABEL" ]; then
LOGFILE="empty.log"
else
if [ -n "$ID_FS_LABEL" ]; then
LOGFILE=${ID_FS_LABEL}".log"
elif [[ -n "$ID_CDROM_MEDIA_TRACK_COUNT_AUDIO" && $(which abcde-musicbrainz-tool) ]]; then
LOGFILE=$(abcde-musicbrainz-tool --device "$DEVNAME" | cut -f1 -d ' ')".log"
elif [[ -n "$ID_CDROM_MEDIA_TRACK_COUNT_AUDIO" && $(which cd-discid) ]]; then
LOGFILE=$(cd-discid "$DEVNAME" | cut -f1 -d ' ')".log"
else
LOGFILE="empty.log"
fi
# Set full logfile path

View File

@@ -7,18 +7,21 @@ source "$ARM_CONFIG"
{
TIMESTAMP=$(date '+%Y%m%d_%H%M%S');
DEST="/mnt/media/ARM/${TIMESTAMP}_${ID_FS_LABEL}"
mkdir "$DEST"
DEST="/mnt/media/ARM/Media/Data/${TIMESTAMP}_${ID_FS_LABEL}"
mkdir -p "$DEST"
FILENAME=${ID_FS_LABEL}_disc.iso
#dd if=/dev/sr0 of=$DEST/$FILENAME
cat "$DEVNAME" > "$DEST/$FILENAME"
eject
eject "$DEVNAME"
if [ "$SET_MEDIA_PERMISSIONS" = true ]; then
chmod -R "$CHMOD_VALUE" "$DEST"
fi
} >> "$LOG"

69
default.mmcp.xml Normal file
View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<profile>
<!-- profile name - Default -->
<name lang="mogz">:5086</name>
<!-- Common MKV flags -->
<mkvSettings
ignoreForcedSubtitlesFlag="true"
useISO639Type2T="false"
setFirstAudioTrackAsDefault="true"
setFirstSubtitleTrackAsDefault="true"
setFirstForcedSubtitleTrackAsDefault="true"
insertFirstChapter00IfMissing="true"
/>
<!-- Settings overridable in preferences -->
<profileSettings
app_DefaultSelectionString="-sel:all,+sel:(favlang|nolang|single),-sel:(havemulti|havecore),-sel:mvcvideo,=100:all,-10:favlang"
/>
<!-- Output formats currently supported by MakeMKV -->
<outputSettings name="copy" outputFormat="directCopy">
<description lang="eng">Copy track as is</description>
<description lang="ger">Track 1:1 kopieren</description>
</outputSettings>
<outputSettings name="lpcm" outputFormat="LPCM-raw">
<description lang="eng">Save as raw LPCM</description>
<description lang="ger">Als RAW LPCM speichern</description>
</outputSettings>
<outputSettings name="wavex" outputFormat="LPCM-wavex">
<description lang="eng">Save as LPCM in WAV container</description>
<description lang="ger">Als LPCM im WAV-Container speichern</description>
</outputSettings>
<outputSettings name="flac-best" outputFormat="FLAC">
<description lang="eng">Save as FLAC (best compression)</description>
<description lang="ger">Als FLAC speichern (höchste Komprimierungsstufe)</description>
<extraArgs>-compression_level 12</extraArgs>
</outputSettings>
<outputSettings name="flac-fast" outputFormat="FLAC">
<description lang="eng">Save as FLAC (fast compression)</description>
<extraArgs>-compression_level 5</extraArgs>
</outputSettings>
<!-- Default rule - copy as is -->
<trackSettings input="default">
<output outputSettingsName="copy"
defaultSelection="$app_DefaultSelectionString">
</output>
</trackSettings>
<!-- Save LPCM mono or stereo as raw LPCM -->
<trackSettings input="LPCM-stereo">
<output outputSettingsName="lpcm"
defaultSelection="$app_DefaultSelectionString">
</output>
</trackSettings>
<!-- Put multi-channel LPCM into WAVEX container-->
<trackSettings input="LPCM-multi">
<output outputSettingsName="wavex"
defaultSelection="$app_DefaultSelectionString">
</output>
</trackSettings>
</profile>

View File

@@ -19,6 +19,7 @@ def getdvdtype():
""" Queries OMDbapi.org for title information and parses if it's a movie
or a tv series """
dvd_title = args.title
needs_new_year = "false"
try:
year = dvd_title[(dvd_title.rindex('(')):len(dvd_title)]
@@ -37,21 +38,39 @@ def getdvdtype():
if year is None:
year = ""
dvd_type = callwebservice(dvd_title, year)
dvd_type = callwebservice(dvd_title_clean, year)
# print (dvd_type)
# handle failures
# first see if there is a hyphen and split it
if (dvd_title.find("-") > -1):
dvd_title_slice = dvd_title[:dvd_title.find("-")]
dvd_title_slice =cleanupstring(dvd_title_slice)
dvd_type = callwebservice(dvd_title_slice)
# if still fail, then try slicing off the last word in a loop
while dvd_type == "fail" and dvd_title_clean.count('+') > 0:
dvd_title_clean = dvd_title_clean.rsplit('+', 1)[0]
dvd_type = callwebservice(dvd_title_clean)
# this is kind of kludgy, but it kind of work...
if (dvd_type == "fail"):
return dvd_type
# first try submitting without the year
dvd_type = callwebservice(dvd_title_clean, "")
# print (dvd_type)
if (dvd_type != "fail"):
#that means the year is wrong.
needs_new_year = "true"
if (dvd_type == "fail"):
# second see if there is a hyphen and split it
if (dvd_title.find("-") > -1):
dvd_title_slice = dvd_title[:dvd_title.find("-")]
dvd_title_slice =cleanupstring(dvd_title_slice)
dvd_type = callwebservice(dvd_title_slice)
# if still fail, then try slicing off the last word in a loop
while dvd_type == "fail" and dvd_title_clean.count('+') > 0:
dvd_title_clean = dvd_title_clean.rsplit('+', 1)[0]
dvd_type = callwebservice(dvd_title_clean)
if needs_new_year == "true":
#pass the new year back to bash to handle
global new_year
return dvd_type + "#" + new_year
else:
return dvd_type
def cleanupstring(string):
# clean up title string to pass to OMDbapi.org
@@ -61,6 +80,8 @@ def cleanupstring(string):
def callwebservice(dvd_title, year=""):
""" Queries OMDbapi.org for title information and parses if it's a movie
or a tv series """
# print (dvd_title)
try:
dvd_title_info_json = urllib.request.urlopen("http://www.omdbapi.com/?t={0}&y={1}&plot=short&r=json".format(dvd_title, year)).read()
except:
@@ -70,9 +91,11 @@ def callwebservice(dvd_title, year=""):
if doc['Response'] == "False":
return "fail"
else:
global new_year
new_year = doc['Year']
return doc['Type']
args = entry()
dvd_type = getdvdtype()
print(dvd_type)
print(dvd_type)

View File

@@ -70,7 +70,18 @@ if [ "$ID_FS_TYPE" == "udf" ]; then
fi
if [ $HAS_NICE_TITLE == true ]; then
VIDEO_TYPE=$(/opt/arm/getvideotype.py -t "${VIDEO_TITLE}" 2>&1)
VTYPE=$(/opt/arm/getvideotype.py -t "${VIDEO_TITLE}" 2>&1)
#handle year mismath if found
if [[ $VTYPE =~ .*#.* ]]; then
VIDEO_TYPE=$(echo "$VTYPE" | cut -f1 -d#)
NEW_YEAR=$(echo "$VTYPE" | cut -f2 -d#)
echo "VIDEO_TYPE is $VIDEO_TYPE and NEW_YEAR is $NEW_YEAR"
VIDEO_TITLE="$(echo "$VIDEO_TITLE" | cut -f1 -d\()($NEW_YEAR)"
echo "Year mismatch found. New video title is $VIDEO_TITLE"
else
VIDEO_TYPE="$VTYPE"
fi
else
VIDEO_TYPE="unknown"
fi

View File

@@ -26,5 +26,15 @@ else
printf "\nIFTTT notification sent" >> "$LOG"
fi
#Notification via Pushover
#Trigger onl if variable is set
if [ -z "$PO_USER_KEY" ]; then
echo "Pusover notifications not enabled" >> "$LOG"
else
echo "Sending Pushover notification" >> "$LOG"
curl -s --form-string "token=$PO_APP_KEY" --form-string "user=$PO_USER_KEY" --form-string "message=$MSG" https://api.pushover.net/1/messages.json
echo "Pushover notification sent" >> "$LOG"
fi
} >> "$LOG"

View File

@@ -17,14 +17,14 @@ VIDEO_TYPE=$3
DEST="${RAWPATH}/${VIDEO_TITLE}_${TIMESTAMP}"
RIPSTART=$(date +%s);
mkdir "$DEST"
mkdir -p "$DEST"
#echo /opt/arm/video_transcode.sh \"$DEST\" \"$VIDEO_TITLE\" $TIMESTAMP >> $LOG
if [ "$RIPMETHOD" = "backup" ] && [ "$ID_CDROM_MEDIA_BD" = "1" ]; then
echo "Using backup method of ripping." >> "$LOG"
DISC="${DEVNAME: -1}"
echo "Sending command: makemkvcon backup --decrypt -r disc:$DISC $DEST"
makemkvcon backup --decrypt -r disc:"$DISC" "$DEST"/
# shellcheck disable=SC2086
makemkvcon backup --decrypt $MKV_ARGS -r disc:"$DISC" "$DEST"/
eject "$DEVNAME"
elif [ "$MAINFEATURE" = true ] && [ "$ID_CDROM_MEDIA_DVD" = "1" ] && [ -z "$ID_CDROM_MEDIA_BD" ]; then
echo "Media is DVD and Main Feature parameter in config file is true. Bypassing MakeMKV." >> "$LOG"
@@ -33,7 +33,8 @@ VIDEO_TYPE=$3
echo "DEST is ${DEST}"
else
echo "Using mkv method of ripping." >> "$LOG"
makemkvcon mkv dev:"$DEVNAME" all "$DEST" --minlength="$MINLENGTH" -r
# shellcheck disable=SC2086
makemkvcon mkv $MKV_ARGS dev:"$DEVNAME" all "$DEST" --minlength="$MINLENGTH" -r
eject "$DEVNAME"
fi

View File

@@ -29,19 +29,23 @@ TIMESTAMP=$5
fi
# DEST="${ARMPATH}/${LABEL}_${TIMESTAMP}"
mkdir "$DEST"
mkdir -p "$DEST"
if [ "$SKIP_TRANSCODE" = true ] && [ "$RIPMETHOD" = "mkv" ]; then
# this only works for files ripped by MakeMKV into .mkv files
echo "Skipping transcode. Moving files from $SRC to $DEST" >> "$LOG"
mv "$SRC"/* "$DEST"/ >> "$LOG"
elif [ "$RIPMETHOD" = "backup" ] && [ "$MAINFEATURE" = true ] && [ "$ID_CDROM_MEDIA_BD" = "1" ]; then
echo "Transcoding BluRay main feature only." >> "$LOG"
$HANDBRAKE_CLI -i "$SRC" -o "$DEST/$LABEL.$DEST_EXT" --main-feature --preset="$HB_PRESET" --subtitle scan -F 2>> "$LOG"
# shellcheck disable=SC2086
$HANDBRAKE_CLI -i "$SRC" -o "$DEST/$LABEL.$DEST_EXT" --main-feature --preset="$HB_PRESET" $HB_ARGS 2>> "$LOG"
rmdir "$SRC"
elif [ "$RIPMETHOD" = "backup" ] && [ "$MAINFEATURE" = false ] && [ "$ID_CDROM_MEDIA_BD" = "1" ]; then
echo "Transcoding BluRay all titles above minlength." >> "$LOG"
# Itterate through titles of MakeMKV backup
# First get number of titles
# First check if this is the main title
MAINTITLENO="$(echo ""|HandBrakeCLI --input "$SRC" --title 0 --scan |& grep -B 1 "Main Feature" | sed 's/[^0-9]*//g')"
# Get number of titles
TITLES="$(echo ""|HandBrakeCLI --input "$SRC" --scan |& grep -Po '(?<=scan: BD has )([0-9]+)')"
echo "$TITLES titles on BluRay Disc" >> "$LOG"
@@ -55,7 +59,14 @@ TIMESTAMP=$5
echo "Title length is $SEC seconds." >> "$LOG"
if [ $SEC -gt "$MINLENGTH" ]; then
echo "HandBraking title $TITLE"
$HANDBRAKE_CLI -i "$SRC" -o "$DEST/$LABEL-$TITLE.$DEST_EXT" --min-duration="$MINLENGTH" -t "$TITLE" --preset="$HB_PRESET" --subtitle scan -F 2 >> "$LOG"
# shellcheck disable=SC2086
$HANDBRAKE_CLI -i "$SRC" -o "$DEST/$LABEL-$TITLE.$DEST_EXT" --min-duration="$MINLENGTH" -t "$TITLE" --preset="$HB_PRESET" $HB_ARGS 2 >> "$LOG"
# Check for main title and rename
if [ "$MAINTITLENO" = "$TITLE" ] && [ "$HAS_NICE_TITLE" = true ]; then
echo "Sending the following command: mv -n \"$DEST/$LABEL-$TITLE.$DEST_EXT\" \"${DEST}/${LABEL}.${DEST_EXT}\"" >> "$LOG"
mv -n "$DEST/$LABEL-$TITLE.$DEST_EXT" "${DEST}/${LABEL}.${DEST_EXT}" >> "$LOG"
fi
else
echo "Title $TITLE lenth less than $MINLENGTH. Skipping." >> "$LOG"
fi
@@ -64,7 +75,8 @@ TIMESTAMP=$5
elif [ "$MAINFEATURE" = true ] && [ "$ID_CDROM_MEDIA_DVD" = "1" ]; then
echo "Transcoding DVD main feature only." >> "$LOG"
# echo "$HANDBRAKE_CLI -i $DEVNAME -o \"${DEST}/${LABEL}.${DEST_EXT}\" --main-feature --preset="${HB_PRESET}" --subtitle scan -F 2" >> $LOG
$HANDBRAKE_CLI -i "$DEVNAME" -o "${DEST}/${LABEL}.${DEST_EXT}" --main-feature --preset="${HB_PRESET}" --subtitle scan -F 2>> "$LOG"
# shellcheck disable=SC2086
$HANDBRAKE_CLI -i "$DEVNAME" -o "${DEST}/${LABEL}.${DEST_EXT}" --main-feature --preset="${HB_PRESET}" $HB_ARGS 2>> "$LOG"
eject "$DEVNAME"
else
echo "Transcoding all files." >> "$LOG"
@@ -77,40 +89,168 @@ TIMESTAMP=$5
filename=${filename%.*}
echo "Transcoding file $FILE" >> "$LOG"
$HANDBRAKE_CLI -i "$SRC/$FILE" -o "$DEST/$filename.$DEST_EXT" --preset="$HB_PRESET" --subtitle scan -F 2>> "$LOG"
# shellcheck disable=SC2086
$HANDBRAKE_CLI -i "$SRC/$FILE" -o "$DEST/$filename.$DEST_EXT" --preset="$HB_PRESET" $HB_ARGS 2>> "$LOG"
rm "$SRC/$FILE"
done
rmdir "$SRC"
fi
if [ "$VIDEO_TYPE" = "movie" ] && [ "$MAINFEATURE" = true ] && [ "$HAS_NICE_TITLE" = true ]; then
# move the file to the final media directory
embyrefresh ()
{
ApiKey="$(curl -s -H "Authorization: MediaBrowser Client=\"$EMBY_CLIENT\", Device=\"$EMBY_DEVICE\", DeviceId=\"$EMBY_DEVICEID\", Version=1.0.0.0, UserId=\"$EMBY_USERID\"" -d "username=$EMBY_USERNAME" -d "password=$EMBY_PASSWORD" "http://$EMBY_SERVER:$EMBY_PORT/users/authenticatebyname?format=json" | python -m json.tool | grep 'AccessToken' | sed 's/\"//g; s/AccessToken://g; s/\,//g; s/ //g')"
RESPONSE=$(curl -d 'Library' "http://$EMBY_SERVER:$EMBY_PORT/Library/Refresh?api_key=$ApiKey")
if [ ${#RESPONSE} = 0 ]; then
# scan was successful
echo "Emby refresh command sent successfully" >> "$LOG"
else
# scan failed
echo "Emby refresh command failed for some reason. Probably authentication issues" >> "$LOG"
fi
}
if [ "$VIDEO_TYPE" = "movie" ] && [ "$MAINFEATURE" = true ] && [ "$HAS_NICE_TITLE" = true ] && [ "$EMBY_SUBFOLDERS" = false ]; then
# move the file to the final media directory
# shellcheck disable=SC2129,SC2016
echo '$VIDEO_TYPE is movie, $MAINFEATURE is true, $HAS_NICE_TITLE is true, $EMBY_SUBFOLDERS is false' >> "$LOG"
echo "Moving a single file." >> "$LOG"
echo "Checing for existing file..." >> "$LOG"
if [ ! -f "$MEDIA_DIR/$LABEL.$DEST_EXT" ]; then
echo "No file found. Moving \"$DEST/$LABEL.$DEST_EXT to $MEDIA_DIR/$LABEL.$DEST_EXT\"" >> "$LOG"
mv -n "$DEST/$LABEL.$DEST_EXT" "$MEDIA_DIR/$LABEL.$DEST_EXT"
if [ "$SET_MEDIA_PERMISSIONS" = true ]; then
chmod -R "$CHMOD_VALUE" "$MEDIA_DIR"
fi
if [ "$EMBY_REFRESH" = true ]; then
# signal emby to scan library
ApiKey="$(curl -s -H "Authorization: MediaBrowser Client=\"$EMBY_CLIENT\", Device=\"$EMBY_DEVICE\", DeviceId=\"$EMBY_DEVICEID\", Version=1.0.0.0, UserId=\"$EMBY_USERID\"" -d "username=$EMBY_USERNAME" -d "password=$EMBY_PASSWORD" "http://$EMBY_SERVER:$EMBY_PORT/users/authenticatebyname?format=json" | python -m json.tool | grep 'AccessToken' | sed 's/\"//g; s/AccessToken://g; s/\,//g; s/ //g')"
RESPONSE=$(curl -d 'Library' "http://$EMBY_SERVER:$EMBY_PORT/Library/Refresh?api_key=$ApiKey")
if [ ${#RESPONSE} = 0 ]; then
# scan was successful
echo "Emby refresh command sent successfully" >> "$LOG"
else
# scan failed
echo "Emby refresh command failed for some reason. Probably authentication issues" >> "$LOG"
fi
embyrefresh
else
echo "Emby Refresh False. Skipping library scan" >> "$LOG"
fi
else
echo "Warning: $MEDIA_DIR/$LABEL.$DEST_EXT File exists! File moving aborted" >> "$LOG"
fi
else
echo "Nothing here..." >> "$LOG"
elif [ "$VIDEO_TYPE" = "movie" ] && [ "$MAINFEATURE" = true ] && [ "$HAS_NICE_TITLE" = true ] && [ "$EMBY_SUBFOLDERS" = true ]; then
# shellcheck disable=SC2129,SC2016
echo '$VIDEO_TYPE is movie, $MAINFEATURE is true, $HAS_NICE_TITLE is true, $EMBY_SUBFOLDERS is true' >> "$LOG"
echo "Moving a single file to emby subfolders" >> "$LOG"
mkdir -p "$MEDIA_DIR/$LABEL" >> "$LOG"
if [ ! -f "$MEDIA_DIR/$LABEL/$LABEL.$DEST_EXT" ]; then
echo "No file found. Moving \"$DEST/$LABEL.$DEST_EXT to $MEDIA_DIR/$LABEL/$LABEL.$DEST_EXT\"" >> "$LOG"
mv -n "$DEST/$LABEL.$DEST_EXT" "$MEDIA_DIR/$LABEL/$LABEL.$DEST_EXT"
if [ "$SET_MEDIA_PERMISSIONS" = true ]; then
chmod -R "$CHMOD_VALUE" "$MEDIA_DIR/$LABEL"
fi
if [ "$EMBY_REFRESH" = true ]; then
# signal emby to scan library
embyrefresh
else
echo "Emby Refresh False. Skipping library scan" >> "$LOG"
fi
else
echo "Warning: $MEDIA_DIR/$LABEL/$LABEL.$DEST_EXT File exists! File moving aborted" >> "$LOG"
fi
elif [ "$VIDEO_TYPE" = "movie" ] && [ "$MAINFEATURE" = false ] && [ "$HAS_NICE_TITLE" = true ] && [ "$EMBY_SUBFOLDERS" = false ]; then
# shellcheck disable=SC2129,SC2016
echo '$VIDEO_TYPE is movie, $MAINFEATURE is false, $HAS_NICE_TITLE is true, $EMBY_SUBFOLDERS is false' >> "$LOG"
# hopefully this is never happen because it will cause a lot of duplicate files
echo "***WARNING!*** This will likely leave files in the transcoding directory as there is very likely existing files in the media directory"
echo "Moving multiple files to emby movie folder" >> "$LOG"
mv -n "$DEST/$LABEL.$DEST_EXT" "$MEDIA_DIR/$LABEL.$DEST_EXT"
if [ "$SET_MEDIA_PERMISSIONS" = true ]; then
chmod -R "$CHMOD_VALUE" "$MEDIA_DIR"
fi
if [ "$EMBY_REFRESH" = true ]; then
# signal emby to scan library
embyrefresh
else
echo "Emby Refresh False. Skipping library scan" >> "$LOG"
fi
elif [ "$VIDEO_TYPE" = "movie" ] && [ "$MAINFEATURE" = false ] && [ "$HAS_NICE_TITLE" = true ] && [ "$EMBY_SUBFOLDERS" = true ]; then
# shellcheck disable=SC2129,SC2016
echo '$VIDEO_TYPE is movie, $MAINFEATURE is false, $HAS_NICE_TITLE is true, $EMBY_SUBFOLDERS is true' >> "$LOG"
echo "Moving multiple files to emby movie subfolders" >> "$LOG"
echo "First move main title" >> "$LOG"
mkdir -p -v "$MEDIA_DIR/$LABEL" >> "$LOG"
if [ ! -f "$MEDIA_DIR/$LABEL/$LABEL.$DEST_EXT" ]; then
echo "No file found. Moving \"$DEST/$LABEL.$DEST_EXT to $MEDIA_DIR/$LABEL/$LABEL.$DEST_EXT\"" >> "$LOG"
mv -n "$DEST/$LABEL.$DEST_EXT" "$MEDIA_DIR/$LABEL/$LABEL.$DEST_EXT" >> "$LOG"
if [ "$SET_MEDIA_PERMISSIONS" = true ]; then
chmod -R "$CHMOD_VALUE" "$MEDIA_DIR/$LABEL"
fi
fi
#now move "extras"
if [ "$PLEX_SUPPORT" = true ]; then
# shellcheck disable=SC2129,SC2016
mkdir -p -v "$MEDIA_DIR/$LABEL/Featurettes" >> "$LOG"
# Create Emby ignore file for "extras" Folder
touch "$MEDIA_DIR/$LABEL/Featurettes/.ignore" >> "$LOG"
# shellcheck disable=SC2086
echo "Sending command: mv -n "\"$DEST/$LABEL/*\"" "\"$MEDIA_DIR/$LABEL/Featurettes/\""" >> "$LOG"
mv -n "${DEST}"/* "$MEDIA_DIR/$LABEL/Featurettes/" >> "$LOG"
# Move Largest file to main folder for Plex/Emby/Kodi to detect main movie
# shellcheck disable=SC2012
ls -S "$MEDIA_DIR/$LABEL/Featurettes/" | head -1 | xargs -I '{}' mv "$MEDIA_DIR/$LABEL/Featurettes/"{} "$MEDIA_DIR/$LABEL/$LABEL.mkv" >> "$LOG"
if [ "$SET_MEDIA_PERMISSIONS" = true ]; then
chmod -R "$CHMOD_VALUE" "$MEDIA_DIR/$LABEL"
fi
else
# shellcheck disable=SC2129,SC2016
mkdir -p -v "$MEDIA_DIR/$LABEL/extras" >> "$LOG"
# Create Plex ignore file for "extras" Folder
touch "$MEDIA_DIR/$LABEL/extras/.plexignore" >> "$LOG"
# shellcheck disable=SC2086
echo "Sending command: mv -n "\"$DEST/$LABEL/*\"" "\"$MEDIA_DIR/$LABEL/extras/\""" >> "$LOG"
mv -n "${DEST}"/* "$MEDIA_DIR/$LABEL/extras/" >> "$LOG"
# Move Largest file to main folder for Plex/Emby/Kodi to detect main movie
# shellcheck disable=SC2012
ls -S "$MEDIA_DIR/$LABEL/extras/" | head -1 | xargs -I '{}' mv "$MEDIA_DIR/$LABEL/extras/"{} "$MEDIA_DIR/$LABEL/$LABEL.mkv" >> "$LOG"
if [ "$SET_MEDIA_PERMISSIONS" = true ]; then
chmod -R "$CHMOD_VALUE" "$MEDIA_DIR/$LABEL"
fi
if [ "$EMBY_REFRESH" = true ]; then
# signal emby to scan library
embyrefresh
else
echo "Emby Refresh False. Skipping library scan" >> "$LOG"
fi
fi
rmdir "$DEST"
fi
rmdir "$SRC"