Loop a Short Video to 1 Hour in Your Browser
Turn a short clip into a 1 hour video by looping: the 20x per-pass limit, the 500 MB cap, how to chain passes, and when ffmpeg is the better route.
Yes, but in passes, and not past one hour
You can loop a short clip up to one hour in your browser with the PixelTools video looper, but not in a single click. One pass offers at most 20 total plays (the picker runs 2, 3, 4, 5, 6, 8, 10, 12, 15 and 20), and every pass is capped at a projected 500 MB or one hour of output, whichever comes first. A 6-second clip therefore tops out at 2 minutes per pass. The fix is to feed the finished MP4 back into the tool and loop it again. Each pass multiplies the length, so chained passes multiply the length. Nothing is uploaded, and the file never leaves your tab. Anything beyond one hour, such as the 10-hour loops people ask about, needs a desktop tool, covered at the end.
Work out how many plays you need first
Divide your target length in seconds by the clip's length in seconds. One hour is 3,600 seconds, so a 6-second clip needs 600 plays and a 10-second clip needs 360. The picker counts total plays, not extra repeats: choosing 3x gives three plays end to end. That differs from ffmpeg's own -stream_loop flag, which counts extra passes, so a 3 there would give four plays. Next to each option the page shows the projected length and size of the result, so you can check your arithmetic against the tool before committing. Pick a combination of passes whose play counts multiply to at least your number, and keep the final one comfortably under the one-hour ceiling instead of landing on exactly 3,600 seconds.
Why one pass stops at 20 plays
The play list is deliberately short. The picker offers 2, 3, 4, 5, 6, 8, 10, 12, 15 and 20, because the difference between 21 and 22 plays is not a choice anyone makes, and 1 is absent because it would just copy the file. Separate from that list, the page blocks any option whose projected output goes over 500 MB or over one hour, and greys it out with the reason. The ceiling exists because the whole file is assembled inside your browser. At the peak of a run, the finished file exists three times in memory (in ffmpeg's virtual filesystem, in the array handed back, and inside the download Blob), on top of your source file. So a 500 MB output means roughly 1.5 GB live at once.
Chain passes: loop the loop
The output is an ordinary MP4, so you can drop it straight back into the looper. Worked example for a 6-second clip weighing 0.8 MB: pass one at 20x gives 2 minutes and about 16 MB. Pass two at 12x turns that into 24 minutes and about 192 MB. Pass three at 2x ends at 48 minutes and about 384 MB. The total is 20 x 12 x 2 = 480 plays, 48 minutes, and every pass stays under both ceilings. Passes of 20x, 15x and 2x would give 600 plays, exactly 3,600 seconds. That sits right on the one-hour edge, so 480 is the safer stop. Each pass means saving the file and dragging it back in, so use the fewest passes that reach your number.
Check bitrate, because size can block you before time does
For a stream copy, output size is source size times plays, and 500 MB is the cap. To fit a full hour, the clip needs to run at roughly 1.1 Mbps or less (500 MB x 8 / 3,600 seconds, about 1.17 Mbps). Work out your clip's bitrate as megabytes x 8 / seconds. A 6-second, 5 MB clip is about 6.7 Mbps, so it can reach at most 100 plays under the size cap, which is 10 minutes. If you need a longer loop from a heavy clip, shrink it first with the video compressor, then loop. The projection is arithmetic, not a guess. On a 3-second, 46,556-byte test clip, 3 plays came out at 136,884 bytes, slightly under the estimate because the container header is written once.
Extra passes do not cost quality
Looping an MP4 copies the already-encoded packets instead of re-encoding them, so every pass is lossless and takes seconds, not minutes. You can chain as many passes as you like without the picture softening. The exception is a source whose codecs an MP4 cannot hold as is, with VP8 or VP9 out of a WebM being the usual one. For those, the first pass falls back to re-encoding at CRF 23 with H.264 video and 192 kbps AAC audio, and the result is an MP4 that later passes can copy through untouched. Seams are only as clean as your clip: if the last frame does not flow into the first, you will see the cut at every repeat, so trim to a whole cycle with the video trimmer first.
When you need more than one hour
Past one hour, use desktop ffmpeg, which has no browser memory limit. The command ffmpeg -stream_loop -1 -i clip.mp4 -t 36000 -c copy loop-10h.mp4 writes 10 hours (36,000 seconds) without re-encoding. The -stream_loop flag must sit before -i, and -t is what stops it, because -1 loops forever. Mind the disk: a 10-hour file at 1 Mbps is already about 4.5 GB. If the video is only going on a web page you control, an HTML loop attribute on the video element is lighter than baking any loop into a file. Reserve a baked loop for players that have no repeat setting, such as signage or a slide that plays media once, and keep it to the hour the browser can handle.
Frequently asked questions
Try it on PixelTools — free, no upload needed