17 Commits

Author SHA1 Message Date
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
muckngrind4
40bfb99eff List parameters at beginning of log file (#31)
* List all parameters in log file
2016-12-16 18:14:18 -08:00
muckngrind4
6dedbf2f72 Option to skip transcoding (#30)
* Option to skip transcoding
2016-12-16 18:09:53 -08:00
muckngrind4
e70bf17a70 Added ability to do MakeMKV backup with main feature = false. (#29) 2016-12-14 22:11:16 -08:00
muckngrind4
1478264a00 Option to automatically scan Emby library after main feature transcoding (#26)
* Options to automatically scan Emby library after main feature transcoding.
* Clean up config.sample
2016-12-12 18:08:56 -08:00
Benjamin Bryan
ffcfb2220d Merge pull request #25 from ahnooie/tvdetection
Handle failed calls to omdbapi better.
2016-12-06 21:55:06 -08:00
Derek Christensen
7a5cfb5306 Handle failed calls to omdbapi better. 2016-12-06 21:17:07 -08:00
11 changed files with 504 additions and 98 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

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

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

149
config.sample Normal file → Executable file
View File

@@ -11,92 +11,163 @@ 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 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
#####################
## Directory setup ##
#####################
#Base directory of ARM media directory
#Ripped and transcoded files end up here
ARMPATH="/mnt/media/ARM/"
# Base directory of ARM media directory
# Ripped and transcoded files end up here
ARMPATH="/mnt/media/ARM/Media/Unidentified/"
#Path to raw MakeMKV directory
#Destination for MakeMKV and source for HandBrake
# Path to raw MakeMKV directory
# Destination for MakeMKV and source for HandBrake
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/"
# Path to final media directory
# Destination for final file. Only used for movies that are positively identified
MEDIA_DIR="/mnt/media/ARM/Media/Movies/"
#Path to directory to hold log files
#Make sure to include trailing /
# Path to directory to hold log files
# Make sure to include trailing /
LOGPATH="/opt/arm/logs/"
#How long to let log files live before deleting (in days)
# 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 ##
########################
#Minimum length of track for MakeMKV rip (in seconds)
# Minimum length of track for MakeMKV rip (in seconds)
MINLENGTH="600"
#Method of MakeMKV to use for Blu Ray discs. Options are "mkv" or "backup".
#mkv is the normal method of ripping mkv files directly from the DVD
#backup decrypts the dvd and then copies it to the hard drive. This allows HandBrake to apply some of it's
#analytical abilities such as the main-feature identification. This method seems to offer success on bluray
#discs that fail in "mkv" mode. *** NOTE: MakeMKV only supports the backup method on BluRay discs. Regular
#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.
# Method of MakeMKV to use for Blu Ray discs. Options are "mkv" or "backup".
# mkv is the normal method of ripping mkv files directly from the DVD
# backup decrypts the dvd and then copies it to the hard drive. This allows HandBrake to apply some of it's
# analytical abilities such as the main-feature identification. This method seems to offer success on bluray
# discs that fail in "mkv" mode. *** NOTE: MakeMKV only supports the backup method on BluRay discs. Regular
# 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 ##
##########################
# Handbrake preset profile
# See https://trac.handbrake.fr/wiki/BuiltInPresets
# Execute "HandBrakeCLI -z" to see a list of all presets
HB_PRESET="High Profile"
#Extension of the final video file
# Extension of the final video file
DEST_EXT=mkv
#Handbrake binary to call
# Handbrake binary to call
HANDBRAKE_CLI=HandBrakeCLI
#Have HandBrake transcode the main feature only. BluRay discs must have RIPMETHOD="backup" for this to work.
#If MAINFEATURE is true, blurays will be backed up to the HD and then HandBrake will go to work on the backed up
#files. For normal DVDs, ARM will by pass MakeMKV and be accessed directly by HandBrake. This will require
#libdvdcss2 be installed.
#NOTE: For the most part, HandBrake correctly identifies the main feature on movie DVD's, although it is not perfect.
#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
# Have HandBrake transcode the main feature only. BluRay discs must have RIPMETHOD="backup" for this to work.
# If MAINFEATURE is true, blurays will be backed up to the HD and then HandBrake will go to work on the backed up
# files. For normal DVDs, ARM will bypass MakeMKV and hand off the dvd directly to HandBrake. This will require
# libdvdcss2 be installed.
# NOTE: For the most part, HandBrake correctly identifies the main feature on movie DVD's, although it is not perfect.
# 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 ##
#####################
# Parameters to enable automatic library scan in Emby. This will trigger only if MainFeature is true above.
# 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=""
EMBY_PORT="8096"
# Emby authentication fluff parameters. These can be anything.
EMBY_CLIENT="ARM"
EMBY_DEVICE="ARM"
EMBY_DEVICEID="ARM"
# Emby authentication parameters. These are parameters that must be set to a current user in Emby.
EMBY_USERNAME=""
# EMBY_USERID is the user ID associated with the username above. You can find this by going to the following address on your emby server
# <server>:<port>/Users/Public and getting the ID value for the username above.
EMBY_USERID=""
# This is the SHA1 encrypted password for the username above. You can generate the SHA1 hash of your password by executing the following at
# the command line:
# echo -n your-password | sha1sum | awk '{print $1}'
# or using an online generator like the one located at http://www.sha1-online.com/
EMBY_PASSWORD=""
#############################
## Notification Parameters ##
#############################
#Pushbullet API Key
#Leave empty or comment out to disable Pushbullet notifications
# Pushbullet API Key
# Leave empty or comment out to disable Pushbullet notifications
PB_KEY=""
#IFTTT API KEY
#Leave empty or comment out to disable IFTTT notifications
#IFTTT_KEY=""
# IFTTT API KEY
# Leave empty or comment out to disable IFTTT notifications
# IFTTT_KEY=""
#IFTTT Event Name
# IFTTT Event Name
IFTTT_EVENT="arm_event"
#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
# 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
LOGFILE=${ID_FS_LABEL}".log"
fi
#Set full logfile path
# Set full logfile path
LOG=$LOGPATH$LOGFILE

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,36 +19,83 @@ 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"
year = dvd_title[(dvd_title.rindex('(')):len(dvd_title)]
year = re.sub('[()]','', year)
try:
year = dvd_title[(dvd_title.rindex('(')):len(dvd_title)]
except:
year = ""
else:
year = re.sub('[()]','', year)
dvd_title = dvd_title[0:(dvd_title.rindex('('))].strip()
dvd_title = cleanupstring(dvd_title)
try:
dvd_title = dvd_title[0:(dvd_title.rindex('('))].strip()
except:
dvd_title_clean = cleanupstring(dvd_title)
else:
dvd_title_clean = cleanupstring(dvd_title)
if year is None:
year = ""
dvd_title_info_json = urllib.request.urlopen("http://www.omdbapi.com/?t={0}&y={1}&plot=short&r=json".format(dvd_title, year)).read()
doc = json.loads(dvd_title_info_json.decode())
return doc['Type']
dvd_type = callwebservice(dvd_title_clean, year)
# print (dvd_type)
# handle failures
# this is kind of kludgy, but it kind of work...
if (dvd_type == "fail"):
# 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
string = string.strip()
return re.sub('[_ ]',"+",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:
return "fail"
else:
doc = json.loads(dvd_title_info_json.decode())
if doc['Response'] == "False":
return "fail"
else:
global new_year
new_year = doc['Year']
return doc['Type']
args = entry()
try:
dvd_type = getdvdtype()
except:
print("fail")
else:
# we only want "movie" or "series"
if dvd_type == "movie" or dvd_type == "series":
print(dvd_type)
else:
print("other")
dvd_type = getdvdtype()
print(dvd_type)

View File

@@ -13,6 +13,14 @@ mkdir -p "$LOGPATH"
#shellcheck disable=SC2094
{
# echo all config parameters to logfile
# excludes sensative parameters
# shellcheck disable=SC2129
echo "*** Start config parameters ****" >> "$LOG"
# shellcheck disable=SC2002
cat "$ARM_CONFIG"|sed '/^[#;].*$/d;/^$/d;/if/d;/^ /d;/^else/d;/^fi/d;/KEY=/d;/PASSWORD/d' >> "$LOG"
echo "*** End config parameters ****" >> "$LOG"
echo "Starting Identify Script..." >> "$LOG"
VIDEO_TITLE=""
@@ -62,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,21 +29,54 @@ TIMESTAMP=$5
fi
# DEST="${ARMPATH}/${LABEL}_${TIMESTAMP}"
mkdir "$DEST"
if [ "$RIPMETHOD" = "backup" ] && [ "$MAINFEATURE" = true ] && [ "$ID_CDROM_MEDIA_BD" = "1" ]; then
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"
# This fails, need to figure out how to iterate through all fetures on a backup source
$HANDBRAKE_CLI -i "$SRC" -o "$DEST/$LABEL.$DEST_EXT" --min-duration "$MINLENGTH" --preset="$HB_PRESET" --subtitle scan -F 2>> "$LOG"
rmdir "$SRC"
# Itterate through titles of MakeMKV backup
# 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"
for TITLE in $(seq 1 "$TITLES")
do
echo "Processing title $TITLE" >> "$LOG"
TIME="$(echo ""|HandBrakeCLI --input "$SRC" --title "$TITLE" --scan |& grep 'duration is' | sed -r 's/.*\((.*)ms\)/\1/')"
SEC=$(( TIME / 1000 )) >> "$LOG"
echo "Title length is $SEC seconds." >> "$LOG"
if [ $SEC -gt "$MINLENGTH" ]; then
echo "HandBraking title $TITLE"
# 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
done
rm -rf "$SRC"
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"
# $HANDBRAKE_CLI -i $DEVNAME -o "${DEST}/${LABEL}.${DEST_EXT}" --main-feature --preset="${HB_PRESET}">> $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"
@@ -56,22 +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
echo "checing for existing file" >> "$LOG"
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
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"