Skip to content

Instantly share code, notes, and snippets.

@junaidk
Created August 17, 2025 16:50
Show Gist options
  • Save junaidk/5670ba0fa4da28be2b655c46c1f92283 to your computer and use it in GitHub Desktop.
Save junaidk/5670ba0fa4da28be2b655c46c1f92283 to your computer and use it in GitHub Desktop.
This script is designed as a front-end automation tool for removing Dolby Vision (DV) and HDR10+ metadata from video files (mainly .mkv, .mp4, .hevc, .h265). It wraps together several third-party tools and provides a text-menu interface.
#!/usr/bin/env bash
# Lightweight HDR metadata remover (Linux)
# Supports: Dolby Vision (dovi_tool), HDR10+ (hdr10plus_tool), HDR10 (ffmpeg hevc_metadata)
# Uses https://github.com/DonaldFaQ/DDVT/blob/Scripts/DDVT_REMOVER.cmd as inspiration
# Requirements:
# ffmpeg, mkvtoolnix (mkvmerge), gpac (MP4Box), mediainfo
# dovi_tool, hdr10plus_tool
# Run
# remove_hdr_dv.sh <file_name>
INPUT="$1"
if [[ -z "$INPUT" ]]; then
echo "Usage: $0 <video_file>"
exit 1
fi
if [[ ! -f "$INPUT" ]]; then
echo "Error: File not found: $INPUT"
exit 1
fi
# Extract filename parts
BASENAME=$(basename "$INPUT")
EXT="${BASENAME##*.}"
NAME="${BASENAME%.*}"
DIRNAME=$(dirname "$INPUT")
# Detect HDR/DV info
HDR_INFO=$(mediainfo --Inform="Video;%HDR_Format%" "$INPUT")
DV_PROFILE=$(mediainfo --Inform="Video;%HDR_Format_Profile%" "$INPUT")
echo "Input file: $BASENAME"
echo "HDR: $HDR_INFO"
echo "DV Profile: $DV_PROFILE"
# Flags
REMOVE_HDR10P=false
REMOVE_DV=false
REMOVE_HDR10=false
if [[ "$HDR_INFO" == "HDR10+" ]]; then
REMOVE_HDR10P=true
fi
if [[ "$DV_PROFILE" =~ "dvhe" ]]; then
REMOVE_DV=true
fi
# Ask user if they want to strip HDR10 static metadata too
read -p "Also remove HDR10 static metadata (MaxCLL, MaxFALL, mastering display)? [y/N]: " ans
if [[ "$ans" =~ ^[Yy]$ ]]; then
REMOVE_HDR10=true
fi
# Work paths
OUTPUT="$DIRNAME/$NAME.cleaned.$EXT"
TEMP_VIDEO="$DIRNAME/$NAME.video.hevc"
# Extract raw video stream
echo "Extracting video stream..."
ffmpeg -y -i "$INPUT" -c:v copy -bsf:v hevc_mp4toannexb -an -sn -f hevc "$TEMP_VIDEO"
# Remove HDR10+
if [[ "$REMOVE_HDR10P" == true ]]; then
echo "Stripping HDR10+ metadata..."
hdr10plus_tool remove -i "$TEMP_VIDEO" -o "$TEMP_VIDEO.stripped"
mv "$TEMP_VIDEO.stripped" "$TEMP_VIDEO"
fi
# Remove Dolby Vision
if [[ "$REMOVE_DV" == true ]]; then
echo "Stripping Dolby Vision RPU..."
dovi_tool remove -i "$TEMP_VIDEO" -o "$TEMP_VIDEO.stripped"
mv "$TEMP_VIDEO.stripped" "$TEMP_VIDEO"
fi
# Remove HDR10 static metadata
if [[ "$REMOVE_HDR10" == true ]]; then
echo "Removing HDR10 static metadata (MaxCLL/MaxFALL, mastering display)..."
ffmpeg -y -i "$TEMP_VIDEO" -c copy -bsf:v hevc_metadata=remove "$TEMP_VIDEO.stripped.hevc"
mv "$TEMP_VIDEO.stripped.hevc" "$TEMP_VIDEO"
fi
# Remux back into original container
echo "Remuxing cleaned video..."
if [[ "$EXT" == "mkv" ]]; then
mkvmerge -o "$OUTPUT" --video-tracks 0 "$TEMP_VIDEO" -D "$INPUT"
elif [[ "$EXT" == "mp4" ]]; then
MP4Box -add "$TEMP_VIDEO" -cat "$INPUT" -new "$OUTPUT"
else
echo "Unsupported extension: $EXT. Output as MKV."
mkvmerge -o "$OUTPUT" --video-tracks 0 "$TEMP_VIDEO" -D "$INPUT"
fi
# Cleanup
rm -f "$TEMP_VIDEO"
echo "Done. Output file: $OUTPUT"
#!/usr/bin/env bash
# Setup script: install dependencies + dovi_tool + hdr10plus_tool
set -e
echo "=== Updating package lists ==="
sudo apt update -y
echo "=== Installing dependencies (ffmpeg, mkvtoolnix, gpac, mediainfo) ==="
sudo apt install -y ffmpeg mkvtoolnix gpac mediainfo curl jq unzip
# Directory for downloaded tools
TMP_DIR=$(mktemp -d)
cd "$TMP_DIR"
echo "=== Fetching latest dovi_tool release ==="
DOVI_URL=$(curl -s https://api.github.com/repos/quietvoid/dovi_tool/releases/latest \
| jq -r '.assets[] | select(.name | test("linux.*.tar.gz$")) | .browser_download_url' | head -n1)
if [[ -z "$DOVI_URL" ]]; then
echo "Error: Could not find dovi_tool release URL"
exit 1
fi
curl -L "$DOVI_URL" -o dovi_tool.tar.gz
tar -xzf dovi_tool.tar.gz
sudo mv dovi_tool*/dovi_tool /usr/local/bin/
sudo chmod +x /usr/local/bin/dovi_tool
echo "=== Installed dovi_tool ==="
dovi_tool -V || true
echo "=== Fetching latest hdr10plus_tool release ==="
HDR10P_URL=$(curl -s https://api.github.com/repos/quietvoid/hdr10plus_tool/releases/latest \
| jq -r '.assets[] | select(.name | test("linux.*.tar.gz$")) | .browser_download_url' | head -n1)
if [[ -z "$HDR10P_URL" ]]; then
echo "Error: Could not find hdr10plus_tool release URL"
exit 1
fi
curl -L "$HDR10P_URL" -o hdr10plus_tool.tar.gz
tar -xzf hdr10plus_tool.tar.gz
sudo mv hdr10plus_tool*/hdr10plus_tool /usr/local/bin/
sudo chmod +x /usr/local/bin/hdr10plus_tool
echo "=== Installed hdr10plus_tool ==="
hdr10plus_tool -V || true
# Cleanup
cd /
rm -rf "$TMP_DIR"
echo
echo "✅ Setup complete!"
echo "Installed tools:"
echo " - ffmpeg"
echo " - mkvtoolnix"
echo " - gpac (MP4Box)"
echo " - mediainfo"
echo " - dovi_tool ($(dovi_tool -V))"
echo " - hdr10plus_tool ($(hdr10plus_tool -V))"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment