Create looping videos that repeat multiple times. Perfect for Instagram Stories, TikTok, background videos, and cinemagraphs. Set loop count (3x, 5x, 10x, 20x) with seamless joins.
Create seamlessly looping videos from any clip. Set the loop count or duration, and the Video Loop Creator repeats your video the specified number of times. Perfect for background visuals, social media content that needs a minimum length, or ambient video displays.
Initializing in your browser…
Trim and cut videos precisely with frame-by-frame scrubbing. Set start/end points visually, preview clips in real-time, and export trimmed videos instantly. No upload required - runs 100% in browser.
Convert videos between MP4, WebM, OGG, MOV, AVI, and MKV formats. Device presets for YouTube, Instagram, TikTok, iPhone, Android. Quality options from fast to high quality encoding.
Merge multiple video clips into one seamless video. Drag-and-drop reordering, preview before export, timeline visualization. Combine videos in any format with automatic re-encoding.
You want a 10-second background ambience clip to loop seamlessly on a landing page.
Input
ambience.mp4 · loop ×3 · crossfade ends 0.5 s
Output
A 30 s clip whose end blends into its start with no visible jump
A short crossfade between the tail and head hides the seam, which is what makes a background video feel continuous rather than visibly restarting. Pre-baking the loop avoids relying on player loop behaviour.
Create seamlessly looping videos from any clip. Set the loop count or duration, and the Video Loop Creator repeats your video the specified number of times. Perfect for background visuals, social media content that needs a minimum length, or ambient video displays.
Create long-running looping videos for digital signage, event backgrounds, or ambient room displays.
Loop a short clip to meet platform minimum length requirements for monetization or posting.
Video Loop Creator repeats a single clip end-to-end a fixed number of times using FFmpeg compiled to WebAssembly (ffmpeg-core 0.12.6), running entirely in your browser with no upload. Internally it writes a concat-demuxer playlist (a concat.txt file that simply lists the same input N times) and runs ffmpeg with `-f concat -safe 0 -i concat.txt -c copy`. The `-c copy` flag means the audio and video streams are copied verbatim rather than re-encoded, so the looped output is bit-for-bit identical in quality to the source and processing is fast - there is no transcoding pass. The output keeps the source file's container and extension (the MIME type is derived from it), and the download is named `{original}_loop_{N}x.{ext}`.
Because nothing is re-encoded, the output file size grows linearly with the loop count: the Est. Size readout is literally inputSize x loopCount, and total duration is clipDuration x loopCount. The component enforces the browser's hard 2GB ceiling on a single Blob/ArrayBuffer by computing maxLoops = min(100, floor((2GB - 1 byte) / fileSize)). The custom slider runs from 2x to that computed maximum and auto-clamps: loading a large file silently reduces the loop count and shows a 'reduced due to 2GB browser limit' warning, while loopVideo itself throws an explicit error (with the exact maximum) if an output would still exceed 2GB. A soft warning also appears once the estimate passes 1.5GB ('may take a while and use significant memory').
One honest caveat: this tool concatenates the clip; it does not crossfade, reverse, or frame-match the boundary. The loop is visually seamless only if the source's last frame already flows into its first - a clip that was designed as a loop or a cinemagraph. Otherwise viewers see a small jump at each splice point. The presets reflect intended uses rather than any special processing: Quick Presets map to fixed counts (Instagram Story 3x, TikTok/Reels 5x, Background Video 20x, Cinemagraph 10x), the LOOP_PRESETS row offers 2x/3x/5x/10x/20x/50x, and a duration-based recommendation suggests 15x for sub-3-second clips down to 2x for clips over 30 seconds. The in-page preview auto-loops by seeking to currentTime 0 on the 'ended' event, so it only previews the join behavior - it does not affect the rendered file.
You can set any loop count, but very high counts on long videos will produce very large files. Monitor the estimated output size before exporting.
Video is decoded and re-encoded on your own device. Large files never leave your machine.