Replaced all emojis with text-based indicators: - ✓ → [OK] (with GREEN color) - ✗ → [ERROR] (with RED color) - ⚠ → WARNING: (with YELLOW color) Color coding is preserved for visual distinction while remaining accessible in all terminals and avoiding encoding issues.
324 lines
11 KiB
Bash
Executable File
324 lines
11 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Spinner function
|
|
spinner() {
|
|
local pid=$1
|
|
local task=$2
|
|
local spin='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏'
|
|
local i=0
|
|
|
|
while kill -0 $pid 2>/dev/null; do
|
|
i=$(( (i+1) %10 ))
|
|
printf "\r${BLUE}${spin:$i:1}${NC} %s..." "$task"
|
|
sleep 0.1
|
|
done
|
|
printf "\r"
|
|
}
|
|
|
|
# Configuration
|
|
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
|
|
# Args
|
|
DVDSTYLER_URL=""
|
|
DVDSTYLER_ZIP=""
|
|
SKIP_DVD_TOOLS=""
|
|
SKIP_AI_TOOLS=""
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--dvdstyler-url=*)
|
|
DVDSTYLER_URL="${1#*=}"
|
|
shift
|
|
;;
|
|
--dvdstyler-url)
|
|
DVDSTYLER_URL="$2"
|
|
shift 2
|
|
;;
|
|
--dvdstyler-zip=*)
|
|
DVDSTYLER_ZIP="${1#*=}"
|
|
shift
|
|
;;
|
|
--dvdstyler-zip)
|
|
DVDSTYLER_ZIP="$2"
|
|
shift 2
|
|
;;
|
|
--skip-dvd)
|
|
SKIP_DVD_TOOLS=true
|
|
shift
|
|
;;
|
|
--skip-ai)
|
|
SKIP_AI_TOOLS=true
|
|
shift
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
echo "Usage: $0 [--dvdstyler-url URL] [--dvdstyler-zip PATH] [--skip-dvd] [--skip-ai]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Platform detection
|
|
UNAME_S="$(uname -s)"
|
|
IS_WINDOWS=false
|
|
IS_DARWIN=false
|
|
IS_LINUX=false
|
|
case "$UNAME_S" in
|
|
MINGW*|MSYS*|CYGWIN*)
|
|
IS_WINDOWS=true
|
|
;;
|
|
Darwin*)
|
|
IS_DARWIN=true
|
|
;;
|
|
Linux*)
|
|
IS_LINUX=true
|
|
;;
|
|
esac
|
|
|
|
INSTALL_TITLE="VideoTools Installation"
|
|
if [ "$IS_WINDOWS" = true ]; then
|
|
INSTALL_TITLE="VideoTools Windows Installation"
|
|
elif [ "$IS_DARWIN" = true ]; then
|
|
INSTALL_TITLE="VideoTools macOS Installation"
|
|
elif [ "$IS_LINUX" = true ]; then
|
|
INSTALL_TITLE="VideoTools Linux Installation"
|
|
fi
|
|
|
|
echo "════════════════════════════════════════════════════════════════"
|
|
echo " $INSTALL_TITLE"
|
|
echo "════════════════════════════════════════════════════════════════"
|
|
echo ""
|
|
|
|
# Step 1: Check if Go is installed
|
|
echo -e "${CYAN}[1/2]${NC} Checking Go installation..."
|
|
if ! command -v go &> /dev/null; then
|
|
echo -e "${RED}[ERROR] Error: Go is not installed or not in PATH${NC}"
|
|
echo "Please install Go 1.21+ from https://go.dev/dl/"
|
|
exit 1
|
|
fi
|
|
|
|
GO_VERSION=$(go version | awk '{print $3}' | sed 's/go//')
|
|
echo -e "${GREEN}[OK]${NC} Found Go version: $GO_VERSION"
|
|
|
|
# Step 2: Check authoring dependencies
|
|
echo ""
|
|
echo -e "${CYAN}[2/2]${NC} Checking authoring dependencies..."
|
|
|
|
if [ "$IS_WINDOWS" = true ]; then
|
|
echo "Detected Windows environment."
|
|
if [ -z "$SKIP_DVD_TOOLS" ]; then
|
|
echo ""
|
|
read -p "Install DVD authoring tools (DVDStyler)? [y/N]: " dvd_choice
|
|
if [[ "$dvd_choice" =~ ^[Yy]$ ]]; then
|
|
SKIP_DVD_TOOLS=false
|
|
else
|
|
SKIP_DVD_TOOLS=true
|
|
fi
|
|
fi
|
|
if command -v powershell.exe &> /dev/null; then
|
|
PS_ARGS=()
|
|
if [ "$SKIP_DVD_TOOLS" = true ]; then
|
|
PS_ARGS+=("-SkipDvdStyler")
|
|
fi
|
|
if [ -n "$DVDSTYLER_ZIP" ]; then
|
|
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "$PROJECT_ROOT/scripts/install-deps-windows.ps1" -DvdStylerZip "$DVDSTYLER_ZIP" "${PS_ARGS[@]}"
|
|
elif [ -n "$DVDSTYLER_URL" ]; then
|
|
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "$PROJECT_ROOT/scripts/install-deps-windows.ps1" -DvdStylerUrl "$DVDSTYLER_URL" "${PS_ARGS[@]}"
|
|
else
|
|
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "$PROJECT_ROOT/scripts/install-deps-windows.ps1" "${PS_ARGS[@]}"
|
|
fi
|
|
if [ $? -ne 0 ]; then
|
|
echo -e "${RED}[ERROR] Windows dependency installer failed.${NC}"
|
|
echo "If DVDStyler download failed, retry with a direct mirror:"
|
|
echo ""
|
|
echo "Git Bash:"
|
|
echo " export VT_DVDSTYLER_URL=\"https://netcologne.dl.sourceforge.net/project/dvdstyler/DVDStyler/3.2.1/DVDStyler-3.2.1-win64.zip\""
|
|
echo " ./scripts/install.sh"
|
|
echo ""
|
|
echo "PowerShell:"
|
|
echo " \$env:VT_DVDSTYLER_URL=\"https://netcologne.dl.sourceforge.net/project/dvdstyler/DVDStyler/3.2.1/DVDStyler-3.2.1-win64.zip\""
|
|
echo " .\\scripts\\install-deps-windows.ps1"
|
|
exit 1
|
|
fi
|
|
echo -e "${GREEN}[OK]${NC} Windows dependency installer completed"
|
|
else
|
|
echo -e "${RED}[ERROR] powershell.exe not found.${NC}"
|
|
echo "Please run: $PROJECT_ROOT\\scripts\\install-deps-windows.ps1"
|
|
exit 1
|
|
fi
|
|
else
|
|
missing_deps=()
|
|
if ! command -v ffmpeg &> /dev/null; then
|
|
missing_deps+=("ffmpeg")
|
|
fi
|
|
if [ -z "$SKIP_DVD_TOOLS" ]; then
|
|
echo ""
|
|
read -p "Install DVD authoring tools (dvdauthor + ISO tools)? [y/N]: " dvd_choice
|
|
if [[ "$dvd_choice" =~ ^[Yy]$ ]]; then
|
|
SKIP_DVD_TOOLS=false
|
|
else
|
|
SKIP_DVD_TOOLS=true
|
|
fi
|
|
fi
|
|
if [ "$SKIP_DVD_TOOLS" = false ]; then
|
|
if ! command -v dvdauthor &> /dev/null; then
|
|
missing_deps+=("dvdauthor")
|
|
fi
|
|
if ! command -v xorriso &> /dev/null; then
|
|
missing_deps+=("xorriso")
|
|
fi
|
|
fi
|
|
|
|
# Ask about AI upscaling tools
|
|
if [ -z "$SKIP_AI_TOOLS" ]; then
|
|
echo ""
|
|
read -p "Install AI upscaling tools (Real-ESRGAN NCNN)? [y/N]: " ai_choice
|
|
if [[ "$ai_choice" =~ ^[Yy]$ ]]; then
|
|
SKIP_AI_TOOLS=false
|
|
else
|
|
SKIP_AI_TOOLS=true
|
|
fi
|
|
fi
|
|
if [ "$SKIP_AI_TOOLS" = false ]; then
|
|
if ! command -v realesrgan-ncnn-vulkan &> /dev/null; then
|
|
missing_deps+=("realesrgan-ncnn-vulkan")
|
|
fi
|
|
fi
|
|
|
|
install_deps=false
|
|
if [ ${#missing_deps[@]} -gt 0 ]; then
|
|
echo -e "${YELLOW}WARNING:${NC} Missing dependencies: ${missing_deps[*]}"
|
|
echo "Installing missing dependencies..."
|
|
install_deps=true
|
|
else
|
|
echo -e "${GREEN}[OK]${NC} All authoring dependencies found"
|
|
fi
|
|
|
|
if [ "$install_deps" = true ]; then
|
|
if command -v apt-get &> /dev/null; then
|
|
sudo apt-get update
|
|
if [ "$SKIP_DVD_TOOLS" = true ]; then
|
|
sudo apt-get install -y ffmpeg
|
|
else
|
|
sudo apt-get install -y ffmpeg dvdauthor xorriso
|
|
fi
|
|
elif command -v dnf &> /dev/null; then
|
|
if [ "$SKIP_DVD_TOOLS" = true ]; then
|
|
sudo dnf install -y ffmpeg
|
|
else
|
|
sudo dnf install -y ffmpeg dvdauthor xorriso
|
|
fi
|
|
elif command -v pacman &> /dev/null; then
|
|
if [ "$SKIP_DVD_TOOLS" = true ]; then
|
|
sudo pacman -Sy --noconfirm ffmpeg
|
|
else
|
|
sudo pacman -Sy --noconfirm ffmpeg dvdauthor cdrtools
|
|
fi
|
|
elif command -v zypper &> /dev/null; then
|
|
if [ "$SKIP_DVD_TOOLS" = true ]; then
|
|
sudo zypper install -y ffmpeg
|
|
else
|
|
sudo zypper install -y ffmpeg dvdauthor xorriso
|
|
fi
|
|
elif command -v brew &> /dev/null; then
|
|
if [ "$SKIP_DVD_TOOLS" = true ]; then
|
|
brew install ffmpeg
|
|
else
|
|
brew install ffmpeg dvdauthor xorriso
|
|
fi
|
|
else
|
|
echo -e "${RED}[ERROR] No supported package manager found.${NC}"
|
|
echo "Please install: ffmpeg, dvdauthor, and mkisofs/genisoimage/xorriso"
|
|
exit 1
|
|
fi
|
|
|
|
# Install Real-ESRGAN NCNN if requested and not available
|
|
if [ "$SKIP_AI_TOOLS" = false ] && ! command -v realesrgan-ncnn-vulkan &> /dev/null; then
|
|
echo ""
|
|
echo "Installing Real-ESRGAN NCNN..."
|
|
|
|
# Detect architecture
|
|
ARCH=$(uname -m)
|
|
if [ "$ARCH" = "x86_64" ]; then
|
|
ESRGAN_ARCH="ubuntu"
|
|
elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then
|
|
echo -e "${YELLOW}WARNING:${NC} ARM architecture detected. You may need to build realesrgan-ncnn-vulkan from source."
|
|
echo "See: https://github.com/xinntao/Real-ESRGAN-ncnn-vulkan"
|
|
ESRGAN_ARCH=""
|
|
else
|
|
echo -e "${YELLOW}WARNING:${NC} Unsupported architecture: $ARCH"
|
|
ESRGAN_ARCH=""
|
|
fi
|
|
|
|
if [ -n "$ESRGAN_ARCH" ]; then
|
|
ESRGAN_URL="https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesrgan-ncnn-vulkan-20220424-ubuntu.zip"
|
|
TEMP_DIR=$(mktemp -d)
|
|
|
|
if command -v wget &> /dev/null; then
|
|
wget -q "$ESRGAN_URL" -O "$TEMP_DIR/realesrgan.zip"
|
|
elif command -v curl &> /dev/null; then
|
|
curl -sL "$ESRGAN_URL" -o "$TEMP_DIR/realesrgan.zip"
|
|
else
|
|
echo -e "${YELLOW}WARNING:${NC} Neither wget nor curl found. Cannot download Real-ESRGAN."
|
|
echo "Please install manually from: https://github.com/xinntao/Real-ESRGAN/releases"
|
|
fi
|
|
|
|
if [ -f "$TEMP_DIR/realesrgan.zip" ]; then
|
|
unzip -q "$TEMP_DIR/realesrgan.zip" -d "$TEMP_DIR"
|
|
sudo install -m 755 "$TEMP_DIR/realesrgan-ncnn-vulkan" /usr/local/bin/ 2>/dev/null || \
|
|
install -m 755 "$TEMP_DIR/realesrgan-ncnn-vulkan" "$HOME/.local/bin/" 2>/dev/null || \
|
|
echo -e "${YELLOW}WARNING:${NC} Could not install to /usr/local/bin or ~/.local/bin"
|
|
rm -rf "$TEMP_DIR"
|
|
|
|
if command -v realesrgan-ncnn-vulkan &> /dev/null; then
|
|
echo -e "${GREEN}[OK]${NC} Real-ESRGAN NCNN installed successfully"
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if ! command -v ffmpeg &> /dev/null; then
|
|
echo -e "${RED}[ERROR] Missing required dependencies after install attempt.${NC}"
|
|
echo "Please install: ffmpeg"
|
|
exit 1
|
|
fi
|
|
if [ "$SKIP_DVD_TOOLS" = false ]; then
|
|
if ! command -v dvdauthor &> /dev/null; then
|
|
echo -e "${RED}[ERROR] Missing required dependencies after install attempt.${NC}"
|
|
echo "Please install: dvdauthor"
|
|
exit 1
|
|
fi
|
|
if ! command -v xorriso &> /dev/null; then
|
|
echo -e "${RED}[ERROR] Missing xorriso after install attempt.${NC}"
|
|
echo "Please install: xorriso (required for DVD ISO extraction)"
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo "════════════════════════════════════════════════════════════════"
|
|
echo "Dependency Installation Complete!"
|
|
echo "════════════════════════════════════════════════════════════════"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo ""
|
|
echo "1. Build VideoTools:"
|
|
echo " ./scripts/build.sh"
|
|
echo ""
|
|
echo "2. Run VideoTools:"
|
|
echo " ./scripts/run.sh"
|
|
echo ""
|
|
echo "For more information, see BUILD_AND_RUN.md and DVD_USER_GUIDE.md"
|
|
echo ""
|