30 Commits

Author SHA1 Message Date
Aaron Helton
1b203ab32f Add omdb_api_key to the format call for proper request. 2017-06-06 00:09:29 -04:00
Chris A. Bunt
f3f308a812 Propogating new variable throughout all function calls 2017-06-05 21:30:36 -05:00
Chris A. Bunt
ab4b572c98 minor syntax updates 2017-06-05 18:54:54 -05:00
Chris A. Bunt
b663390d9b still adding variable locations 2017-06-05 18:51:10 -05:00
Chris A. Bunt
1680d526ec adding variable pass to another function
still learning...
2017-06-05 18:45:50 -05:00
Chris A. Bunt
add820b533 rearrange default vs. non-default arguments
Learning about Python through the school of hard knocks and intepretive
syntax errors
2017-06-05 18:36:22 -05:00
Chris A. Bunt
0c795ce69a parsing args and add debug 2017-06-05 18:18:41 -05:00
Chris A. Bunt
cfb09d3154 add new line of code with updated request line
First pass at this query
2017-06-05 17:59:30 -05:00
Chris A. Bunt
cdb013d751 Add argument to parser in the correct file
Put new line of code in the correct file this time!
2017-06-05 17:49:07 -05:00
Chris A. Bunt
0269d7c1e4 Revert "Add argument to line parse"
This reverts commit 573137ca71.
2017-06-05 17:47:49 -05:00
Chris A. Bunt
573137ca71 Add argument to line parse 2017-06-05 17:36:38 -05:00
Chris A. Bunt
601ce808da Add OMDB_API_KEY back to config.sample 2017-06-05 17:18:01 -05:00
root
b44fe81bc9 Merge branch 'dep-omdbapi-key' of https://github.com/cbunt1/automatic-ripping-machine into dep-omdbapi-key 2017-06-05 22:16:16 +00:00
root
1e0deaf23f revert to original python file 2017-06-05 22:13:45 +00:00
Chris A. Bunt
fa10eba748 Revert "add variable to config file"
This reverts commit f97b5ff98c.
2017-06-05 17:00:21 -05:00
Chris A. Bunt
64ccf9f55c removing whitespace, setup debug 2017-06-05 16:52:05 -05:00
Chris A. Bunt
64fe0c97c2 first pass at adding key 2017-06-05 16:35:23 -05:00
root
f97b5ff98c add variable to config file 2017-06-05 19:50:25 +00:00
Chris A. Bunt
f00e28a965 key info and methodology 2017-06-05 14:40:23 -05:00
Chris A. Bunt
bf9680cb11 Initlal commit
Adding a branch scope file and starting the commit/develop process
2017-06-05 13:14:03 -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
13 changed files with 300 additions and 215 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~

33
Branch_Scope.txt Normal file
View File

@@ -0,0 +1,33 @@
2017-06-05 - Chris Bunt
Automatic Ripping Mahcine (ARM) Project
Development Branch: dep-omdbapi-key
Scope: Add the ability to query omdbapi using thier new API key structure. As
of late May 2017, a change in policy at omdbapi requires the use of a key
to perform queries. At this time, it is undetermined whether free (as in beer)
access will be made again available, but if it is, it appears that it will
still require a key.
This branch will update the code making the queries to get movie by type, which
is used by the ARM to determine whether a video disc is a "movie" or a
"TV series," (or potentially any other type of video).
API Key for OMDBAPI.com (Not sure how private this should be)
OMDb API: http://www.omdbapi.com/?i=tt3896198&apikey=38d39b96
Poster API: http://img.omdbapi.com/?i=tt3896198&h=600&apikey=38d39b96
KEY: 38d39b96
Generated URL:
http://www.omdbapi.com/?t={0}&y={1}&plot=short&r=json&apikey={omdb_api_key
http://www.omdbapi.com/?t="true grit"&plot=short&4=json&apikey=38d39b96
video name example "Raising Arizona (1999)"
Files affected:
config.sample -- will likely need a new variable to support the eu's API key,
this will be modelled off the exisitng API key methodology used for existing
keyed tools like pushbullet and (presumably) MakeMKV.
getvideotype.py -- primary python script that gets the video type.
identify.sh -- Primary script that calls video type. Altered to pass the API
key to getvideotype.py as part of the request

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

@@ -1,123 +0,0 @@
#!/usr/bin/python3
import sys
import argparse
import os
# import re
import subprocess
import logging
import pprint
import time
def entry():
""" Entry to program, parses arguments"""
parser = argparse.ArgumentParser(description='Get type of dvd--movie or tv series')
parser.add_argument('-d', '--devpath', help='Devpath', required=True)
parser.add_argument('-m', '--minlength', help='Minimum Length', default=0, type=int)
parser.add_argument('-x', '--maxlength', help='Maximum Length', default=0, type=int)
parser.add_argument('-a', '--armpath', help='ArmPath', required=True)
parser.add_argument('-r', '--rawpath', help='Rawpath', required=True)
parser.add_argument('-e', '--label', help='Label', required=True)
parser.add_argument('-b', '--handbrakecli', help='HandbrakeCLI', default="HandBrakeCLI")
parser.add_argument('-p', '--hb_preset', help='Handbrake Preset', required=True)
parser.add_argument('-g', '--hb_args', help='Handbrake Arguements', default='')
parser.add_argument('-l', '--logfile', help='Logfile (path/logname)', required=True)
return parser.parse_args()
def log_params():
"""log all entry parameters"""
logging.info("Logging tv_dvd parameters")
logging.info("**** Start tv_dvd.py paramaters *** ")
logging.info("devpath: " + args.devpath)
logging.info("minlength: " + str(args.minlength))
logging.info("maxlength: " + str(args.maxlength))
logging.info("armpath: " + args.armpath)
logging.info("rawpath: " + args.rawpath)
logging.info("handbrakecli: " + args.handbrakecli)
logging.info("hb_preset: " + args.hb_preset)
logging.info("logfile: " + args.logfile)
logging.info("hb_args: " + args.hb_args)
logging.info("*** End of tv_dvd.py parameters ***")
def main():
"""main tv processing function"""
logging.info("Starting TV_DVD processing")
try:
d = subprocess.check_output(["lsdvd", '-Oy', args.devpath]).decode("utf-8")
except subprocess.CalledProcessError as derror:
print("Call to lsdvd failed with code: " + str(derror.returncode), derror.output)
err = "Aborting. Call to lsdvd failed with code: " + str(derror.returncode), derror.output
sys.exit(err)
data = d.replace("lsdvd = ", "", 1)
info = eval(data, {})
# print(info['track'])
#get filesystem in order
ts = round(time.time() * 100)
basepath = os.path.join(args.armpath, args.label + "_" + str(ts))
if not os.path.exists(basepath):
try:
os.makedirs(basepath)
except:
logging.error("Couldn't create the base file path: " + basepath + " Probably a permissions error")
err = "Couldn't create the base file path: " + basepath + " Probably a permissions error"
sys.exit(err)
total = 0
for index, item in enumerate(info['track']):
if item['ix'] > total:
total = item['ix']
logging.info("Found " + str(total) + " tracks.")
for index, item in enumerate(info['track']):
if item['length'] < args.minlength:
#too short
logging.info("Track #" + str(item['ix']) + " of " + str(total) + ". Length (" + str(item['length']) + \
") is less than minimum length (" + str(args.minlength) + "). Skipping")
elif item['length'] > args.maxlength:
#too long
logging.info("Track #" + str(item['ix']) +" of " + str(total) + ". Length (" + str(item['length']) + \
") is greater than maximum length (" + str(args.maxlength) + "). Skipping")
else:
#just right
logging.info("Processing track #" + str(item['ix']) + " of " + str(total) + ". Length is " + str(item['length']) + " seconds.")
filename = os.path.join(basepath, "title_" + str(item['ix']) + ".mkv")
cmd = 'nice {0} -i "{1}" -o "{2}" --preset "{3}" -t {4} {5}>> {6}'.format(
args.handbrakecli,
args.devpath,
filename,
args.hb_preset,
str(item['ix']),
args.hb_args,
args.logfile
)
logging.debug("Sending command: %s", (cmd))
try:
hb = subprocess.check_output(
cmd,
shell=True
).decode("utf-8")
except subprocess.CalledProcessError as hb_error:
err = "Call to hadnbrake failed with code: " + str(hb_error.returncode) + "(" + str(hb_error.output) + ")"
logging.error(err)
sys.exit(err)
args = entry()
#set up logging
logging.basicConfig(filename=args.logfile, format='[%(asctime)s] ARM: %(levelname)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S', \
level=logging.INFO)
log_params()
main()

View File

@@ -16,16 +16,13 @@ GET_VIDEO_TITLE=true
# Note: RIPMETHOD must be set to "mkv" for this feature to work
SKIP_TRANSCODE=false
# Default Video Type. Use this to give ARM a way to handle dvds/bds that aren't identifiable.
# DEFAULT_VIDEOTYPE="series"
#####################
## Directory setup ##
#####################
# 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
@@ -33,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 /
@@ -42,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 ##
########################
@@ -49,9 +56,6 @@ LOGLIFE=1
# Minimum length of track for MakeMKV rip (in seconds)
MINLENGTH="600"
# Maximum length of track for MakeMKV rip (in seconds). Set to 0 to disable
MAXLENGTH="0"
# 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
@@ -60,10 +64,12 @@ MAXLENGTH="0"
# 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"
# Additional HandBrake arguments. '--subtitle scan -F --subtitle-burned' will scan for forced foreign language
# audio and burn them into the video
# HB_ARGS="--subtitle scan -F --subtitle-burned"
HB_ARGS="--subtitle scan -F --subtitle-burned"
# 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 ##
@@ -87,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 ##
#####################
@@ -137,6 +153,18 @@ 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=""
# OMDB_API_KEY
# omdbapi.com API Key
# This is the API key for omdbapi.com queries.
# More info at http://omdbapi.com/
# OMDB_API_KEY=""
OMDB_API_KEY="38d39b96"
# 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

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

@@ -12,6 +12,7 @@ def entry():
""" Entry to program, parses arguments"""
parser = argparse.ArgumentParser(description='Get type of dvd--movie or tv series')
parser.add_argument('-t', '--title', help='Title', required=True)
parser.add_argument('-k', '--key', help='API_Key', dest='omdb_api_key', required=True)
return parser.parse_args()
@@ -20,13 +21,14 @@ def getdvdtype():
or a tv series """
dvd_title = args.title
needs_new_year = "false"
omdb_api_key = args.omdb_api_key
try:
year = dvd_title[(dvd_title.rindex('(')):len(dvd_title)]
except:
year = ""
else:
year = re.sub('[()]', '', year)
year = re.sub('[()]','', year)
try:
dvd_title = dvd_title[0:(dvd_title.rindex('('))].strip()
@@ -38,7 +40,7 @@ def getdvdtype():
if year is None:
year = ""
dvd_type = callwebservice(dvd_title_clean, year)
dvd_type = callwebservice(omdb_api_key, dvd_title_clean, year)
# print (dvd_type)
# handle failures
@@ -46,25 +48,25 @@ def getdvdtype():
if (dvd_type == "fail"):
# first try submitting without the year
dvd_type = callwebservice(dvd_title_clean, "")
dvd_type = callwebservice(omdb_api_key, dvd_title_clean, "")
# print (dvd_type)
if dvd_type != "fail":
#that means the year is wrong.
if (dvd_type != "fail"):
#that means the year is wrong.
needs_new_year = "true"
if dvd_type == "fail":
if (dvd_type == "fail"):
# second see if there is a hyphen and split it
if dvd_title.find("-") > -1:
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)
dvd_title_slice =cleanupstring(dvd_title_slice)
dvd_type = callwebservice(omdb_api_key, 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)
dvd_type = callwebservice(omdb_api_key, dvd_title_clean)
if needs_new_year == "true":
#pass the new year back to bash to handle
global new_year
@@ -77,13 +79,16 @@ def cleanupstring(string):
string = string.strip()
return re.sub('[_ ]',"+",string)
def callwebservice(dvd_title, year=""):
def callwebservice(omdb_api_key, dvd_title, year=""):
""" Queries OMDbapi.org for title information and parses if it's a movie
or a tv series """
# print (dvd_title)
print (dvd_title)
print (year)
print (omdb_api_key)
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()
# dvd_title_info_json = urllib.request.urlopen("http://www.omdbapi.com/?t={0}&y={1}&plot=short&r=json".format(dvd_title, year)).read()
dvd_title_info_json = urllib.request.urlopen("http://www.omdbapi.com/?t={1}&y={2}&plot=short&r=json&apikey={0}".format(omdb_api_key, dvd_title, year)).read()
except:
return "fail"
else:
@@ -98,4 +103,4 @@ def callwebservice(dvd_title, year=""):
args = entry()
dvd_type = getdvdtype()
print(dvd_type)
print(dvd_type)

View File

@@ -70,8 +70,9 @@ if [ "$ID_FS_TYPE" == "udf" ]; then
fi
if [ $HAS_NICE_TITLE == true ]; then
VTYPE=$(/opt/arm/getvideotype.py -t "${VIDEO_TITLE}" 2>&1)
# VTYPE=$(/opt/arm/getvideotype.py -t "${VIDEO_TITLE}" 2>&1)
VTYPE=$(/opt/arm/getvideotype.py -t "${VIDEO_TITLE}" -k "${OMDB_API_KEY}" 2>&1)
#handle year mismath if found
if [[ $VTYPE =~ .*#.* ]]; then
VIDEO_TYPE=$(echo "$VTYPE" | cut -f1 -d#)
@@ -84,7 +85,6 @@ if [ "$ID_FS_TYPE" == "udf" ]; then
fi
else
VIDEO_TYPE="unknown"
fi
echo "got to here"
@@ -93,24 +93,7 @@ if [ "$ID_FS_TYPE" == "udf" ]; then
echo "video type is ${VIDEO_TYPE}"
umount "/mnt/$DEVNAME"
if [ $VIDEO_TYPE = "series" ] && [ "$ID_CDROM_MEDIA_DVD" = "1" ]; then
echo "Processing TV series. Calling tv_dvd.py" >> "$LOG"
STR="/opt/arm/arm/tv_dvd.py -d "\"${DEVNAME}\"" -m ${MINLENGTH} -x ${MAXLENGTH} -a "\"${ARMPATH}\"" -r "\"${RAWPATH}\"" -e "\"${ID_FS_LABEL}\"" -b "\"${HANDBRAKE_CLI}\"" -p "\"${HB_PRESET}\"" -g "\"${HB_ARGS}\"" -l "\"${LOG}\"""
echo "Sending command ${STR}"
eval "${STR}" 2>> "$LOG"
eject "$DEVNAME"
elif
[ "$VIDEO_TYPE" = "unknown" ] && [ "$DEFAULT_VIDEOTYPE" == "series" ] && [ "$ID_CDROM_MEDIA_DVD" = "1" ]; then
echo "Video type is 'unknown' and default video type is series. Processing TV series. Calling tv_dvd.py" >> "$LOG"
STR="/opt/arm/arm/tv_dvd.py -d "\"${DEVNAME}\"" -m ${MINLENGTH} -x ${MAXLENGTH} -a "\"${ARMPATH}\"" -r "\"${RAWPATH}\"" -e "\"${ID_FS_LABEL}\"" -b "\"${HANDBRAKE_CLI}\"" -p "\"${HB_PRESET}\"" -g "\"${HB_ARGS}\"" -l "\"${LOG}\"""
echo "Sending command ${STR}"
eval "${STR}" 2>> "$LOG"
eject "$DEVNAME"
else
echo "Sending to video_rip queue" >> "$LOG"
/opt/arm/video_rip.sh "$VIDEO_TITLE" "$HAS_NICE_TITLE" "$VIDEO_TYPE" "$LOG"
fi
/opt/arm/video_rip.sh "$VIDEO_TITLE" "$HAS_NICE_TITLE" "$VIDEO_TYPE" "$LOG"
else
umount "/mnt/$DEVNAME"
echo "identified udf as data" >> "$LOG"
@@ -120,7 +103,6 @@ if [ "$ID_FS_TYPE" == "udf" ]; then
fi
else
echo "ARM_CHECK_UDF is false, assuming udf is video" >> "$LOG"
/opt/arm/video_rip.sh "$LOG"
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,14 +29,15 @@ 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"
@@ -58,7 +59,8 @@ 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
@@ -73,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"
@@ -86,7 +89,8 @@ 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"
@@ -116,6 +120,12 @@ TIMESTAMP=$5
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
@@ -130,10 +140,16 @@ TIMESTAMP=$5
# 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 "$MEDIA_DIR/$LABEL" >> "$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
@@ -151,6 +167,13 @@ TIMESTAMP=$5
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
@@ -162,23 +185,70 @@ TIMESTAMP=$5
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 -v "$MEDIA_DIR/$LABEL" >> "$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"
# shellcheck disable=SC2129,SC2016
mkdir -v "$MEDIA_DIR/$LABEL/extras" >> "$LOG"
# shellcheck disable=SC2086
echo "Sending command: mv -n "\"$DEST/$LABEL/*\"" "\"$MEDIA_DIR/$LABEL/extras/\""" >> "$LOG"
mv -n "${DEST}"/* "$MEDIA_DIR/$LABEL/extras/" >> "$LOG"
if [ "$EMBY_REFRESH" = true ]; then
# signal emby to scan library
embyrefresh
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
echo "Emby Refresh False. Skipping library scan" >> "$LOG"
# 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