You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
5.1 KiB
Bash

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/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
}