Skip to content

Instantly share code, notes, and snippets.

@enjikaka
Created February 28, 2025 10:41
Show Gist options
  • Save enjikaka/78d2bf17e46f3e3da2a68c3724da8ef7 to your computer and use it in GitHub Desktop.
Save enjikaka/78d2bf17e46f3e3da2a68c3724da8ef7 to your computer and use it in GitHub Desktop.
Clean out unwanted subtitles from MVK files. Keep select languages.
#!/bin/bash
# Kontrollera att en fil har angivits
if [ -z "$1" ]; then
echo "Användning: $0 <input.mkv>"
exit 1
fi
INPUT_FILE="$1"
OUTPUT_FILE="cleaned_${INPUT_FILE}"
# Använd rätt mkvmerge/mkvpropedit via Flatpak
MKVMERGE="flatpak run org.bunkus.mkvtoolnix-gui mkvmerge"
MKVPROPEDIT="flatpak run org.bunkus.mkvtoolnix-gui mkvpropedit"
# Hämta spårinformation i JSON-format
echo "Läser spårinformation från $INPUT_FILE..."
TRACKS_JSON=$($MKVMERGE -J "$INPUT_FILE")
# Identifiera vilka undertexter som ska behållas
KEEP_TRACKS=()
DEFAULT_TRACK=""
FIRST_ENGLISH_TRACK=""
# Loop över alla undertextspår
for track_id in $(echo "$TRACKS_JSON" | jq -r '.tracks[] | select(.type == "subtitles") | .id'); do
LANG=$(echo "$TRACKS_JSON" | jq -r ".tracks[] | select(.id == $track_id) | .properties.language")
case "$LANG" in
swe|nor|fin)
KEEP_TRACKS+=("$track_id")
[[ -z "$DEFAULT_TRACK" && "$LANG" == "swe" ]] && DEFAULT_TRACK="$track_id"
;;
eng)
if [ -z "$FIRST_ENGLISH_TRACK" ]; then
FIRST_ENGLISH_TRACK="$track_id"
KEEP_TRACKS+=("$track_id")
fi
;;
esac
done
# Om inga undertexter hittades, låt användaren välja manuellt
if [ ${#KEEP_TRACKS[@]} -eq 0 ]; then
echo "Inga undertexter med korrekt språk hittades!"
echo "Här är en lista över alla undertextspår:"
echo "$TRACKS_JSON" | jq -r '.tracks[] | select(.type == "subtitles") | "\(.id): \(.properties.language) (\(.codec))"'
read -p "Ange ID för undertexterna du vill behålla (kommaseparerat, t.ex. 2,5,8): " USER_TRACKS
IFS=',' read -r -a KEEP_TRACKS <<< "$USER_TRACKS"
read -p "Ange ID för standard-undertext (eller tryck enter för ingen): " DEFAULT_TRACK
fi
# Kontrollera om vi har spår att behålla
if [ ${#KEEP_TRACKS[@]} -eq 0 ]; then
echo "Inga undertexter valdes, avbryter."
exit 1
fi
# Bygg ny spårlista
KEEP_TRACKS_STRING=$(IFS=,; echo "${KEEP_TRACKS[*]}")
echo "Behåller undertextspår: $KEEP_TRACKS_STRING"
# Skapa en ny MKV-fil utan oönskade undertexter
$MKVMERGE -o "$OUTPUT_FILE" --subtitle-tracks "$KEEP_TRACKS_STRING" "$INPUT_FILE"
# Hämta rätt spår-ID i den nya filen
TRACKS_JSON_NEW=$($MKVMERGE -J "$OUTPUT_FILE")
# Hitta motsvarande ID i den nya filen
if [ -n "$DEFAULT_TRACK" ]; then
NEW_DEFAULT_TRACK=$(echo "$TRACKS_JSON_NEW" | jq -r ".tracks[] | select(.type == \"subtitles\") | select(.id == $DEFAULT_TRACK) | .id")
if [ -n "$NEW_DEFAULT_TRACK" ]; then
echo "Sätter spår $NEW_DEFAULT_TRACK som standard undertext..."
$MKVPROPEDIT "$OUTPUT_FILE" --edit track:s"$NEW_DEFAULT_TRACK" --set flag-default=1
fi
fi
echo "Klart! Filen sparades som $OUTPUT_FILE"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment