Video Creator

Media Segments
Global Settings
Loading...
Processing video... please wait.

Introduction

Create compelling videos by combining your images and video clips on a defined timeline. This tool automatically applies smooth zoom effects to images and handles looping videos with optional smooth crossfades between repetitions. Simply upload your media, set the timing, provide background audio and subtitles, and generate your final MP4 video.

How It Works

  1. Add Media Segments: Use the "+ Add Media Segment" button to create rows for each image or video clip. Upload the file and set its start and end time in seconds within the final video's timeline.
  2. Avoid Overlaps: Ensure the end time of one segment is less than or equal to the start time of the next. Gaps between segments will automatically be filled with black.
  3. Configure Settings: Set the total desired duration for the final video. Upload your background audio track and an SRT subtitle file. Provide a unique filename (without extension) for the output video. Adjust the loop crossfade duration if needed.
  4. Processing: Click "Create Video". The server validates inputs. Images get a zoom effect. Videos shorter than their allocated time are looped (with crossfades if specified > 0).
  5. Combination: Processed segments and black gaps are joined sequentially.
  6. Final Touches: Audio and subtitles are added. The video is trimmed/padded to the exact duration.
  7. Result: A message appears at the top. On success, it includes a download link for the final MP4. Source files are deleted automatically. On failure, error details are shown.

API Usage

Automate video creation by sending a POST request with a JSON payload to this URL: /ffmpeg/index.php

Request Details

JSON Body Structure Example

{
  "duration": 30.5, "loop_xfade": 0.8, "output_name": "api_video",
  "media_segments": [ { "original_name": "intro.png", "start_time": 0, "end_time": 5, "base64_data": "iVB..." }, { "original_name": "clip1.mp4", "start_time": 5, "end_time": 15.2, "base64_data": "AAA..." } ],
  "audio_file_info": { "original_name": "bg.mp3", "base64_data": "SUQz..." },
  "srt_file_info": { "original_name": "subs.srt", "base64_data": "MSA..." }
}

Provide complete base64 strings for all base64_data fields.

Success Response (200 OK)

{ "status": "success", "message": "Video successfully created!", "download_url": "...", "output_filename": "...", "details": "..." }

Error Response (4xx/5xx)

{ "status": "error", "message": "Input validation errors.", "errors": [ "Segment 2(...): Invalid time.", "..." ], "details": null }

Base64 for large files can be inefficient and hit server limits.

Example curl Command

Save JSON to request.json, then:

curl -X POST -H "Content-Type: application/json" -d @request.json http://experimentaldata.co.uk/ffmpeg/index.php

FAQ

Overlaps? No. End time <= next start time.

Gaps? Filled with black.

Loop X-Fade? Fade duration between video loops (0 = hard cut).

Files Kept? No. Source files deleted post-processing. Final MP4 is kept.

Filename Exists? Error. Choose a new name or delete existing file.

Slow? Yes. Video processing is CPU-intensive.

Disclaimer

Use this tool responsibly and at your own risk. Ensure you have the rights to all uploaded media. Operators are not liable for generated content. Source files are deleted; the final video output is stored on the server.