From c28b968a95ad438ee4cbd6c4301c6ea7d96e9e30 Mon Sep 17 00:00:00 2001 From: Adam Bissen Date: Tue, 7 Jan 2025 20:21:21 -0600 Subject: [PATCH] Potentially final version. Added mediainfo function to determine HDR type. Added functions for encode. --- SmartScript.sh | 91 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 75 insertions(+), 16 deletions(-) diff --git a/SmartScript.sh b/SmartScript.sh index f5c35df..e2a92d1 100755 --- a/SmartScript.sh +++ b/SmartScript.sh @@ -19,6 +19,47 @@ urlencode() { echo "$encoded" } +# Use mediainfo to get HDR type of video +# 0=NoHDR, 1=HDR10, 2=DolbyVision +getHDRType() { + local movie_path="$1" + + case $(mediainfo --Output=JSON "$movie_path" | ./jq -r '[.media.track[] | select(.["@type"] == "Video")] | .[0].HDR_Format' ) in + *"Dolby Vision"*) echo "2" ;; + "null") echo "0" ;; + *) echo "1" ;; + esac +} + +encodeDV() { + local local_title="$1" + + HandBrakeCLI -i "../$local_title/$local_title - 4k DV.mkv" -o "../$local_title/temp/handbrake.mkv" -f av_mkv -m -e x265_10bit --encoder-preset slower -q 20 --encoder-profile auto --all-audio -E copy --audio-copy-mask aac,eac3,dts,ac3,truehd,dtshd,mp3 --crop-mode auto --auto-anamorphic --all-subtitles + + ffmpeg -i "../$local_title/$local_title - 4k DV.mkv" -c:v copy -f hevc - | ./dovi_tool -m 2 --crop extract-rpu - -o "../$local_title/temp/rpu.bin" + + ffmpeg -i "../$local_title/temp/handbrake.mkv" -c:v copy "../$local_title/temp/nonhdr.hevc" + + ./dovi_tool inject-rpu -i "../$local_title/temp/nonhdr.hevc" --rpu-in "../$local_title/temp/rpu.bin" -o "../$local_title/temp/hdrcompressed.hevc" + + mkvmerge --output "../$local_title/$local_title/$local_title - 4k DVP8 Subs.mkv" "../$title/temp/hdrcompressed.hevc" -D -S -B -T --no-chapters -M --no-global-tags "../$title/temp/handbrake.mkv" --default-track-flag 0:no --language 0:en "../$title/$title.en.srt" -D -A "../$title/temp/handbrake.mkv" +} + +encodeHDR() { + local local_title="$1" + + HandBrakeCLI -i "../$local_title/$local_title - 4k.mkv" -o "../$local_title/temp/handbrake.mkv" -f av_mkv -m -e x265_10bit --encoder-preset slower -q 20 --encoder-profile auto --all-audio -E copy --audio-copy-mask aac,eac3,dts,ac3,truehd,dtshd,mp3 --crop-mode auto --auto-anamorphic --all-subtitles + + mkvmerge --output "../$local_title/$local_title/$local_title - 4k Subs.mkv" -S --no-chapters "../$local_title/temp/handbrake.mkv" --default-track-flag 0:no --language 0:en "../$local_title/$local_title.en.srt" -A -D -B -T -M --no-global-tags "../$local_title/temp/handbrake.mkv" +} + +encodeNonHDR() { + local local_title="$1" + + HandBrakeCLI -i "../$local_title/$local_title.mkv" -o "../$local_title/$local_title/$local_title.mkv" -f av_mkv -m -e x265 --encoder-preset slower -q 20 --encoder-profile auto --all-audio -E copy --audio-copy-mask aac,eac3,dts,ac3,truehd,dtshd,mp3 --crop-mode auto --auto-anamorphic --all-subtitles +} + + counter=1 folders=() for dir in ../*/; do @@ -29,7 +70,7 @@ for dir in ../*/; do counter=$((counter + 1)) done -read -p "Please select a folder by entering the corresponding number: " selection +read -r -p "Please select a folder by entering the corresponding number: " selection #Assuming folder name is name of movie title="${folders[$((selection - 1))]}" @@ -40,8 +81,6 @@ echo "You selected: $title" encoded_title=$(echo "$title" | sed -E 's/ \([0-9]{4}\)$//') encoded_title=$(urlencode "$encoded_title") -# mkdir "../$title/temp" - # Search The Movie Database json_results=$(curl -s --request GET \ --url "https://api.themoviedb.org/3/search/movie?query=$encoded_title&include_adult=false&language=en-US&page=1" \ @@ -57,21 +96,41 @@ read -r -p "Selection: " selection selected_movie=$(echo "$json_results" | ./jq -r ".results[$((selection - 1))]") full_title=$(echo "$selected_movie" | ./jq -r '. | "\(.original_title) (\(.release_date | split("-")[0]))"') + +if [[ "../$full_title/" != "$folder_path" ]]; then + echo "Updating folder name to \"$full_title\"" + mv "$folder_path" "../$full_title" +fi + +#Find mkv files in folder +for movie in "../$full_title/"*.mkv; do + echo "Found mkv file $movie" +done + +hdr_type=$(getHDRType "$movie") + +mkdir "../$full_title/temp" +mkdir "../$full_title/$full_title" + +case "$hdr_type" in + 2) { + mv "$movie" "../$full_title/$full_title - 4k DV.mkv" + encodeDV "$full_title" + };; + 1) { + mv "$movie" "../$full_title/$full_title - 4k.mkv" + encodeHDR "$full_title" + };; + 0) { + mv "$movie" "../$full_title/$full_title.mkv" + encodeNonHDR "$full_title" + };; +esac + poster_path="https://image.tmdb.org/t/p/original$(echo "$selected_movie" | ./jq -r '.poster_path')" - echo "Downloading Poster..." -curl -s -o "$folder_path/poster.${poster_path##*.}" "$poster_path" +curl -s -o "../$full_title/$full_title/poster.${poster_path##*.}" "$poster_path" -echo "Updating folder name to \"$full_title\"" -mv "$folder_path" "../$full_title" +echo "$full_title encode complete." -# HandBrakeCLI -i "../$title/$title - 4k DV.mkv" -o "../$title/temp/handbrake.mkv" -f av_mkv -m -e x265_10bit --encoder-preset slower -q 20 --encoder-profile auto --all-audio -E copy --audio-copy-mask aac,eac3,dts,ac3,truehd,dtshd,mp3 --crop-mode auto --auto-anamorphic --all-subtitles - -# ffmpeg -i "../$title/$title - 4k DV.mkv" -c:v copy -f hevc - | ./dovi_tool -m 2 --crop extract-rpu - -o "../$title/temp/rpu.bin" - -# ffmpeg -i "../$title/temp/handbrake.mkv" -c:v copy "../$title/temp/nonhdr.hevc" - -# ./dovi_tool inject-rpu -i "../$title/temp/nonhdr.hevc" --rpu-in "../$title/temp/rpu.bin" -o "../$title/temp/hdrcompressed.hevc" - -# mkvmerge --output "../$title/$title - 4k DVP8 Subs.mkv" "../$title/temp/hdrcompressed.hevc" -D -S -B -T --no-chapters -M --no-global-tags "../$title/temp/handbrake.mkv" --default-track-flag 0:no --language 0:en "../$title/$title.en.srt" -D -A "../$title/temp/handbrake.mkv"