Skip to content

Repository files navigation

FFmpeg GUI

A modern desktop application for generic command execution with dynamic configuration, built with Electron and Vue.js 3.

Overview

FFmpeg GUI has evolved from a simple FFmpeg video converter to a generic command execution framework that supports any command-line tool through dynamic JSON configuration. The application provides a user-friendly interface for selecting files, configuring command options, and executing batch operations with concurrency control.

Key Features

  • 🏗️ Generic Command Framework: Support for any command-line tool via JSON configuration
  • 📁 File System Explorer: Browse and select files/directories with multi-selection support
  • ⚙️ Dynamic Command Configuration: Load commands and options from JSON configuration
  • 🔄 Batch Processing: Process multiple files with configurable concurrency (1-4 parallel jobs)
  • 🛡️ Duplicate Detection: Automatic detection and handling of duplicate files
  • 📊 Status Tracking: Real-time status updates for all processing jobs
  • 🔧 Cross-Platform: Works on Windows and Unix systems

Quick Start

Prerequisites

  • Node.js (v18 or higher)
  • npm or yarn
  • Command-line tools you want to use (e.g., FFmpeg for video conversion)

Installation

# Install dependencies
npm install

# Run in development mode
npm run dev

# Build for production (renderer process only)
npm run build

# Build Electron app (unpacked, no installer)
npm run build:electron

# Package the application (creates installers)
npm run dist

Usage

  1. Browse Files: Use the file explorer to navigate and select files/directories
  2. Select Command: Choose a command from the dropdown (loaded from configuration)
  3. Configure Options: Click "Configure Options" to set command parameters
  4. Set Output Directory: Select where processed files should be saved
  5. Start Processing: Click "Start Processing" to begin batch execution

Architecture

The application follows Electron's multi-process architecture:

  • Main Process (electron/main.ts): Handles file system operations and command execution
  • Renderer Process (src/): Vue.js 3 application with TypeScript and Composition API
  • Preload Script (electron/preload.ts): Secure API bridge between processes
  • State Management: Pinia stores for centralized state management
  • Dynamic Configuration: JSON-based command definitions in public/command-options.json

Key Components

  • FileExplorer.vue: File browser with navigation and multi-selection
  • ProcessQueue.vue: Processing queue display with status tracking
  • ConversionSettings.vue: Command selection and output configuration
  • CommandOptionsModal.vue: Command options editor with categorized tabs

Configuration

Commands are defined in public/command-options.json using a flexible schema:

{
  "commands": {
    "cp": {
      "name": "Copy Files",
      "description": "Copy files to destination directory",
      "categories": [
        {
          "name": "Basic",
          "options": [
            {
              "name": "preserve",
              "type": "boolean",
              "description": "Preserve file attributes",
              "default": true
            }
          ]
        }
      ]
    }
  }
}

Development

Project Structure

ffmpeg-gui/
├── electron/          # Electron main process
├── src/              # Vue.js 3 application
│   ├── components/   # Vue components
│   ├── services/     # Business logic
│   ├── stores/       # Pinia stores
│   └── types/        # TypeScript definitions
├── public/           # Static assets and configuration
└── docs/             # Documentation

Development Commands

# Development with hot reload
npm run dev

# Build web assets (production)
npm run build

# Build Electron app (unpacked)
npm run build:electron

# Package application for distribution
npm run dist

# Run built Electron app
npm run electron

# Clean build outputs
npm run clean

Documentation

For comprehensive technical documentation, see:

Contributing

  1. Follow TypeScript strict mode guidelines
  2. Use Vue 3 Composition API with <script setup> syntax
  3. Maintain type safety throughout
  4. Add new commands via JSON configuration
  5. Test cross-platform compatibility

License

This project is under active development.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages