add language param to generate torrent

This commit is contained in:
lucas committed 2026-10-03 10:41:51 +02:00
1 parent 8feec34575
commit 39d8fb6cc5
1 file changed
+222 -53
+222 -53
View File
@@ -5,24 +5,116 @@
TRACKER="https://leo-test.store/announce.php?passkey=6535616464613165323432306163343561333531" TRACKER="https://leo-test.store/announce.php?passkey=6535616464613165323432306163343561333531"
PIECE_SIZE=22 PIECE_SIZE=22
INPUT="$1" usage() {
SEARCH_NAME="${2:-}" cat <<EOF
TYPE="${3:-}" Usage:
SKIP_TORRENT_CREATION="${4:-}" $0 -i <input> -s <search-name> -t <movie|tv> [-l <language>] [--skip]
if [ ! -d "$INPUT" ] ; then Options:
echo "Input missing" -i, --input Input directory
echo "Usage: $0 <input-file> <search-name> <movie/tv> --skip (opt)" -s, --search Search name for TMDB lookup
exit 1 -t, --type Content type: movie or tv
elif [ -z "$SEARCH_NAME" ] ; then -l, --lang Language (default: de)
echo "Search name missing" --skip Skip torrent creation
echo "Usage: $0 <input-file> <search-name> <movie/tv> --skip (opt)" -h, --help Show this help
exit 1 EOF
elif [ -z "$TYPE" ]; then }
echo "Type not present"
echo "Usage: $0 <input-file> <search-name> <movie/tv> --skip (opt)" parse_args() {
exit 1 while [[ $# -gt 0 ]]; do
fi 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 if [ -d "$INPUT" ]; then
NAME=$(basename "$INPUT") NAME=$(basename "$INPUT")
@@ -33,6 +125,7 @@ fi
TMDB_BEARER_TOKEN="eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJlOTIwMzJlMDk1NmEzMWEyZjQ4MDA4NGI0MTg4OTIyZCIsIm5iZiI6MTc5MDQzMjc5NS42NjcsInN1YiI6IjZhYjdkNjFiZDY5NmI1ZGFjNGM5NDRkMyIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.IjddKtQ5X62A63kYslH24Pxg_TFCzu-QpGak_Pemgr8" TMDB_BEARER_TOKEN="eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJlOTIwMzJlMDk1NmEzMWEyZjQ4MDA4NGI0MTg4OTIyZCIsIm5iZiI6MTc5MDQzMjc5NS42NjcsInN1YiI6IjZhYjdkNjFiZDY5NmI1ZGFjNGM5NDRkMyIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.IjddKtQ5X62A63kYslH24Pxg_TFCzu-QpGak_Pemgr8"
if [[ -z "$SEARCH_NAME" ]]; then if [[ -z "$SEARCH_NAME" ]]; then
echo "Search name required" echo "Search name required"
exit 1 exit 1
@@ -60,7 +153,7 @@ tmdb_get() {
curl -s \ curl -s \
-H "Authorization: Bearer ${TMDB_BEARER_TOKEN}" \ -H "Authorization: Bearer ${TMDB_BEARER_TOKEN}" \
-H "accept: application/json" \ -H "accept: application/json" \
"$url" "$url"
} }
# -------------------------------------------------- # --------------------------------------------------
@@ -73,7 +166,7 @@ SEARCH_JSON=$(curl -s --get \
-H "Authorization: Bearer ${TMDB_BEARER_TOKEN}" \ -H "Authorization: Bearer ${TMDB_BEARER_TOKEN}" \
-H "accept: application/json" \ -H "accept: application/json" \
--data-urlencode "query=${SEARCH_NAME}" \ --data-urlencode "query=${SEARCH_NAME}" \
--data-urlencode "language=de-DE" \ --data-urlencode "language=${LANGUAGE}" \
"${TMDB_API}/search/${TYPE}") "${TMDB_API}/search/${TYPE}")
TOTAL_RESULTS=$(echo "$SEARCH_JSON" | jq -r '.total_results // 0') 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')") 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')") RATING=$(get_value "$(echo "$DETAILS" | jq -r '.vote_average')")
@@ -141,15 +234,13 @@ if [[ -n "$BACKDROP_PATH" ]]; then
fi fi
mkdir -p "$INPUT/Screens" mkdir -p "$INPUT/Screens"
if [[ "$POSTER_URL" != "N/A" ]]; then if [[ "$POSTER_URL" != "N/A" ]]; then
curl -L "$POSTER_URL" \ curl -s -L "$POSTER_URL" \
-o "$INPUT/Screens/$(basename "$POSTER_PATH")" -o "$INPUT/Screens/cover.jpg"
fi fi
 
if [[ "$BACKDROP_URL" != "N/A" ]]; then if [[ "$BACKDROP_URL" != "N/A" ]]; then
curl -L "$BACKDROP_URL" \ curl -s -L "$BACKDROP_URL" \
-o "$INPUT/Screens/$(basename "$BACKDROP_PATH")" -o "$INPUT/Screens/backdrop.jpg"
fi fi
# --data-urlencode "api_key=AB" \ # --data-urlencode "api_key=AB" \
@@ -181,6 +272,17 @@ SIZE=$(du -sh "$MEDIA_FILE" | awk '{print $1}')
MD5=$(md5sum "$MEDIA_FILE" | awk '{print $1}') MD5=$(md5sum "$MEDIA_FILE" | awk '{print $1}')
SHA256=$(sha256sum "$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 echo Generate nfo file
cat > "${NAME}.nfo" <<EOF cat > "${NAME}.nfo" <<EOF
@@ -188,17 +290,88 @@ cat > "${NAME}.nfo" <<EOF
RELEASE INFORMATION RELEASE INFORMATION
================================================== ==================================================
Title : $NAME Title : ${TITLE:-$NAME}
Size : $SIZE Original Title : ${ORIGINAL_TITLE:-N/A}
File: TMDB ID : ${TMDB_ID:-N/A}
$MEDIA_FILE 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 $VIDEO_CODEC
Encoder Settings: Encoder Settings
$ENCODER_SETTINGS ----------------
${ENCODER_SETTINGS:-N/A}
-------------------------------------------------- --------------------------------------------------
MEDIAINFO MEDIAINFO
@@ -210,39 +383,41 @@ $MEDIAINFO_OUTPUT
CHECKSUMS CHECKSUMS
-------------------------------------------------- --------------------------------------------------
MD5: MD5
---
$MD5 $MD5
SHA256: SHA256
------
$SHA256 $SHA256
-------------------------------------------------- --------------------------------------------------
TORRENT TORRENT
-------------------------------------------------- --------------------------------------------------
Private Torrent : Yes Private Torrent : Yes
Piece Size : ${PIECE_SIZE:-Unknown}
Generated with: Created With : mktorrent
mktorrent
mediainfo
==================================================
Generated on: $(date)
================================================== ==================================================
EOF EOF
SCREEN_DIR="$INPUT/Screens" SCREEN_DIR="$INPUT/Screens"
mkdir -p "$SCREEN_DIR" mkdir -p "$SCREEN_DIR"
 
# Videolänge in Sekunden # Videolänge in Sekunden
DURATION=$(ffprobe -v error \ DURATION=$(ffprobe -v error \
-show_entries format=duration \ -show_entries format=duration \
-of default=noprint_wrappers=1:nokey=1 \ -of default=noprint_wrappers=1:nokey=1 \
"$MEDIA_FILE") "$MEDIA_FILE")
 
# 5 gleichmäßig verteilte Screenshots (10%-90%) # 5 gleichmäßig verteilte Screenshots (10%-90%)
for i in {1..5}; do for i in {1..5}; do
PERCENT=$((i * 100 / 6)) PERCENT=$((i * 100 / 6))
TIMESTAMP=$(awk "BEGIN {print $DURATION * $PERCENT / 100}") TIMESTAMP=$(awk "BEGIN {print $DURATION * $PERCENT / 100}")
 
ffmpeg -y \ ffmpeg -y \
-ss "$TIMESTAMP" \ -ss "$TIMESTAMP" \
-i "$MEDIA_FILE" \ -i "$MEDIA_FILE" \
@@ -251,9 +426,8 @@ ffmpeg -y \
"$SCREEN_DIR/screen_$i.png" \ "$SCREEN_DIR/screen_$i.png" \
>/dev/null 2>&1 >/dev/null 2>&1
done done
 
echo "Screenshots erstellt in: $SCREEN_DIR"
echo "Screenshots erstellt in: $SCREEN_DIR"
echo "Created:" echo "Created:"
echo " ${NAME}.torrent" echo " ${NAME}.torrent"
@@ -277,11 +451,6 @@ fi
for f in "$INPUT"/Screens/*; do for f in "$INPUT"/Screens/*; do
[[ -e "$f" ]] && FILES+=("$f") [[ -e "$f" ]] && FILES+=("$f")
done done
ssh lucas@vivohost "mkdir -p \"Torrents/$NAME\""  ssh lucas@vivohost "mkdir -p \"Torrents/${NAME}\"" 
scp \ scp "${NAME}.torrent" "${NAME}.nfo" lucas@vivohost:"Torrents/${NAME}/"
"${NAME}.torrent" \ scp -r "$INPUT/Screens" lucas@vivohost:"Torrents/${NAME}/"
"${NAME}.nfo" \
lucas@vivohost:"Torrents/$NAME/"
scp -r \
"$INPUT/Screens" \
lucas@vivohost:"Torrents/$NAME/"