|
|
#!/bin/bash
|
|
|
|
|
|
#==============================================================================
|
|
|
# Модуль действий: выполнение mkvmerge, создание симлинков и т.д.
|
|
|
#==============================================================================
|
|
|
|
|
|
# Функция для склейки видео и аудио
|
|
|
# $1: Исходный видеофайл
|
|
|
# $2: Исходный аудиофайл
|
|
|
# $3: Выходной файл
|
|
|
action_merge_mkv() {
|
|
|
local video_file="$1"
|
|
|
local audio_file="$2"
|
|
|
local output_file="$3"
|
|
|
|
|
|
echo "---"
|
|
|
echo "ИСХОДНОЕ ВИДЕО : $video_file"
|
|
|
echo "ИСХОДНОЕ АУДИО : $audio_file"
|
|
|
echo "РЕЗУЛЬТАТ : $output_file"
|
|
|
|
|
|
# Это основная команда. Вы можете настроить ее под себя.
|
|
|
# --language 0:und - язык первой дорожки (видео) - неопределенный
|
|
|
# --language 1:rus - язык второй дорожки (аудио) - русский
|
|
|
# Вы можете добавить больше опций, например, --track-name, --default-track-flag
|
|
|
mkvmerge \
|
|
|
-o "$output_file" \
|
|
|
--language 0:und "$video_file" \
|
|
|
--language 1:rus "$audio_file"
|
|
|
|
|
|
if [ $? -eq 0 ]; then
|
|
|
echo "УСПЕХ: Файл создан."
|
|
|
else
|
|
|
echo "ОШИБКА: mkvmerge завершился с ошибкой."
|
|
|
fi
|
|
|
echo
|
|
|
}
|
|
|
|
|
|
# Функция для создания символической ссылки
|
|
|
# $1: Исходный видеофайл
|
|
|
# $2: Имя ссылки (выходной файл)
|
|
|
action_create_symlink() {
|
|
|
local video_file="$1"
|
|
|
local output_file="$2"
|
|
|
|
|
|
echo "---"
|
|
|
echo "ИСТОЧНИК: $video_file"
|
|
|
echo "ССЫЛКА : $output_file"
|
|
|
|
|
|
# Создаем символическую ссылку
|
|
|
ln -s "$video_file" "$output_file"
|
|
|
|
|
|
if [ $? -eq 0 ]; then
|
|
|
echo "УСПЕХ: Ссылка создана."
|
|
|
else
|
|
|
echo "ОШИБКА: Не удалось создать ссылку."
|
|
|
fi
|
|
|
echo
|
|
|
}
|
|
|
|
|
|
|
|
|
# Главная функция запуска обработки
|
|
|
run_processing() {
|
|
|
# 1. Готовим списки файлов
|
|
|
if ! logic_prepare_file_lists; then
|
|
|
return 1
|
|
|
fi
|
|
|
|
|
|
if [ ${#FILE_TRIPLETS[@]} -eq 0 ]; then
|
|
|
ui_show_message "Запуск" "Нет файлов для обработки."
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
# 2. Спрашиваем, что делать
|
|
|
local action_to_perform
|
|
|
action_to_perform=$(ui_select_action)
|
|
|
|
|
|
if [[ -z "$action_to_perform" ]]; then
|
|
|
ui_show_message "Отмена" "Операция отменена пользователем."
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
# 3. Финальное подтверждение
|
|
|
local confirmation_text="Вы уверены, что хотите выполнить '${action_to_perform}' для ${#FILE_TRIPLETS[@]} файлов?\n\n"
|
|
|
confirmation_text+="Результаты будут сохранены в:\n$OUTPUT_BASE_DIR"
|
|
|
if ! ui_confirm "Финальное подтверждение" "$confirmation_text"; then
|
|
|
ui_show_message "Отмена" "Операция отменена пользователем."
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
# 4. Создаем выходной каталог, если его нет
|
|
|
if [ ! -d "$OUTPUT_BASE_DIR" ]; then
|
|
|
if ui_confirm "Создание каталога" "Каталог '$OUTPUT_BASE_DIR' не существует. Создать его?"; then
|
|
|
mkdir -p "$OUTPUT_BASE_DIR"
|
|
|
if [ $? -ne 0 ]; then
|
|
|
ui_show_message "Ошибка" "Не удалось создать каталог '$OUTPUT_BASE_DIR'."
|
|
|
return
|
|
|
fi
|
|
|
else
|
|
|
ui_show_message "Отмена" "Операция отменена, так как выходной каталог не существует."
|
|
|
return
|
|
|
fi
|
|
|
fi
|
|
|
|
|
|
# 5. Выполнение операции с прогресс-баром
|
|
|
local total_files=${#FILE_TRIPLETS[@]}
|
|
|
local current_file=0
|
|
|
|
|
|
(
|
|
|
for triplet in "${FILE_TRIPLETS[@]}"; do
|
|
|
# Рассчитываем прогресс
|
|
|
local progress=$(( 100 * current_file / total_files ))
|
|
|
echo "$progress"
|
|
|
|
|
|
# Обновляем текст в прогресс-баре
|
|
|
echo -e "XXX\n$((current_file + 1)) / $total_files\nОбработка: $(basename "$triplet" | cut -f1 -d$'\t')\nXXX"
|
|
|
|
|
|
# Разбираем триплет
|
|
|
IFS=$'\t' read -r video audio output <<< "$triplet"
|
|
|
|
|
|
# Выполняем выбранное действие
|
|
|
case "$action_to_perform" in
|
|
|
"MERGE")
|
|
|
action_merge_mkv "$video" "$audio" "$output"
|
|
|
;;
|
|
|
"SYMLINK")
|
|
|
action_create_symlink "$video" "$output"
|
|
|
;;
|
|
|
esac
|
|
|
|
|
|
((current_file++))
|
|
|
done
|
|
|
# Для завершения прогресс-бара
|
|
|
echo "100"
|
|
|
echo -e "XXX\nГотово!\nНажмите Enter для выхода\nXXX"
|
|
|
sleep 2
|
|
|
) | dialog $DIALOG_OPTS --title "Выполнение..." --gauge "Подготовка..." 10 70 0
|
|
|
|
|
|
clear
|
|
|
}
|