Skip to content
streamneo.
Streaming Settings12 min read

How to Create an FFmpeg Playlist for a 24/7 Preschool Story Stream on YouTube

Build and test an FFmpeg playlist for YouTube Live, with notes on compatible files, encoding, child audience settings and archiving.

sn.
StreamNeoPublished 4 October 2026
Worth sharing?

FFmpeg can queue compatible story files, encode them as one outgoing feed and send that feed to YouTube Live. YouTube Live receives the feed; it does not build or sequence your playlist for you.

The important condition is that the concat demuxer expects the files’ streams, codecs and time bases to match. If yours do not, prepare compatible copies or use the concat filter and re-encode, then test the result with your installed FFmpeg build before relying on it for a long broadcast.

Keep sequencing separate from delivery

Think of this as two jobs. First, FFmpeg reads the videos in the order you specify and produces a continuous sequence. Second, FFmpeg encodes or packages that sequence for live delivery to YouTube’s ingestion point. The playlist is not the same thing as a YouTube broadcast, and a valid list file alone does not make a stream live.

For a preschool story channel, the list might contain an opening story, a short transition, another story and a quiet closing scene. FFmpeg can place those inputs in sequence; the outgoing encoding settings determine the characteristics of the feed, such as resolution, frame rate and audio format. YouTube Live Control Room supplies the server URL and stream key used to receive that feed.

A playlist also does not make a process self-recovering. If the computer, connection or FFmpeg process stops, the broadcast can be interrupted. If you are deciding whether to run from a local machine or another arrangement, the practical trade-offs are covered in ways to start a 24/7 stream from prerecorded videos in India. Choose a delivery setup based on who will monitor it and how you will recover when something fails.

Check the story files before listing them

Start with an inventory. Put the source files in the intended playback order, give them unambiguous names, and check each file’s video and audio streams, codecs, time bases, dimensions, frame rate and duration. Local inspection tools such as FFprobe can show these properties, but the exact invocation depends on the tool version and your system.

Do not assume that two files with the same extension have matching media characteristics. One story could be 1920×1080 H.264 with stereo audio, while another could have a different frame rate, no audio stream or a different codec. A still-image title card converted into a video may also have different timing and stream properties. The concat demuxer has matching-stream requirements, so differences deserve attention before you assemble the playlist.

Listen to the complete audio path as well as checking metadata. A missing track, a silent section at the start, a sudden change in loudness or an abrupt cut can be more noticeable in a children’s story loop than a small difference in image detail. Check that each file starts and ends as intended, including any pauses, narration and fade-outs. If clips are being reused or rearranged, confirm the order against a written running sheet.

Duration deserves particular care. The concat demuxer uses file timing to place later material after earlier material. If a reported duration is inaccurate, or the streams’ actual lengths do not align as expected, the sequence can show timestamp problems, artifacts or gaps. The FFmpeg concat demuxer documentation describes the list-file approach and its constraints; consult documentation corresponding to your installed release as well.

If the properties differ, make a preparation pass that normalises the files to compatible streams and timing, or use FFmpeg’s concat filter with re-encoding. The filter is the more appropriate route when you need to reconcile different inputs. It involves processing the media rather than simply joining compatible packets, so it takes more encoding time and requires output settings you can test. The FFmpeg FAQ explains the distinction. Do not mistake the concat protocol, which joins certain file formats, for the concat demuxer.

Write a concat demuxer list

The concat demuxer reads a text file containing paths and directives, then emits the listed files in order. Create a plain-text list with an ffconcat version 1.0 header and one file entry per input, in the order you want them played. The paths must be readable by the FFmpeg process. If a name contains spaces or punctuation, follow the quoting and escaping rules in the documentation rather than assuming that ordinary shell quoting rules apply inside the list file.

For example, the shape of a list file can be:

ffconcat version 1.0
file 'opening-story.mp4'
file 'forest-story.mp4'
file 'closing-story.mp4'

This is only a structural illustration. Those filenames are placeholders, not a tested playlist, and the list is useful only if the actual inputs meet the demuxer’s requirements and the installed build supports the features you plan to use. Keep the list and media in a stable location, and test with the same paths and permissions that will be used for the real broadcast.

Be cautious with paths that come from someone else or from an untrusted archive. FFmpeg’s concat list format has safety behaviour for file paths; do not disable it or broaden access merely to make a list parse. Put the files in a location that the process can safely access, and check the documentation before changing options related to unsafe paths.

First ask FFmpeg to read the list and play the complete sequence once. Watch and listen across every join, especially where narration ends in one file and begins in the next. A short test catches basic path and decoding errors, but it does not demonstrate that an all-day broadcast will stay connected or that a later repeat will be clean.

Match streams, codecs and time bases

For demuxer concatenation, matching means more than “both files play in VLC” or “both are MP4”. The relevant streams need compatible parameters, including codec and time base. Check whether each input has the same intended video and audio streams, and compare the properties that affect decoding and timestamps. If a story has an audio stream and the next does not, for instance, the sequence may not behave as a simple continuous pair of matching streams.

Normalisation is a preparation decision, not a magic flag to attach to any list. You may need to produce consistent video dimensions, frame rate, pixel format, audio layout, sample rate and codec. The appropriate choices depend on the source material and the output you need; there is no universal preschool-story preset. Keep a clean copy of originals, prepare standardised versions, and inspect the results before using those versions in a playlist.

If the files cannot be made compatible for demuxer concatenation, use a concat-filter workflow that decodes and re-encodes the inputs. That gives you a route to reconcile differences, but it also means you need enough processing capacity for the chosen output and need to check for quality changes. The FFmpeg FAQ’s joining guidance is a useful starting point, not a substitute for testing your exact files.

Treat any command found online as conditional. FFmpeg builds, input arrangements and options vary, and a command that worked with one set of files may not work with another. Verify the options against the help and documentation for your installed build. If the joined output is important, test a representative sequence from beginning to end before attaching it to a live broadcast.

Choose a repeat strategy and test it

A playlist intended for 24/7 use needs a way to begin again after its last entry. The right loop strategy depends on how your files are supplied, the FFmpeg build, and whether you are using demuxer concatenation or a filter-based workflow. Check that the approach you choose repeats the whole intended sequence rather than a single input or a partial segment.

Do not add indefinite looping until one full pass has been checked. Once it loops, inspect the join between the final story and the opening story. A file that ends with a long fade or silence can make that boundary feel like a dead stream; a story that ends mid-sentence can sound broken even if FFmpeg has moved to the next file correctly. You may want a deliberate closing and opening transition in the sequence.

Looping media and keeping a live process healthy are separate concerns. A repeat option does not reconnect a dropped network, restart a failed application or tell you that YouTube is receiving a healthy feed. If you use a locally hosted encoder, decide how you will see warnings and recover a stopped process; do not treat a loop flag as a continuity plan. For network-specific considerations, see keeping an FFmpeg YouTube stream running on JioFiber.

The playlist approach is useful when you need precise order and can maintain compatible assets. If preparing files, testing the build and monitoring a local process are burdensome, a cloud-based workflow may remove the need to leave your own computer running: StreamNeo takes an uploaded video and YouTube stream key to run the broadcast without installing software on your machine. That addresses the computer-running burden, not content rights, YouTube audience settings or the need to check what the platform receives.

Encode a feed YouTube Live can receive

In YouTube Studio’s Live Control Room, create or schedule the broadcast and retrieve its server URL and stream key. Configure your encoder to send to the supplied destination, and keep the key private; anyone with access to it may be able to send a feed to your channel. The YouTube live streaming setup guide walks through creating a stream and connecting an encoder.

The output settings must suit the ingestion profile and the upload connection. For RTMP or RTMPS, YouTube’s encoder guidance includes H.264, constant bitrate (CBR), a two-second keyframe interval, and AAC or MP3 audio. Its recommended bitrate varies with resolution and frame rate. For a concrete comparison, YouTube lists H.264 at 720p/30 fps with a recommended 4 Mbps and minimum 3 Mbps, and H.264 at 1080p/30 fps with a recommended 10 Mbps and minimum 5 Mbps, in its guidance checked on 3 October 2026. These are ingestion recommendations, not a guarantee that your connection can sustain them or that every source benefits from the higher setting.

For a mostly illustrated story channel, 720p at 30 fps may be a sensible test profile if it reflects your source and available upload capacity. A 1080p source may justify testing 1080p/30 instead. Avoid choosing a bitrate from resolution alone: include frame rate, audio and the stability of your actual upstream connection in the decision. YouTube recommends a speed test and a representative test with sound and movement. Read the current YouTube encoder settings guidance before configuring the output, as recommendations can change.

Keep the responsibilities clear: FFmpeg creates and sends the encoded feed; YouTube Live receives it and reports stream health. Start with a private or otherwise appropriate test, check both the stream preview and the Live Control Room status, and watch for warnings about bitrate, keyframes or audio. Include story passages with normal narration, transitions and movement, not just a static opening frame. If you see pixelation, investigate the source and upload path before changing several settings at once; this guide to fixing pixelation on YouTube Live covers common checks.

Set the audience and protect the programme

Because this channel is for preschool stories, audience designation needs deliberate attention. YouTube requires creators to set whether a video or live stream is Made for Kids. Make the choice accurately for the content and your circumstances in Live Control Room; do not rely on automated classification to decide for you. YouTube’s Made for Kids guidance explains the platform setting. This is not a legal conclusion about every story or jurisdiction.

The setting affects what viewers and the creator can do. YouTube lists live chat and related features as unavailable on Made for Kids live streams, and personalized ads are disabled, although contextual ads may still appear. Plan the programme and viewer communication without promising chat, Super Chat, personalized advertising or notification-driven growth. Check YouTube’s current features restricted on Made for Kids content because available features and platform guidance can change.

Check that you have the rights needed for the stories, illustrations, music and recordings you stream. A public-domain story does not automatically make a particular modern narration, arrangement or illustration free to use. Keep records of permissions and licences, and check the terms that apply to each asset. YouTube’s audience setting is separate from content rights; neither an FFmpeg playlist nor a live encoder checks clearance for you.

Plan for recovery and recording

A successful test only shows that this particular configuration worked under test conditions. It does not establish that a computer, power supply, network or FFmpeg process will keep operating indefinitely. If the stream matters overnight, decide who or what will notice a disconnect, how the encoder will be restarted, and how you will confirm that YouTube is receiving the feed again. Test the recovery process rather than assuming it will work.

Also separate being live from preserving the programme. YouTube says it can automatically archive a live stream shorter than 12 hours, and warns that streams exceeding 12 hours may not be captured. For a nominal 24/7 broadcast, plan an independent recording or archive if keeping the full programme matters. The YouTube archive live streams guidance describes the current limitation and recommends a local recording as backup.

A local archive needs its own storage and a check that recording is actually active. Work out storage from the bitrate, recording format and retention period you need rather than guessing at drive capacity. A live feed can be healthy while a local recording fails, and an archive can exist even if the public stream drops; treat them as separate checks in your operating routine.

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 concatenate any two story videos with FFmpeg?

No. The concat demuxer requires compatible streams, codecs and time bases, and incorrect durations can lead to timing artifacts or gaps. Inspect the files and test a full pass; normalise the inputs or use the concat filter and re-encode if they do not match.

Does the playlist create a YouTube Live broadcast?

No. The playlist determines which media FFmpeg reads; YouTube Live receives the outgoing encoded feed at the server URL using the stream key from Live Control Room. Configure and test both parts, and keep the stream key private.

Will looping the playlist keep the stream running all day?

Looping can repeat the media, but it does not guarantee an uninterrupted broadcast or recover a failed connection or process. Plan monitoring and recovery for the machine and network you actually use, and test that the final-to-first transition is clean.

Will YouTube preserve the whole 24/7 stream automatically?

Do not assume so. YouTube says it can automatically archive streams shorter than 12 hours and that streams longer than 12 hours may not be captured. If retaining the complete programme matters, plan and verify a separate recording.

YOU’VE REACHED THE END

Keep the ideas coming.

More guides, useful tools and a little help for your next broadcast.

Back to the journal ↗
YOUR NEXT READ

A little more to explore.

More Streaming Settings guides ↗ · All topics ↗