OpenCut-app / OpenCut-app/OpenCut
[FEATURE] Implement Video Export Functionality
Nobody has claimed this yet.
- 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.tsfor 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
handleExportfunction ineditor-header.tsx - Integrate with existing timeline and media stores
- Use current project resolution settings from recent PR #33
Export Workflow
- User clicks Export button → Opens export dialog
- User selects format, quality, and settings
- System validates timeline data and media files
- FFmpeg processes video/audio tracks in background
- Progress updates shown to user
- Completed file downloaded or saved to user's device
Alternative
- Server-side export: Would require backend processing, but OpenCut focuses on client-side privacy
- Canvas-based export: Less efficient than FFmpeg, limited format support
- 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
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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