Created
February 28, 2025 10:41
-
-
Save enjikaka/78d2bf17e46f3e3da2a68c3724da8ef7 to your computer and use it in GitHub Desktop.
Clean out unwanted subtitles from MVK files. Keep select languages.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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