Skip to content

neetfrog/OpenEncoder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

41 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

OpenEncoder

Open-source Adobe Media Encoder replacement powered by FFmpeg.

A full-featured local video/audio transcoder with a modern dark UI. No subscriptions, no watermarks, no cloud dependency.

OpenEncoder screenshot


✨ Features

  • Batch encoding queue β€” drag & drop or browse for files
  • 16+ built-in presets β€” H.264, H.265, AV1, VP9, ProRes, GIF, MP3, AAC, FLAC, Opus, WAV
  • Per-job preset selection β€” assign different settings per file
  • Live progress tracking β€” real-time progress bars, FPS, and ETA per job
  • Media probing β€” FFprobe detects resolution, duration, codec, bitrate
  • Concurrent encoding β€” 1–4 parallel jobs (configurable)
  • Custom output folders β€” or output next to source
  • Frameless dark UI β€” custom title bar, keyboard-friendly
  • Persistent settings β€” output directory and concurrency saved across sessions
  • Error handling & recovery β€” clear error messages with retry capability

πŸš€ Getting Started

Installation

Download the latest release for your platform from GitHub Releases:

  • Windows:
    • OpenEncoder-setup-*.exe β€” Installer (recommended for most users)
    • OpenEncoder-*.exe β€” Portable executable (no installation required)
  • macOS: OpenEncoder-*.dmg β€” DMG installer (Universal binary: Intel + Apple Silicon)
  • Linux: OpenEncoder-*.AppImage β€” AppImage (self-contained, no dependencies)

Usage

  1. Add files: Drag & drop into the queue, or click "Add Files"
  2. Choose preset: Select an output format (per-file or batch)
  3. Set output: Choose where to save encoded files
  4. Start encoding: Click "Start" to begin
  5. Monitor progress: Watch real-time ETA and performance metrics

Settings

  • Output Directory: Default location for encoded files
  • Concurrent Jobs: Number of simultaneous encoding tasks (1-4)
  • Theme: Light or dark mode (persisted)

πŸ—οΈ Development

Prerequisites

  • Node.js 18+
  • npm or yarn

Setup & Build

# Install dependencies
npm install

# Run in development mode
npm run dev

# Build for distribution (all platforms)
npm run dist

# Platform-specific builds
npm run dist:win    # Windows installer
npm run dist:mac    # macOS DMG
npm run dist:linux  # Linux AppImage

Quality Assurance

npm run lint       # Check code quality
npm run format     # Auto-format code
npm run test       # Run tests
npm run test:cov   # Coverage report

Documentation


πŸ“‹ Architecture

Component Technology
Shell Electron 31
Build electron-vite + Vite 5
UI Framework React 18 + TypeScript
Styling Tailwind CSS 3
State Management Zustand
Encoding FFmpeg (via fluent-ffmpeg)
Binaries ffmpeg-static + ffprobe-static
Storage electron-store

Project Structure

src/
β”œβ”€β”€ main/               # Electron main process
β”‚   β”œβ”€β”€ index.ts        # App lifecycle, window management
β”‚   β”œβ”€β”€ ffmpeg-service.ts  # FFmpeg probe & encode engine
β”‚   β”œβ”€β”€ ipc-handlers.ts    # IPC channel handlers
β”‚   β”œβ”€β”€ ipc-security.ts    # Security validation & helpers
β”‚   β”œβ”€β”€ ipc-validation.ts  # Path & payload validation
β”‚   └── error-handler.ts   # Global error handling
β”œβ”€β”€ preload/
β”‚   └── index.ts        # Secure renderer ↔ main bridge
β”œβ”€β”€ shared/
β”‚   β”œβ”€β”€ types.ts        # Shared TypeScript types & IPC constants
β”‚   └── presets.ts      # Built-in encoding presets
└── renderer/src/
    β”œβ”€β”€ App.tsx
    β”œβ”€β”€ components/
    β”‚   β”œβ”€β”€ TitleBar.tsx
    β”‚   β”œβ”€β”€ Sidebar.tsx
    β”‚   β”œβ”€β”€ EncodeBar.tsx
    β”‚   β”œβ”€β”€ Queue/       # Queue panel, items, drop zone
    β”‚   β”œβ”€β”€ Presets/     # Preset browser
    β”‚   └── Settings/    # Settings panel
    β”œβ”€β”€ hooks/
    β”‚   └── useFFmpeg.ts # FFmpeg event listeners
    β”œβ”€β”€ store/
    β”‚   └── useEncoderStore.ts  # Global state (Zustand)
    └── utils.ts

πŸ”’ Security

  • Sandbox isolation β€” Renderer process runs in restricted sandbox
  • Context isolation β€” No direct access to Node.js APIs
  • Preload bridge β€” Typed IPC for all communication
  • Input validation β€” All file paths and payloads validated
  • No eval() β€” No dynamic code execution

See SECURITY.md for detailed security policies and roadmap.


πŸ“¦ Adding Custom Presets

Edit src/shared/presets.ts and add a new entry following the Preset interface from src/shared/types.ts:

{
  id: 'my-preset',
  name: 'My Preset',
  description: 'Custom encoding settings',
  category: 'video',
  container: 'mp4',
  videoCodec: 'libx265',
  crf: 28,
  preset: 'medium',
  format: 'h265'
}

The preset will automatically appear in the queue dropdown and Presets browser.


πŸ› Troubleshooting

"FFmpeg not found" error

  • Ensure you downloaded the official installer, not built from source
  • Try reinstalling the app

Encoding fails with specific file

  • Check file format compatibility with chosen preset
  • Verify sufficient disk space (output directory)
  • Check file permissions

UI is unresponsive during encoding

  • This is normal for high-bitrate or long files
  • Try reducing concurrent jobs in settings
  • Close other resource-intensive applications

macOS: "OpenEncoder is damaged" or notarization warning

  • Right-click the app β†’ "Open" β†’ "Open" (one-time bypass)
  • This is a known macOS security feature; normal for unsigned apps during beta

πŸ“„ License

MIT License β€” See LICENSE file for details.


🀝 Contributing

Contributions are welcome! Please read CONTRIBUTING.md for:

  • Code standards & testing requirements
  • Development setup
  • Release process
  • Pull request guidelines

πŸ’¬ Support & Feedback

  • GitHub Issues β€” Bug reports and feature requests
  • Discussions β€” General questions and feedback
  • Security Issues β€” Report privately (see SECURITY.md)

🎯 Roadmap

  • Auto-update mechanism with delta compression
  • Custom preset browser with sharing
  • Advanced filtering (curves, color grading)
  • Subtitle/caption embedding
  • Batch watermarking
  • Hardware acceleration (NVIDIA NVENC, AMD VCE, Intel QSV)
  • Queue persistence across restarts
  • Web interface for remote encoding

About

Open-source Adobe Media Encoder replacement powered by FFmpeg. A full-featured local video/audio transcoder with a modern dark UI. No subscriptions, no watermarks, no cloud dependency.

Resources

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors