1. Go to this page and download the library: Download b7s/fluentcut library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
// Single background music track (plays once, full volume)
->withAudio('bgm.mp3')
// Single track with custom volume
->withAudio('bgm.mp3', volume: 0.7)
// Loop audio until video ends (with fade in at start, fade out at end)
->withAudio('bgm.mp3', loop: true)
// Loop with custom fade duration
->withAudio('bgm.mp3', loop: true, fadeDuration: 0.5)
->withAudio('bgm.mp3', loop: true, fadeDuration: 1)
->withAudio('bgm.mp3', loop: true, fadeDuration: 2.25)
// Multiple audio tracks - each call adds a new track
->withAudio('intro.mp3', volume: 1.0) // Track 1: full volume from start
->withAudio('background.mp3', volume: 0.5) // Track 2: half volume from start
->withAudio('ending.mp3', volume: 0.8, startAt: 30.0) // Track 3: starts at 30s
// Multiple tracks with different start times and cut times
->withAudio('music.mp3', volume: 0.6, startAt: 0.0) // Plays from 0s until video ends
->withAudio('narration.mp3', volume: 1.0, startAt: 5.0, endAt: 35.0) // Plays from 5s to 35s
// Each track can have its own loop and fade settings
->withAudio('loop-music.mp3', loop: true, fadeDuration: 0.3) // Loop with quick fade
->withAudio('intro.mp3', loop: false, fadeDuration: 0.5) // No loop with default fade
// Cut audio at specific time with fade out
->withAudio('music.mp3', endAt: 30.0, fadeDuration: 0.5)
// Keep audio from source video clips
->keepSourceAudio()
// Adjust volume of the last added audio track
->audioVolume(0.5)
// Add audio specifically to the current clip (not global)
->addAudioToClip('narration.mp3')
use B7s\FluentCut\Enums\Transition;
// Generic transition method
->transition(Transition::Fade, 0.5)
->transition(Transition::WipeLeft, 0.3)
->transition(Transition::Dissolve, 1.0)
->transition(Transition::CircleOpen, 0.8)
->transition(Transition::Radial, 1.0)
// Shorthand presets
->fade(0.5) // Crossfade
->fadeThroughBlack(0.5) // Fade through black
->noTransition() // Hard cut
use B7s\FluentCut\Enums\VideoEffect;
// Single effect when adding a clip
->addImage('photo.jpg', duration: 3, effect: VideoEffect::SoftZoom)
->addVideo('clip.mp4', effect: VideoEffect::Grayscale)
->addColor('black', duration: 2, effect: VideoEffect::Vignette)
// Multiple effects via array
->addImage('photo.jpg', duration: 3, effect: [VideoEffect::SoftZoom, VideoEffect::Vignette])
->addImages(['a.jpg', 'b.jpg'], duration: 2, effect: [VideoEffect::Sepia, VideoEffect::Sharpen])
// Variadic effect() on the last clip (merges with existing effects)
->addImage('photo.jpg', duration: 3)
->effect(VideoEffect::Sepia, VideoEffect::Sharpen)
// No effect (default)
->addImage('photo.jpg', duration: 3)
use B7s\FluentCut\Enums\ResizeMode;
->resizeMode(ResizeMode::ContainBlur) // Fit + blurred background (default)
->resizeMode(ResizeMode::Contain) // Fit with letterboxing
->resizeMode(ResizeMode::Cover) // Crop to fill (aspect preserved)
->resizeMode(ResizeMode::Stretch) // Stretch to fill (aspect distorted)
// Output path
->saveTo('output/video.mp4') // Save to specific location
->output('output/video.mp4') // alias
// Codec selection
use B7s\FluentCut\Enums\Codec;
->codec(Codec::H264) // Most compatible (default)
->codec(Codec::H265) // Better compression
->codec(Codec::Vp9) // WebM format
// Resize output (independent of canvas)
->resize(1280, 720)
->forSlideshow() // Full HD, 30fps, fade transition, contain with blur
->forPresentation() // Full HD, 24fps, contain mode
->forSocialMedia() // Vertical (1080x1920), 30fps, cover mode
->forGif() // 480x270, 10fps, cover mode
->forWeb() // Full HD, 30fps, H.264, contain with blur