add language param to generate torrent
This commit is contained in:
1 parent
8feec34575
commit
39d8fb6cc5
1 file changed
+222
-53
+222
-53
@@ -5,24 +5,116 @@
|
||||
TRACKER="https://leo-test.store/announce.php?passkey=6535616464613165323432306163343561333531"
|
||||
PIECE_SIZE=22
|
||||
|
||||
INPUT="$1"
|
||||
SEARCH_NAME="${2:-}"
|
||||
TYPE="${3:-}"
|
||||
SKIP_TORRENT_CREATION="${4:-}"
|
||||
usage() {
|
||||
cat <<EOF
|
||||
Usage:
|
||||
$0 -i <input> -s <search-name> -t <movie|tv> [-l <language>] [--skip]
|
||||
|
||||
if [ ! -d "$INPUT" ] ; then
|
||||
echo "Input missing"
|
||||
echo "Usage: $0 <input-file> <search-name> <movie/tv> --skip (opt)"
|
||||
exit 1
|
||||
elif [ -z "$SEARCH_NAME" ] ; then
|
||||
echo "Search name missing"
|
||||
echo "Usage: $0 <input-file> <search-name> <movie/tv> --skip (opt)"
|
||||
exit 1
|
||||
elif [ -z "$TYPE" ]; then
|
||||
echo "Type not present"
|
||||
echo "Usage: $0 <input-file> <search-name> <movie/tv> --skip (opt)"
|
||||
exit 1
|
||||
fi
|
||||
Options:
|
||||
-i, --input Input directory
|
||||
-s, --search Search name for TMDB lookup
|
||||
-t, --type Content type: movie or tv
|
||||
-l, --lang Language (default: de)
|
||||
--skip Skip torrent creation
|
||||
-h, --help Show this help
|
||||
EOF
|
||||
}
|
||||
|
||||
parse_args() {
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
-i|--input)
|
||||
INPUT="$2"
|
||||
shift 2
|
||||
;;
|
||||
-s|--search)
|
||||
SEARCH_NAME="$2"
|
||||
shift 2
|
||||
;;
|
||||
-t|--type)
|
||||
TYPE="${2,,}"
|
||||
shift 2
|
||||
;;
|
||||
-l|--lang)
|
||||
LANGUAGE="${2,,}"
|
||||
shift 2
|
||||
;;
|
||||
--skip)
|
||||
SKIP_TORRENT_CREATION="true"
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "Error: Unknown argument '$1'"
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
validate_args() {
|
||||
local errors=0
|
||||
|
||||
[[ -z "$INPUT" ]] && {
|
||||
echo "Error: Input directory is required."
|
||||
((errors++))
|
||||
}
|
||||
|
||||
[[ -n "$INPUT" && ! -d "$INPUT" ]] && {
|
||||
echo "Error: Input directory does not exist: $INPUT"
|
||||
((errors++))
|
||||
}
|
||||
|
||||
[[ -z "$SEARCH_NAME" ]] && {
|
||||
echo "Error: Search name is required."
|
||||
((errors++))
|
||||
}
|
||||
|
||||
[[ "$TYPE" != "movie" && "$TYPE" != "tv" ]] && {
|
||||
echo "Error: Type must be 'movie' or 'tv'."
|
||||
((errors++))
|
||||
}
|
||||
|
||||
# Optional: only allow supported TMDB languages
|
||||
[[ ! "$LANGUAGE" =~ ^(de|en|fr|es|it)$ ]] && {
|
||||
echo "Error: Language must be one of: de, en, fr, es, it"
|
||||
((errors++))
|
||||
}
|
||||
|
||||
(( errors > 0 )) && {
|
||||
echo
|
||||
usage
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
normalize_language() {
|
||||
case "${LANGUAGE,,}" in
|
||||
de) LANGUAGE="de-DE" ;;
|
||||
en) LANGUAGE="en-US" ;;
|
||||
fr) LANGUAGE="fr-FR" ;;
|
||||
es) LANGUAGE="es-ES" ;;
|
||||
it) LANGUAGE="it-IT" ;;
|
||||
*)
|
||||
echo "Error: Languag* must be one of: de, en, fr, es, i*"
|
||||
exit 1
|
||||
;*
|
||||
esac
|
||||
}
|
||||
# Defaults
|
||||
INPUT=""
|
||||
SEARCH_NAME=""
|
||||
TYPE=""
|
||||
LANGUAGE="de"
|
||||
SKIP_TORRENT_CREATION="false"
|
||||
|
||||
parse_args "$@"
|
||||
validate_args
|
||||
normalize_language
|
||||
|
||||
if [ -d "$INPUT" ]; then
|
||||
NAME=$(basename "$INPUT")
|
||||
@@ -33,6 +125,7 @@ fi
|
||||
|
||||
TMDB_BEARER_TOKEN="eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJlOTIwMzJlMDk1NmEzMWEyZjQ4MDA4NGI0MTg4OTIyZCIsIm5iZiI6MTc5MDQzMjc5NS42NjcsInN1YiI6IjZhYjdkNjFiZDY5NmI1ZGFjNGM5NDRkMyIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.IjddKtQ5X62A63kYslH24Pxg_TFCzu-QpGak_Pemgr8"
|
||||
|
||||
|
||||
if [[ -z "$SEARCH_NAME" ]]; then
|
||||
echo "Search name required"
|
||||
exit 1
|
||||
@@ -60,7 +153,7 @@ tmdb_get() {
|
||||
curl -s \
|
||||
-H "Authorization: Bearer ${TMDB_BEARER_TOKEN}" \
|
||||
-H "accept: application/json" \
|
||||
"$url"
|
||||
"$url"
|
||||
}
|
||||
|
||||
# --------------------------------------------------
|
||||
@@ -73,7 +166,7 @@ SEARCH_JSON=$(curl -s --get \
|
||||
-H "Authorization: Bearer ${TMDB_BEARER_TOKEN}" \
|
||||
-H "accept: application/json" \
|
||||
--data-urlencode "query=${SEARCH_NAME}" \
|
||||
--data-urlencode "language=de-DE" \
|
||||
--data-urlencode "language=${LANGUAGE}" \
|
||||
"${TMDB_API}/search/${TYPE}")
|
||||
|
||||
TOTAL_RESULTS=$(echo "$SEARCH_JSON" | jq -r '.total_results // 0')
|
||||
@@ -113,7 +206,7 @@ FIRST_RELEASE=$(get_value "$(echo "$DETAILS" | jq -r '.release_date // .first_ai
|
||||
|
||||
STATUS=$(get_value "$(echo "$DETAILS" | jq -r '.status')")
|
||||
|
||||
LANGUAGE=$(get_value "$(echo "$DETAILS" | jq -r '.original_language')")
|
||||
DETAIL_LANGUAGE=$(get_value "$(echo "$DETAILS" | jq -r '.original_language')")
|
||||
|
||||
RATING=$(get_value "$(echo "$DETAILS" | jq -r '.vote_average')")
|
||||
|
||||
@@ -141,15 +234,13 @@ if [[ -n "$BACKDROP_PATH" ]]; then
|
||||
fi
|
||||
|
||||
mkdir -p "$INPUT/Screens"
|
||||
|
||||
if [[ "$POSTER_URL" != "N/A" ]]; then
|
||||
curl -L "$POSTER_URL" \
|
||||
-o "$INPUT/Screens/$(basename "$POSTER_PATH")"
|
||||
curl -s -L "$POSTER_URL" \
|
||||
-o "$INPUT/Screens/cover.jpg"
|
||||
fi
|
||||
|
||||
if [[ "$BACKDROP_URL" != "N/A" ]]; then
|
||||
curl -L "$BACKDROP_URL" \
|
||||
-o "$INPUT/Screens/$(basename "$BACKDROP_PATH")"
|
||||
curl -s -L "$BACKDROP_URL" \
|
||||
-o "$INPUT/Screens/backdrop.jpg"
|
||||
fi
|
||||
|
||||
# --data-urlencode "api_key=AB" \
|
||||
@@ -181,6 +272,17 @@ SIZE=$(du -sh "$MEDIA_FILE" | awk '{print $1}')
|
||||
MD5=$(md5sum "$MEDIA_FILE" | awk '{print $1}')
|
||||
SHA256=$(sha256sum "$MEDIA_FILE" | awk '{print $1}')
|
||||
|
||||
TMDB_URL="https://www.themoviedb.org/${TYPE}/${TMDB_ID}"
|
||||
|
||||
if [[ "$IMDB_ID" != "N/A" ]]; then
|
||||
IMDB_URL="https://www.imdb.com/title/${IMDB_ID}"
|
||||
else
|
||||
IMDB_URL="N/A"
|
||||
fi
|
||||
|
||||
FILE_LIST=$(find "$INPUT" -type f -exec du -h {} \; | sort)
|
||||
TOTAL_SIZE=$(du -sh "$INPUT" | cut -f1)
|
||||
|
||||
echo Generate nfo file
|
||||
|
||||
cat > "${NAME}.nfo" <<EOF
|
||||
@@ -188,17 +290,88 @@ cat > "${NAME}.nfo" <<EOF
|
||||
RELEASE INFORMATION
|
||||
==================================================
|
||||
|
||||
Title : $NAME
|
||||
Size : $SIZE
|
||||
Title : ${TITLE:-$NAME}
|
||||
Original Title : ${ORIGINAL_TITLE:-N/A}
|
||||
|
||||
File:
|
||||
$MEDIA_FILE
|
||||
TMDB ID : ${TMDB_ID:-N/A}
|
||||
TMDB URL : ${TMDB_URL:-N/A}
|
||||
|
||||
Video Codec:
|
||||
IMDb ID : ${IMDB_ID:-N/A}
|
||||
IMDb URL : ${IMDB_URL:-N/A}
|
||||
|
||||
Release Date : ${FIRST_RELEASE:-N/A}
|
||||
Language : ${DETAIL_LANGUAGE:-N/A}
|
||||
Status : ${STATUS:-N/A}
|
||||
|
||||
Genres : ${GENRES:-N/A}
|
||||
|
||||
Rating : ${RATING:-N/A}
|
||||
Votes : ${VOTES:-N/A}
|
||||
|
||||
--------------------------------------------------
|
||||
LINKS
|
||||
--------------------------------------------------
|
||||
|
||||
TMDB ID : ${TMDB_ID:-N/A}
|
||||
TMDB URL : ${TMDB_URL:-N/A}
|
||||
|
||||
IMDb ID : ${IMDB_ID:-N/A}
|
||||
IMDb URL : ${IMDB_URL:-N/A}
|
||||
|
||||
--------------------------------------------------
|
||||
OVERVIEW
|
||||
--------------------------------------------------
|
||||
|
||||
${OVERVIEW:-N/A}
|
||||
|
||||
--------------------------------------------------
|
||||
TV INFORMATION
|
||||
--------------------------------------------------
|
||||
|
||||
Seasons : ${SEASONS:-N/A}
|
||||
Episodes : ${EPISODES:-N/A}
|
||||
Creators : ${CREATORS:-N/A}
|
||||
Networks : ${NETWORKS:-N/A}
|
||||
|
||||
--------------------------------------------------
|
||||
MOVIE INFORMATION
|
||||
--------------------------------------------------
|
||||
|
||||
Runtime : ${RUNTIME:-N/A}
|
||||
Budget : ${BUDGET:-N/A}
|
||||
Director : ${DIRECTOR:-N/A}
|
||||
|
||||
--------------------------------------------------
|
||||
CAST
|
||||
--------------------------------------------------
|
||||
|
||||
${CAST:-N/A}
|
||||
|
||||
--------------------------------------------------
|
||||
CONTENTS
|
||||
--------------------------------------------------
|
||||
|
||||
Total Size : $TOTAL_SIZE
|
||||
|
||||
Files
|
||||
-----
|
||||
|
||||
$FILE_LIST
|
||||
|
||||
--------------------------------------------------
|
||||
FILE INFORMATION
|
||||
--------------------------------------------------
|
||||
|
||||
Filename : $MEDIA_FILE
|
||||
Size : $SIZE
|
||||
|
||||
Video Codec
|
||||
-----------
|
||||
$VIDEO_CODEC
|
||||
|
||||
Encoder Settings:
|
||||
$ENCODER_SETTINGS
|
||||
Encoder Settings
|
||||
----------------
|
||||
${ENCODER_SETTINGS:-N/A}
|
||||
|
||||
--------------------------------------------------
|
||||
MEDIAINFO
|
||||
@@ -210,39 +383,41 @@ $MEDIAINFO_OUTPUT
|
||||
CHECKSUMS
|
||||
--------------------------------------------------
|
||||
|
||||
MD5:
|
||||
MD5
|
||||
---
|
||||
$MD5
|
||||
|
||||
SHA256:
|
||||
SHA256
|
||||
------
|
||||
$SHA256
|
||||
|
||||
--------------------------------------------------
|
||||
TORRENT
|
||||
--------------------------------------------------
|
||||
|
||||
Private Torrent : Yes
|
||||
|
||||
Generated with:
|
||||
mktorrent
|
||||
mediainfo
|
||||
Private Torrent : Yes
|
||||
Piece Size : ${PIECE_SIZE:-Unknown}
|
||||
Created With : mktorrent
|
||||
|
||||
==================================================
|
||||
Generated on: $(date)
|
||||
==================================================
|
||||
EOF
|
||||
|
||||
SCREEN_DIR="$INPUT/Screens"
|
||||
mkdir -p "$SCREEN_DIR"
|
||||
|
||||
|
||||
# Videolänge in Sekunden
|
||||
DURATION=$(ffprobe -v error \
|
||||
-show_entries format=duration \
|
||||
-of default=noprint_wrappers=1:nokey=1 \
|
||||
"$MEDIA_FILE")
|
||||
|
||||
|
||||
# 5 gleichmäßig verteilte Screenshots (10%-90%)
|
||||
for i in {1..5}; do
|
||||
PERCENT=$((i * 100 / 6))
|
||||
TIMESTAMP=$(awk "BEGIN {print $DURATION * $PERCENT / 100}")
|
||||
|
||||
|
||||
ffmpeg -y \
|
||||
-ss "$TIMESTAMP" \
|
||||
-i "$MEDIA_FILE" \
|
||||
@@ -251,9 +426,8 @@ ffmpeg -y \
|
||||
"$SCREEN_DIR/screen_$i.png" \
|
||||
>/dev/null 2>&1
|
||||
done
|
||||
|
||||
echo "Screenshots erstellt in: $SCREEN_DIR"
|
||||
|
||||
echo "Screenshots erstellt in: $SCREEN_DIR"
|
||||
|
||||
echo "Created:"
|
||||
echo " ${NAME}.torrent"
|
||||
@@ -277,11 +451,6 @@ fi
|
||||
for f in "$INPUT"/Screens/*; do
|
||||
[[ -e "$f" ]] && FILES+=("$f")
|
||||
done
|
||||
ssh lucas@vivohost "mkdir -p \"Torrents/$NAME\""
|
||||
scp \
|
||||
"${NAME}.torrent" \
|
||||
"${NAME}.nfo" \
|
||||
lucas@vivohost:"Torrents/$NAME/"
|
||||
scp -r \
|
||||
"$INPUT/Screens" \
|
||||
lucas@vivohost:"Torrents/$NAME/"
|
||||
ssh lucas@vivohost "mkdir -p \"Torrents/${NAME}\""
|
||||
scp "${NAME}.torrent" "${NAME}.nfo" lucas@vivohost:"Torrents/${NAME}/"
|
||||
scp -r "$INPUT/Screens" lucas@vivohost:"Torrents/${NAME}/"
|
||||
Reference in new issue
Block a user