OpenCut-app / OpenCut-app/OpenCut

[FEATURE] Implement Video Export Functionality

Open
#167 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
TypeScript
Stars
89.8k
Forks
8.9k
PR merge metrics
No merged PRs in 30d

Description

Problem

Currently, OpenCut has a placeholder export button in the editor header that only logs "Export project" to the console. This is a critical missing feature that prevents users from actually outputting their edited videos. The TODO comment in apps/web/src/components/editor-header.tsx indicates this functionality needs to be implemented.
Without export functionality, users can edit videos but cannot save or share their work, which severely limits the editor's usefulness as a CapCut alternative.

Solution

I propose implementing a comprehensive video export system with the following features:

Core Export Functionality
  • Multi-format support: MP4, WebM, MOV (starting with MP4 as primary)
  • Quality presets: 1080p, 720p, 480p with custom resolution options
  • Codec options: H.264 for MP4, VP9 for WebM
  • Audio export: AAC encoding for audio tracks
Technical Implementation Plan
1. Export Dialog Component
  • Create apps/web/src/components/editor/export-dialog.tsx
  • Format selection dropdown (MP4, WebM, MOV)
  • Quality/resolution presets
  • Advanced settings (bitrate, frame rate, codec options)
  • Export progress bar with cancel functionality
2. Export Processing Logic
  • Create apps/web/src/lib/export-utils.ts
  • Extend existing ffmpeg-utils.ts for video rendering
  • Timeline data processing to generate export commands
  • Progress tracking and error handling
  • Background processing with Web Workers
3. State Management
  • Add export state to existing stores
  • Track export progress, current file being processed
  • Handle export queue for multiple exports
  • Error state management
4. Integration Points
  • Replace TODO in handleExport function in editor-header.tsx
  • Integrate with existing timeline and media stores
  • Use current project resolution settings from recent PR #33
Export Workflow
  1. User clicks Export button → Opens export dialog
  2. User selects format, quality, and settings
  3. System validates timeline data and media files
  4. FFmpeg processes video/audio tracks in background
  5. Progress updates shown to user
  6. Completed file downloaded or saved to user's device
Alternative
  1. Server-side export: Would require backend processing, but OpenCut focuses on client-side privacy
  2. Canvas-based export: Less efficient than FFmpeg, limited format support
  3. Third-party export services: Goes against privacy-first philosophy

The proposed FFmpeg-based client-side solution aligns with OpenCut's privacy-focused approach while providing professional-grade export capabilities.

Anything else?
  • Export button exists in UI but has no functionality
  • FFmpeg utilities already present in codebase (lib/ffmpeg-utils.ts)
  • Media processing infrastructure available (lib/media-processing.ts)
  • Timeline data structure supports multi-track export
  • Recent PR #33 added resolution detection that can inform export settings

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the TODO in apps/web/src/components/editor-header.tsx, then read lib/ffmpeg-utils.ts, lib/media-processing.ts, the existing timeline and media stores, and the resolution work from PR #33. Define the export dialog, processing, state, and integration scope before implementation. Done means the editor can validate project data, process and track an export, handle errors or cancellation, and download the completed video.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
frontend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.