Compare commits

..

15 Commits

Author SHA1 Message Date
59c5df34d9 SmartScript (#1)
Script to detect HDR, Dolby Vision, etc. Also renames files pulling from TheMovieDB API.

Reviewed-on: #1
2025-01-19 09:14:58 -06:00
833185c352 Update dovi_tool to 2.1.3 2025-01-05 14:59:10 -06:00
8d784c88cd commit various changes. 2024-02-12 20:53:56 -06:00
e9460cd109 Add dovi_tool and script for linux 2023-12-14 19:49:57 +00:00
59b8269f2e Update dovi_tool to 2.0.3. Don't print to logfile. 2023-05-29 15:31:33 -05:00
f5c3dddbb4 Update dovi_tool to 2.0.2 2023-02-11 08:59:24 -06:00
92ee9f930d Update 1080p tonemap to have work in separate directory. 2023-02-11 08:56:47 -06:00
748fceced8 Update handbrake to 1.6.1 2023-02-04 10:04:14 -06:00
8e3bfc4869 Remove comments. 2023-02-02 19:27:10 -06:00
33fbff126a Fix subtitle language. 2023-02-02 19:12:43 -06:00
9249fab72a Add language flag to SRT file. Add non-DV 4k compress. 2023-01-29 10:12:41 -06:00
db5d0a1075 Remove comments 2023-01-24 17:42:58 -06:00
649316e9dc Change SRT track default to no. 2023-01-23 21:29:24 -06:00
795deaf849 Use relative paths. Use handbrake for tonemapping. Insert SRT subs into final 4k mkv. 2023-01-22 17:53:56 -06:00
609cce7dd0 Convert to DV Profile 8 2023-01-14 10:52:46 -06:00
13 changed files with 188 additions and 6 deletions

1
1080p Compress.bat Executable file
View File

@ -0,0 +1 @@
HandBrakeCLI -i %1 -o output.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

7
4K Compress.bat Executable file
View File

@ -0,0 +1,7 @@
@SET TITLE=%~1
mkdir "../%TITLE%/temp"
HandBrakeCLI -i "../%TITLE%/%TITLE% - 4k.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 > "../%TITLE%/temp/log.txt"
"%ProgramFiles%\MKVToolNix\mkvmerge.exe" --output "../%TITLE%/%TITLE% - 4k Subs.mkv" -S --no-chapters "../%TITLE%/temp/handbrake.mkv" --default-track-flag 0:no --language 0:en "../%TITLE%/%TITLE%.en.srt" -A -D -B -T -M --no-global-tags "../%TITLE%/temp/handbrake.mkv" >> "../%TITLE%/temp/log.txt"

14
4K DV Compress.bat Normal file → Executable file
View File

@ -1,9 +1,13 @@
HandBrakeCLI -i %1 -o 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 > temp/log.txt
@SET TITLE=%~1
ffmpeg.exe -i %1 -c:v copy -f hevc - | dovi_tool extract-rpu - -o "temp/RPU.bin">> temp/log.txt
mkdir "../%TITLE%/temp"
ffmpeg.exe -i temp/handbrake.mkv -c:v copy temp/nonhdr.hevc >> temp/log.txt
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
dovi_tool.exe inject-rpu -i temp/nonhdr.hevc --rpu-in "temp/RPU.bin" -o temp/hdrcompressed.hevc >> temp/log.txt
ffmpeg.exe -i "../%TITLE%/%TITLE% - 4k DV.mkv" -c:v copy -f hevc - | dovi_tool -m 2 --crop extract-rpu - -o "../%TITLE%/temp/RPU.bin" >> "../%TITLE%/temp/log.txt"
"%ProgramFiles%\MKVToolNix\mkvmerge.exe" --output DVCompressed.mkv temp/hdrcompressed.hevc -D temp/handbrake.mkv >> temp/log.txt
ffmpeg.exe -i "../%TITLE%/temp/handbrake.mkv" -c:v copy "../%TITLE%/temp/nonhdr.hevc" >> "../%TITLE%/temp/log.txt"
dovi_tool.exe inject-rpu -i "../%TITLE%/temp/nonhdr.hevc" --rpu-in "../%TITLE%/temp/RPU.bin" -o "../%TITLE%/temp/hdrcompressed.hevc" >> "../%TITLE%/temp/log.txt"
"%ProgramFiles%\MKVToolNix\mkvmerge.exe" --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" >> "../%TITLE%/temp/log.txt"

11
4k Compress.sh Executable file
View File

@ -0,0 +1,11 @@
#!/usr/bin/env bash
echo "Enter Movie Title:"
read -r title
mkdir "../$title/temp"
HandBrakeCLI -i "../$title/$title - 4k.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
mkvmerge --output "../$title/$title - 4k Subs.mkv" -S --no-chapters "../$title/temp/handbrake.mkv" --default-track-flag 0:no --language 0:en "../$title/$title.en.srt" -A -D -B -T -M --no-global-tags "../$title/temp/handbrake.mkv"

17
4k DV Compress.sh Executable file
View File

@ -0,0 +1,17 @@
#!/usr/bin/env bash
echo "Enter Movie Title:"
read -r title
mkdir "../$title/temp"
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"

4
4k to 1080p tonemap.bat Normal file → Executable file
View File

@ -1 +1,3 @@
ffmpeg.exe -i %1 -map 0 -c:a copy -c:s copy -vf zscale=-1:1080,zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable:desat=0,zscale=t=bt709:m=bt709:r=tv,format=yuv420p -c:v libx265 -crf 20 -preset slower output.mkv
@SET TITLE=%~1
HandBrakeCLI -i "../%TITLE%/%TITLE% - 4k.mkv" -o "../%TITLE%/%TITLE% - 1080p.mkv" -f av_mkv -m -e x265_10bit --encoder-preset slower -q 19 --encoder-profile auto --all-audio -E copy --audio-copy-mask aac,eac3,dts,ac3,truehd,dtshd,mp3 --maxWidth 1920 --crop-mode auto --auto-anamorphic --colorspace bt709 --all-subtitles

BIN
HandBrakeCLI.exe Normal file → Executable file

Binary file not shown.

136
SmartScript.sh Executable file
View File

@ -0,0 +1,136 @@
#!/usr/bin/env bash
source ./secrets.sh
# Function to URL encode a string
urlencode() {
local string="$1"
local encoded=""
local char
for (( i=0; i<${#string}; i++ )); do
char="${string:i:1}"
case "$char" in
[a-zA-Z0-9.~_-]) encoded+="$char" ;;
" ") encoded+="%20" ;;
*) encoded+=$(printf '%%%02X' "'$char") ;;
esac
done
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" "../$local_title/temp/hdrcompressed.hevc" -D -S -B -T --no-chapters -M --no-global-tags "../$local_title/temp/handbrake.mkv" --default-track-flag 0:no --language 0:en "../$local_title/$local_title.en.srt" -D -A "../$local_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
folder_name="${dir#../}"
folder_name="${folder_name%/}"
echo "$counter. $folder_name"
folders+=("$folder_name")
counter=$((counter + 1))
done
read -r -p "Please select a folder by entering the corresponding number: " selection
#Assuming folder name is name of movie
title="${folders[$((selection - 1))]}"
folder_path="../$title/"
echo "You selected: $title"
# URL encode the movie title
encoded_title=$(echo "$title" | sed -E 's/ \([0-9]{4}\)$//')
encoded_title=$(urlencode "$encoded_title")
# 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" \
--header "Authorization: Bearer $themoviedb_token" \
--header 'accept: application/json' | ./jq)
# Show first results and have user select right result
echo "Select the correct movie title:"
echo "$json_results" | ./jq -r '.results[:3] | to_entries[] | "\(.key + 1). \(.value.title) (\(.value.release_date))"'
read -r -p "Selection: " selection
# Get the selected movie details
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 "../$full_title/$full_title/poster.${poster_path##*.}" "$poster_path"
echo "$full_title encode complete."

BIN
dovi_tool Executable file

Binary file not shown.

BIN
dovi_tool.exe Normal file → Executable file

Binary file not shown.

0
ffmpeg.exe Normal file → Executable file
View File

BIN
jq Executable file

Binary file not shown.

4
secrets.sh Executable file
View File

@ -0,0 +1,4 @@
# secrets.sh
# Enter TheMovieDB API Token
themoviedb_token=