Skip to content

Instantly share code, notes, and snippets.

@Bitnik212
Last active August 10, 2023 22:03
Show Gist options
  • Save Bitnik212/fa011810771ef789b1d578709ca6ffe1 to your computer and use it in GitHub Desktop.
Save Bitnik212/fa011810771ef789b1d578709ca6ffe1 to your computer and use it in GitHub Desktop.
MKV files merge tool
#! /bin/bash
nowmkv="[Erai-raws] World Trigger 2nd Season - $1 [1080p].mkv" && echo $nowmkv
nowep="e$1" && echo $nowep
mkvmerge -o "World_Trigger_s02${nowep}_[1080p].mkv" --language 0:rus 'RUS Sound'/"[Erai-raws] World Trigger 2nd Season - $1 [1080p].AniDub.ac3" --language 0:rus Subs/Crunchyroll/"[Erai-raws] World Trigger 2nd Season - $1 [1080p].ass" "$nowmkv"
#!/bin/bash
# =========================== Init =============================================================================================================
full_path=$(pwd)
# echo -e "$full_path \n"
# Список именованных аргументов
args_key_words=("sounds_folder_ru=" "subs_folder_ru=" "subs_folder_en=" "sounds_folder_en=" "start_episod=" "end_episod=")
# Системное
entered_arguments_count=0
for arg in "$@"
do
for kw in "${args_key_words[@]}"
do
if [[ "$arg" == $kw* ]]; then
value=${arg/$kw/''}
if [[ $kw == ${args_key_words[0]} ]]; then
sounds_folder=$value
elif [[ $kw == ${args_key_words[1]} ]]; then
subs_folder=$value
elif [[ $kw == ${args_key_words[2]} ]]; then
subs_folder_en=$value
elif [[ $kw == ${args_key_words[3]} ]]; then
sounds_folder_en=$value
elif [[ $kw == ${args_key_words[4]} ]]; then
start_episod=$value
elif [[ $kw == ${args_key_words[5]} ]]; then
end_episod=$value
fi
((entered_arguments_count++))
fi
done
done
if [[ $# -ne $entered_arguments_count ]]; then
echo "Не указан один или несколько из аргументов"
fi
function proccess_folder {
folder="$1"
lang="$2"
#echo "folder=$folder lang=$lang"
proccess_result=""
for sub_folder in "$folder"/*
do
folder_name=${sub_folder/"$folder/"/''}
for file in "$sub_folder"/*
do
if [[ $file == "$sub_folder/$template_file_name"* ]]; then
proccess_result="$proccess_result= --track-name 0:\"$folder_name\" --language 0:$lang \"$file\" "
fi
done
done
echo $proccess_result
}
# =========================== Main =============================================================================================================
for (( i=$start_episod; i <= $end_episod; i++ ))
do
if [ $i -gt 99 ]; then
number="$i"
else
number="00$i"
fi
episod="s01e$number"
out_file_name="Naruto.576p.$episod.mkv"
template_file_name="[SOFCJ-Raws] Naruto - $number (DVDRip 768x576 HEVC VFR 10bit FLAC)"
in_file_name="$template_file_name.mkv"
result=''
ru_sounds_result=$(proccess_folder "$sounds_folder" "ru")
ru_subs_result=$(proccess_folder "$subs_folder" "ru")
en_sounds_result=$(proccess_folder "$sounds_folder_en" "en")
en_subs_result=$(proccess_folder "$subs_folder_en" "en")
result="-o \"$out_file_name\" $ru_sounds_result $ru_subs_result $en_sounds_result $en_subs_result \"$in_file_name\""
#echo "=================================================="
#echo "$result"
eval "mkvmerge $result"
done
@Bitnik212
Copy link
Author

Работает только если:

  • Файлы звука и субтитров имеют одинаковое названия без учета расширения файлов
  • Название файлов не меняется исключение номер серии

@Bitnik212
Copy link
Author

Пример:

bash mkvmerge.sh sounds_folder_ru="Sound/Rus [Dub+MVO]" subs_folder_ru="Subs/Rus Sub" subs_folder_en="Subs/Eng Sub" sounds_folder_en="Sound/Eng [Dub]" start_episod=1 end_episod=200

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment