In this article, let’s learn how to loop videos using FFmpeg. As a bonus, learn how to install FFmpeg on Ubuntu, Mac, Windows, and then loop videos – once, twice, or create an infinite loop 🙂
FFmpeg is by far the most critical video, image, and audio processing and manipulation tool in video and audio processing. This powerful, open-source software suite can do essential tasks the media industry needs – however complex or straightforward. One such task is looping videos, a seemingly simple yet necessary action that can be useful in various scenarios.
From creating repetitive GIFs to crafting extended video backgrounds for websites or setting up a test vector for video compression or streaming, knowing how to loop videos is essential in today’s digital landscape.
This tutorial shows you how to loop videos using FFmpeg – step-by-step!

Table of Contents
Step 0 – Install FFmpeg on your system
Before diving into creating GIFs from videos, having FFmpeg installed on your system is essential. Here’s a step-by-step guide to installing FFmpeg on different operating systems:
- Windows: Download the latest build of FFmpeg from the official website or use a package manager like Chocolatey or Scoop. Or, follow our FFMpeg installation guide on OTTVerse.
- macOS: Install FFmpeg via Homebrew or MacPorts package managers.
- Linux: Use your distribution’s package manager to install FFmpeg or compile it from source.
Once FFmpeg is installed, verify its installation by opening the command prompt or terminal and typing ffmpeg -version
to ensure the correct version is displayed.
Commandline to Loop Videos using FFmpeg
It is very straightforward to loop a video using FFmpeg, and here is the command line below –
ffmpeg -stream_loop <loop_count> -i input.mp4 -c copy output.mp4
Here is an explanation of the parameters –
-stream_loop
: This option specifies the number of times you want to loop the input video. To loop the video infinitely, use-1
as the loop count. If you want to loop the video a specific number of times (e.g., three times), use3
.<loop_count>
: Replace this with how many times you want to loop the video. If you want to loop the video indefinitely, use-1
.-i input.mp4
: This is the input file path. Replaceinput.mp4
with the path to the video file you want to loop.-c copy
: This option enables stream copy mode, meaning FFmpeg will not re-encode the video during looping. It simply copies the video and audio streams as they are, ensuring no loss of quality.output.mp4
: This is the output file path. Replaceoutput.mp4
with the desired name and format for the looped video file.
How do you use this?
If you want to loop a video once, set the -stream_loop
parameter to 1. Or, if you want to loop it five times, set the -stream_loop
parameter to 5.
If you set -stream_loop
to -1
, then it will loop infinitely!! Be careful, as it can rapidly become a HUGE file and fill up your storage disk!
Example
To test the command line to loop a video using FFmpeg, I have a video file that is 23.42 seconds long. You can find this out using ffprobe
as follows. If you want to learn more about ffprobe
, then check out our deep-dive on ffprobe and learn about what it can analyze.
(base) krishna@Krishnas-MacBook-Pro ffmpeg % ffprobe input.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2023-04-11T04:56:51.000000Z
Duration: 00:00:23.42, start: 0.000000, bitrate: 1459 kb/s
Stream #0:0[0x1](und): Audio: aac (LC) (mp4a / 0x6134706D), 32000 Hz, mono, fltp, 126 kb/s (default)
Metadata:
creation_time : 2023-04-11T04:56:51.000000Z
handler_name : AAC audio
vendor_id : [0][0][0][0]
Stream #0:1[0x2](und): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(progressive), 1280x720, 1331 kb/s, 25 fps, 25 tbr, 30k tbn (default)
Metadata:
creation_time : 2023-04-11T04:56:51.000000Z
handler_name : H.264/AVC video
vendor_id : [0][0][0][0]
encoder : AVC Coding
Now, I will loop it two times – so it will create a file three times as long as the original. Here is my command line –
ffmpeg -stream_loop 2 -i input.mp4 -c copy outputlooped.mp4
Now, let’s use ffprobe again to check the size of the output video –
(base) krishna@Krishnas-MacBook-Pro ffmpeg % ffprobe outputlooped.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'outputlooped.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf60.3.100
Duration: 00:01:10.22, start: 0.000000, bitrate: 1462 kb/s
Stream #0:0[0x1](und): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(progressive), 1280x720, 1331 kb/s, 25 fps, 25 tbr, 30k tbn (default)
Metadata:
handler_name : H.264/AVC video
vendor_id : [0][0][0][0]
encoder : AVC Coding
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 32000 Hz, mono, fltp, 126 kb/s (default)
Metadata:
handler_name : AAC audio
vendor_id : [0][0][0][0]
ffprobe shows that the output video is 1:10:22
mins long, the same as 3 x 23.42 seconds
. Success! We’ve tested and used FFmpeg to create a video loop 🙂
Common FFmpeg Looping Issues
I came across a few issues when looping videos. Here are some precautions from my trial-and-errors –
Maintaining Video Quality
Looping a video shouldn’t result in a loss of quality. However, if you notice a decrease in video quality after looping, ensure you use the -c
copy option in your command. This keeps the same codec for the output video, thus maintaining the video quality.
Infinite Loops Being Created
Double-check your loop parameter if the output video is not looped for the duration or the number of times you specified. Make sure you’re correctly using the -stream_loop
option.
Audio Synchronization
Audio can sometimes fall out of sync when looping videos. If this happens, you might need to separate the audio and video streams, loop them separately, and merge them. And I’ll repeat this – please always use the -c copy
option when looping videos to maintain the original video quality. Changing the video codec can result in a loss of quality.
Conclusion
Looping videos with FFmpeg might initially seem complex, but the process becomes straightforward with practice. If you want to learn more about FFmpeg, please check out these articles.
FFmpeg

Krishna Rao Vijayanagar
Krishna Rao Vijayanagar, Ph.D., is the Editor-in-Chief of OTTVerse, a news portal covering tech and business news in the OTT industry.
With extensive experience in video encoding, streaming, analytics, monetization, end-to-end streaming, and more, Krishna has held multiple leadership roles in R&D, Engineering, and Product at companies such as Harmonic Inc., MediaMelon, and Airtel Digital. Krishna has published numerous articles and research papers and speaks at industry events to share his insights and perspectives on the fundamentals and the future of OTT streaming.