For a simple, free playlist that repeats to YouTube Live, FFmpeg’s concat demuxer can read an ordered text file of media and pass its contents to an encoder. It is a useful starting point, but it does not make a broadcast unattended or guarantee that mixed files will play cleanly.
If you need editable playlists, filler clips or service-oriented playout, compare that minimal workflow with ffplayout. Either way, you remain responsible for compatible files, YouTube settings, stream-key security, monitoring and recovery; the technical advice is the same in India as elsewhere, while your local power and upload connection need testing.
Choose between a script and a playout tool
The right choice depends on what you mean by “playlist”. If you have a known sequence of compatible videos and are comfortable with a shell command, a concat list and FFmpeg may be enough. You can review the list as plain text, change its order, and run the same command again. The simplicity is also the limit: FFmpeg does not turn that list into a scheduling application or provide a complete operations plan.
A fuller playout workflow becomes useful when you need to update a schedule regularly, insert filler content, or manage a service that starts with the host. ffplayout is a free/open-source project whose repository describes features including infinite playlist looping, editable playlists, filler clips, RTMP output and Linux system-service operation. Those are project-described features, not a promise that a particular installation will stay live.
| Choice | A good fit when | What you still need to manage |
|---|---|---|
| FFmpeg and a concat list | You want a small, transparent sequence and can work with command-line files | File compatibility, list edits, escaping paths, logs, process restarts and monitoring |
| ffplayout | You want playlist management, fillers or service-oriented playout | Installation, project requirements, host resources, stream settings and operational checks |
| Local computer | You already have suitable hardware, stable internet and dependable power | Keeping the machine awake, network available and process healthy |
| Linux host or VPS | You want a remote machine intended to remain available | Recurring hosting cost, provider and region choices, network behaviour, updates and access security |
“Free software” does not mean that every part of a 24/7 operation has no cost. A local computer consumes power and depends on your connection and premises; a hosted machine may introduce a recurring charge. Consider skill and maintenance as well as money: a smaller command can be easier to understand, while a richer playout tool may reduce manual playlist work but brings more to configure. For a comparison of the streaming choices behind a different kind of continuous channel, see this study music setup guide.
Prepare media and write an ordered list
The concat demuxer reads a sequence of files; it does not automatically convert every item into one uniform format. FFmpeg’s documentation says the files must have matching streams, including compatible codecs and time bases. Different dimensions, frame rates, audio layouts or stream lengths can create failures, pauses or awkward transitions. A playlist that looks correct in a text editor can still contain media that does not join cleanly.
Start by collecting the files you are entitled to broadcast and decide their order. Inspect their video and audio properties, then normalise or re-encode material that does not match the rest of the set. If one devotional video is 25 fps with stereo audio and another is 30 fps with a different audio setup, do not assume the concat input will reconcile them. Test the actual transition between files, especially where a live loop will revisit the end of the list and begin again.
The exact media preparation depends on the source and the quality you intend to send. Keep an untouched copy of original files, and work from a separate prepared set so an encoding change is reversible. Check that durations and audio endings are sensible. The concat demuxer shifts timestamps based on file duration; if streams inside a file have different lengths, gaps or artifacts may appear. FFmpeg’s own documentation explains these mechanics and path escaping in its concat demuxer documentation.
A basic list uses one file directive for each item, in playback order:
file '/path/to/first-video.mp4'
file '/path/to/second-video.mp4'
file '/path/to/third-video.mp4'
Save it as a text file, for example playlist.txt. Use full paths while learning the workflow, and be careful with spaces, apostrophes and other special characters: they need correct quoting or escaping for the concat file syntax. Test the list with a short local playback before connecting it to YouTube. If you are building a language-specific channel, the same preparation principle applies to subtitles and labels; this guide to subtitles in prerecorded streams covers that separate part of the setup.
Loop the concat input with FFmpeg
A minimal command-line workflow has three pieces: tell FFmpeg to use the concat demuxer, point it at the list, and specify how the video and audio should be encoded for the destination. A conceptual starting point is:
ffmpeg -re -f concat -safe 0 -i playlist.txt \
-c:v libx264 -preset veryfast -b:v 3M -maxrate 3M -bufsize 6M \
-pix_fmt yuv420p -r 30 -g 60 \
-c:a aac -b:a 128k -f flv "$YOUTUBE_RTMP_URL"
This is an example structure, not a tested universal command or a recommendation for every source. In particular, the example’s output settings must be checked against your chosen resolution, frame rate, content and YouTube’s current guidance. The concat list is the input; the command is responsible for encoding and packaging that input for a streaming destination. -safe 0 allows paths outside the concat demuxer’s restricted safe-name form, so use it only with a list you control and understand.
To repeat the sequence, the concat input can be looped with its demuxer option, for example by adding -stream_loop -1 before the input. The precise placement matters because FFmpeg options apply to the relevant input or output; read the current documentation and confirm behaviour on the version you have installed. Do a private or unlisted test and watch the hand-off from the final file back to the first. Do not assume that a loop flag repairs incompatible streams, incorrect durations or a broken network connection.
A shell script can store the command and make it easier to run consistently, but a script is not a scheduler, alerting system or recovery design by itself. Keep a copy of the exact command and playlist version used for a test. If you update the list, test the new order rather than treating a text edit as proof of successful playout. If the issue is audio gradually moving out of sync, investigate the media and timestamps instead of adding restart logic; this audio sync troubleshooting guide addresses that distinct problem.
Configure YouTube ingest and protect the key
YouTube’s current live encoder guidance is the authority for ingest settings. It lists RTMP and RTMPS as supported protocols, H.264, H.265 or AV1 video, AAC or MP3 audio, constant bitrate (CBR), and a recommended two-second keyframe frequency with a four-second maximum. YouTube recommends RTMPS for encrypted transport. Check the YouTube live encoder settings before settling on a command because platform recommendations may change.
For H.264, YouTube’s table recommends 3 Mbps for 720p at 30 frames per second and 5 Mbps for 1080p at 30 frames per second. These are platform recommendations, not measurements of your connection and not a guarantee that the stream will be accepted or stable. Select a target that fits the source and current guidance, then leave enough upload headroom for the rest of your connection’s use. Do not infer a universal minimum for India: the relevant test is the sustained connection from the place and network you will actually use.
In Live Control Room, create or select the broadcast and copy the stream URL and stream key as instructed. The key should be treated as a password: do not paste it into a public repository, a screenshot, a shared chat or a script that other people can read. Environment variables or a permissions-restricted configuration file can keep it out of the command history and ordinary logs, but you still need to protect access to the account and the machine where it is stored. If a key is exposed, replace it through YouTube’s controls and update the local configuration.
Run a private or unlisted test and check what YouTube actually receives in Live Control Room. Confirm that video and audio are present, that the selected resolution and frame rate are as intended, and that the end-to-start transition is acceptable. YouTube’s guide to starting a live stream is a place to check current account and control-room steps. The test can reveal configuration mistakes, but it cannot prove that a machine, connection or power supply will remain available through the night.
When ffplayout is worth considering
A hand-maintained list is reasonable while the sequence changes rarely and you can inspect each change. If you need a web interface, fillers between scheduled items, or a process managed as a Linux service, ffplayout may fit better. The project repository describes playlist editing, infinite looping and RTMP output among its capabilities. Check the ffplayout project repository for the current feature set, installation instructions and release compatibility rather than relying on an old tutorial.
More features mean more configuration and another project’s requirements to keep in view. The repository states that its current development libraries require FFmpeg v7.0 or later and recommends four dedicated threads and 3 GB of RAM for 720p. Treat these as the project’s stated requirements, not as an independent benchmark or a guarantee that your host will perform well. Verify the requirements for the release you plan to install and compare them with the machine’s available resources.
Choose ffplayout because its features solve a real workflow problem, not because an application name makes the stream reliable. You will still need to prepare suitable media, configure the YouTube destination and key, keep the host and network available, and monitor for a failed stream. If you only need an ordered sequence, a concat list may be easier to audit. If you need scheduling and playlist controls, evaluate ffplayout against your actual programme and your ability to install and maintain it.
Make the process observable and plan recovery
A process that is still running is not necessarily delivering usable video to YouTube. At a minimum, check both the local encoder process and the received broadcast. Review logs for repeated errors, verify the Live Control Room preview or status, and establish a routine for checking the channel after changes. Decide who will notice a failure and how they will be contacted; a log file that nobody reads is not monitoring.
Recovery mechanisms can restart a process after it exits, but they do not fix the cause of a failure. A restart may help after an isolated crash; it will not repair a missing file, invalid stream key, incompatible input, saturated upload connection or power outage. Use bounded restart behaviour and useful logs so a repeated failure does not go unnoticed. Test recovery deliberately during a controlled test, and confirm that a restart reconnects to the intended broadcast rather than leaving an unexpected state in Live Control Room.
A public GitHub example describes one operator’s Ubuntu VPS deployment using systemd restarts and monitoring. That is an implementation example, not evidence of guaranteed uptime or a prescription for every channel. You can use a local computer if its power and network are dependable enough for your purpose; a remote host may avoid some local interruptions but adds hosting cost and dependence on the provider and route. Check availability and price directly with any provider before choosing it.
For an India-based channel, test the connection at the actual location and time conditions that matter to the channel. A single successful test does not establish that upload will remain steady overnight, and the research does not establish a special India-specific bitrate or command. Account status and current live-stream requirements also belong in the pre-flight check. For a detailed look at the separate problem of a process dropping, see why a 24/7 YouTube stream disconnects.
If your main concern is that your own computer must stay on to relay a prepared video, StreamNeo removes that particular operating task: you upload the video, provide your YouTube stream key, and the broadcast runs without your computer. You remain responsible for choosing appropriate content, preparing the channel and checking the result.
Decide what to test before committing
Treat the first run as a test of the whole chain, not just of the FFmpeg command. Confirm that each file opens, transitions are clean, the stream reaches YouTube with the intended audio and picture, and the playlist wraps as expected. Then leave a controlled test running long enough to observe the machine, connection and received stream under ordinary conditions. No short test can establish uninterrupted 24/7 performance.
Write down the recovery steps in plain language: where the playlist lives, how to check the logs, how to restart the process, how to verify the broadcast, and how to replace an exposed key. Keep credentials separate from public scripts. If someone else may need to respond while you are away, make sure they can access the operational notes without exposing the stream key unnecessarily.
Before committing, compare the operating options on the pricing page. When the file and channel are ready, start free — 24-hour trial, no card.
FAQ
Can I use FFmpeg for a free 24/7 YouTube playlist?
Yes. FFmpeg is free software, and its concat demuxer can feed an ordered set of files into an encoding workflow. The software does not remove costs for power, a computer or optional hosting, and it does not provide a complete monitoring and recovery plan by itself.
Does the same FFmpeg setup apply in India?
The platform’s encoder guidance is general; the research does not establish a separate India-only command or bitrate. Test sustained upload and power at the location where you will run the channel, and check YouTube’s current Live Control Room requirements.
Should I use ffplayout instead of a concat list?
Use a concat list when you need a simple sequence and can manage the command-line workflow. Consider ffplayout when editable playlists, fillers or service operation would solve a real need, and check its current documented requirements before installation.
Will looping the files keep the broadcast online if FFmpeg stops?
No. Looping repeats the input while the workflow is operating; it does not restart a stopped process or restore a failed connection. Process supervision, monitoring and a tested recovery procedure are separate responsibilities.