Skip to content

stephenmthomas/moonsplice

Repository files navigation

Moonsplice

Test Coverage

Movie Slicer & Joiner
Free • Open Source • MIT Licensed

screenshot

Features

Video Splicing

  • Frame-accurate editing - Step through video frame-by-frame for precise cuts
  • Visual timeline with range selection and playback scrubbing
  • Thumbnail previews for each segment
  • Drag-and-drop video loading
  • Multiple segments - Create unlimited video segments from a single source
  • Reorderable segments - Move segments up/down to arrange final output
  • Variable playback speed - 0.25× to 2.0× speed control
  • Keyboard shortcuts - Efficient editing workflow

Video Joining

  • Multi-file concatenation - Join multiple videos into one
  • Per-file trimming - Trim each video individually before joining
  • Three transition modes:
    • None - Instant cuts (lossless, fastest)
    • Fade to Black - Smooth fade transitions between clips
    • Crossfade - Blend clips together for seamless transitions
  • Customizable transition duration - Adjust fade/crossfade timing (100-5000ms)
  • Visual previews - See thumbnails of each video segment
  • Drag-and-drop support - Add multiple files at once

Professional Output

  • Built on FFmpeg for industry-standard video processing
  • Lossless output option for instant cuts (no re-encoding)
  • High-quality re-encoding with H.264 for transitions
  • Maintains original video quality and audio

Installation

Requirements

Quick Start

  1. Download the latest release from Releases
  2. Extract the ZIP file
  3. Run Moonsplice.exe
  4. Drag and drop a video file to begin editing

User Guide

screenshot

Splicing Videos

1. Load a Video

  • Drag and drop a video file onto the window, OR
  • Click the placeholder area and browse for a file

2. Set Segment Range

  • Use the timeline slider to preview your video
  • The left thumb (green) sets the start point
  • The right thumb (green) sets the end point
  • The yellow marker shows current playback position
  • Drag any thumb to preview that position in the video

3. Frame-Perfect Editing

  • Use Left/Right arrow keys to step through frame-by-frame
  • Use , and . to jump back/forward 5 seconds
  • Use K and L to jump back/forward 15 seconds
  • Adjust playback speed with the speed controls (0.25× - 2.0×)

4. Add Segments

  • Click Add Segment (or press Enter) to save the current range
  • Segments appear in the left panel with thumbnail previews
  • Add as many segments as needed

5. Manage Segments

  • Play - Preview a specific segment
  • Move Up/Down - Reorder segments for final output
  • Delete - Remove unwanted segments

6. Export

  • Click Export to render your final video
  • Choose output location and filename
  • Select transition mode in Settings (None/Fade to Black/Crossfade)

Joining Videos

1. Switch to Join Tab

  • Click Join in the top navigation bar

2. Add Videos

  • Drag and drop multiple video files onto the window, OR
  • Click Add Files to browse

3. Trim Individual Videos (Optional)

  • Each video has its own range slider
  • Drag the handles to trim start/end of each clip
  • Trim range shows in real-time

4. Reorder Clips

  • Use Move Up/Down buttons to arrange video order
  • Final output will play videos in the order shown

5. Export

  • Click Join & Export
  • Choose transition mode in Settings:
    • None - Instant cuts (lossless, fast)
    • Fade to Black - Configurable fade transitions
    • Crossfade - Smooth blending between clips

Keyboard Shortcuts

Action Default Key Customizable
Set Segment Start [
Set Segment End ]
Jump Back 5s ,
Jump Forward 5s .
Jump Back 15s K
Jump Forward 15s L
Add Segment Enter
Play/Pause Space
Frame Back ❌ (Fixed)
Frame Forward ❌ (Fixed)
Volume Up ❌ (Fixed)
Volume Down ❌ (Fixed)

To customize shortcuts:

  1. Go to Settings tab
  2. Click the key field you want to change
  3. Press your desired key
  4. Settings auto-save

Settings

General

  • Always on Top - Keep Moonsplice window above other applications

Segment Transitions

Choose how segments are joined together:

  • None - Direct cuts with no transition (lossless, instant)
  • Fade to Black - Brief fade to black between segments
  • Crossfade - Smooth blend between segments

Note: Transitions require re-encoding and take longer to export

Transition Duration

  • Customize fade/crossfade duration in milliseconds (100-15000ms)
  • Default: 1000ms (1 second)
  • Shorter durations = quicker transitions
  • Longer durations = smoother, more gradual transitions

FFmpeg Configuration

  • FFmpeg Path - Location of ffmpeg.exe (default: included in app folder)
  • Browse to use a custom FFmpeg installation if needed

Tips & Best Practices

For Best Performance

  • Use None transition mode for quick exports (no re-encoding)
  • Close other applications when exporting large videos
  • Ensure sufficient disk space (exports can be large)

For Highest Quality

  • Use original, high-quality source videos
  • Avoid re-encoding multiple times (quality degrades)
  • Use Crossfade sparingly (computationally expensive)

Frame-Accurate Editing

  • Use arrow keys to step through frames for precise cuts
  • The yellow playback marker is independent of the range thumbs
  • Drag range thumbs to preview start/end positions
  • Press Play to start from the yellow marker position

Organizing Large Projects

  • Name your output files clearly (e.g., ProjectName_v1.mp4)
  • Keep source videos in one folder
  • Export intermediate versions before making major changes

Troubleshooting

"FFmpeg not found" Error

Solution:

  1. Go to Settings tab
  2. Click Browse next to FFmpeg Path
  3. Navigate to ffmpeg.exe location
  4. Select the file and click OK

Video Won't Load

Possible causes:

  • Unsupported format (try MP4, AVI, MKV, MOV)
  • Corrupted video file
  • Missing codecs

Solution: Convert video to MP4 using a tool like HandBrake first

Export Takes Too Long

Causes:

  • Using Fade to Black or Crossfade transitions (requires re-encoding)
  • Very large or high-resolution videos

Solutions:

  • Use None transition mode for instant exports
  • Export smaller sections separately
  • Reduce transition duration in Settings
  • Upgrade to faster hardware (SSD, more RAM)

Thumbnails Not Generating

Solution:

  • Ensure FFmpeg is properly configured
  • Check that source video is not corrupted
  • Restart Moonsplice

Transitions Happen Immediately (No Fade Effect)

Solution: This was a bug in early versions. Ensure you're using the latest release where transitions start near the end of clips, not at the beginning.

Timeline Thumbs Don't Update Video Preview

Solution: This is expected behavior:

  • Dragging range thumbs (green) previews that position without moving the playback marker
  • Dragging the yellow marker or using skip buttons moves the actual playback position
  • Press Play to start playback from the yellow marker

Technical Details

Supported Formats

Input: MP4, AVI, MKV, MOV, WMV, FLV, WebM
Output: MP4 (H.264 video, AAC audio)

Video Processing

  • Lossless Mode (None transition): Direct stream copy, no quality loss
  • Re-encoded Mode (Fade/Crossfade): H.264 codec, CRF 18 (high quality)
  • Audio: AAC 192kbps

System Requirements

  • OS: Windows 10/11 (64-bit)
  • RAM: 4GB minimum, 8GB recommended
  • Storage: 500MB for app + space for video files
  • CPU: Multi-core processor recommended for faster exports

Building from Source

Prerequisites

  • Visual Studio 2022 or later
  • .NET 8.0 SDK
  • FFmpeg binaries (ffmpeg.exe and ffprobe.exe)

Dependencies

  • TopazWPF - Custom UI framework (referenced as local project)
  • .NET 8.0 Windows Desktop Runtime

Build Steps

git clone https://github.com/stephenmthomas/moonsplice.git
cd moonsplice
# Place TopazWPF project in ../../TopazWPF/TopazWPF/ or adjust .csproj reference
dotnet restore
dotnet build -c Release

Project Structure

Moonsplice/
├── MainWindow.xaml          # Main UI layout
├── MainWindow.xaml.cs       # UI logic and event handlers
├── FFmpegWrapper.cs         # FFmpeg integration
├── VideoSegment.cs          # Segment data model
├── AppSettings.cs           # Settings persistence
├── App.xaml                 # Application resources
└── Moonsplice.csproj        # Project configuration

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Areas for Contribution

  • Additional transition effects
  • Video format support improvements
  • UI/UX enhancements
  • Performance optimizations
  • Bug fixes

Guidelines

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.


Acknowledgments

  • FFmpeg - Video processing engine (ffmpeg.org)
  • TopazWPF - Custom WPF UI framework
  • BandiCut - If they didn't force you to pay to remove a splash screen, this app would not exist.

Support


Changelog

Version 1.0.0 (Initial Release)

  • Video splicing with frame-accurate editing
  • Multi-file video joining
  • Three transition modes (None, Fade to Black, Crossfade)
  • Customizable transition duration (100-5000ms)
  • Customizable keyboard shortcuts
  • Per-file trimming in Join mode
  • Thumbnail generation from video frames
  • Variable playback speed control (0.25× - 2.0×)
  • Independent timeline controls (range thumbs + playback marker)
  • Dark theme UI with modern design
  • Settings persistence across sessions

Made with 🩸💧😭 for video editors everywhere

screenshot

About

MP4 video slicer and joiner. Inspired by Bandicut , but free, and without the annoying splash screen inclusions. Wraps ffmpeg in a UI and provides familiar operation to the aforementioned.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages