To stream an ordered playlist of local files from a spare Windows PC, use FFmpeg’s concat demuxer to read a file list and send the resulting output to the YouTube Live stream URL and key shown in YouTube Studio. Whether that list can be joined cleanly, and which FFmpeg command is appropriate, depends on the actual streams in your files; starting FFmpeg is not proof that YouTube is receiving a healthy broadcast.
The practical sequence is to inspect the files, build and test the concat list, choose settings for the media and connection, then start the encoder and check YouTube’s preview and stream health before going live. The steps below help you distinguish a compatible, stream-copy workflow from a playlist that needs conversion or a different preparation method.
Inspect the playlist files and their streams
Decide the exact order before you begin. A playlist for a bhajan channel, for example, might start with an opening track, continue through several recordings, then finish with a closing segment. FFmpeg’s concat demuxer reads a text list of files in order; it does not read a YouTube playlist URL, and the resulting input is not a YouTube playlist in the viewer-facing sense.
Put the files in a folder with simple, stable names. Keep the actual filenames and extensions accurate, and avoid changing them while FFmpeg is running. For a Windows example, you might store the media in C:\LivePlaylist\ and the list file beside it. Files on an external drive can work as inputs, but the drive must remain connected and accessible for the entire broadcast. A sleep, disconnect or drive-letter change can interrupt reading.
Inspect each file rather than inferring its properties from its extension. FFmpeg’s ffprobe utility can report stream types, codecs, dimensions, frame rates, sample rates, channel layouts and durations. A file labelled .mp4 does not, on its own, tell you whether the video or audio streams match the next file. If you do not have ffprobe, use a trusted media inspector or an FFmpeg build that includes it; first confirm that the utility can open every file.
Write down the information that matters across the list: whether each file has video, audio or both; its codecs; video dimensions and frame rate; audio sample rate and channel layout; and the reported duration. Also watch and listen to at least the beginning and end of each item. Metadata can be incomplete or wrong, and a clip may have silence, a black frame or an abrupt cut that is technically valid but not what you intend to broadcast.
If a video is meant to carry sound throughout, check that its audio track exists and plays. If the playlist mixes silent visuals with music files, that is a different composition problem from simply joining matching audiovisual files. Decide how the audio and pictures should align before encoding, rather than expecting the concat demuxer to invent that arrangement.
Create a concat-demuxer file list
Create a plain-text file, for example playlist.txt, containing one file directive per input, in the order you want. A minimal example for the folder above is:
file 'C:/LivePlaylist/opening.mp4'
file 'C:/LivePlaylist/song-01.mp4'
file 'C:/LivePlaylist/song-02.mp4'
Forward slashes in these paths avoid some of the backslash-escaping confusion in FFmpeg’s list syntax. You can use relative paths if the list file is in the same folder and you run FFmpeg from that folder, but an absolute path makes it easier to see which files the list names. If a filename contains a quote or unusual characters, check the concat demuxer’s escaping rules rather than assuming the example covers it.
Save the list as plain text, not a document with formatting added by a word processor. Check for an accidentally added .txt extension twice, blank or misspelled paths, and any files that were moved after the list was written. In Windows File Explorer, extensions may be hidden, so check the full filename before using it. Test the list locally before sending anything to YouTube: FFmpeg should be able to open each listed file and proceed through them in sequence.
The official FFmpeg formats documentation for the concat demuxer describes the list format and its requirements. Read the current documentation if your paths need special escaping or if you are considering options beyond this basic list. Do not add directives from an example written for a different media set without understanding what they change.
A useful pre-flight check is to compare the list against the folder: every intended file appears once, in the intended order, and nothing unwanted is included. A forgotten test clip can end up on the live channel just as easily as a missing main track can leave a gap.
Check whether the files are compatible
The concat demuxer joins files as a sequence only when their streams are compatible. The FFmpeg documentation says they must have the same streams, including matching codecs and time bases. That means you should not assume that two files are safe to concatenate just because they both have an .mp4 extension, share a resolution or play in the same media player.
Compare the stream layout as well as the stream values. One file with video and stereo audio followed by a file with video only is not the same layout. Two video streams can differ in codec, pixel format, frame rate, time base or dimensions; audio can differ in codec, sample rate or channel layout. The exact compatibility question is about the media streams FFmpeg is asked to join, not whether the source files look similar to a person watching them.
When files match, stream-copying may avoid re-encoding and use less CPU, but it is not a universal shortcut. A stream-copy command can preserve the input streams, so those streams still need to be acceptable to YouTube and consistent across the list. If the media do not match or the output needs standardisation, re-encoding can convert each item to a common format, but it uses processing capacity and can cause dropped frames or encoding delay on a modest PC.
| Approach | When it may fit | Main trade-off |
|---|---|---|
| Stream-copy compatible inputs | All files have matching stream layouts and the existing codecs and parameters suit the intended output | Lower processing demand, but it does not reconcile mismatched streams or convert unsuitable output |
| Re-encode to a common output | Inputs differ, or you need a deliberate output format for YouTube | More control over output, at the cost of CPU or hardware-encoder capacity and a need to choose suitable settings |
| Prepare a uniform set of files first | You can convert and test the playlist before the broadcast | Adds a preparation step, but makes the live input easier to reason about |
Incompatible inputs may fail, produce errors at a join, or lead to sound or picture problems. Re-encoding can be part of a solution, but it does not remove the need to inspect the media and choose an appropriate command. A reliable workflow is to test the full sequence, including transitions, and correct any incompatible files before relying on it for an event.
Duration metadata deserves attention. FFmpeg uses timestamps when joining streams, and inaccurate durations can shift timestamps; differing stream lengths can also result in gaps. If you see a pause, jump or audio break at a join, compare the reported and actual durations and test the affected files separately. Do not assume that a process completing means every transition was clean.
For more context on symptoms that can emerge while sending video files to YouTube, see why OBS can skip frames when streaming video files. It is a different encoder, but the broader lesson is useful: inspect the output and machine load rather than treating the selected file as the whole diagnosis.
Prepare the YouTube Live stream and key
In YouTube Studio, open the Live Control Room and create or schedule the stream. Copy the current server URL and stream key from that stream’s settings. The exact screen wording may change, so follow the current YouTube instructions for creating a live stream with an encoder rather than relying on an old screenshot or a URL copied from someone else’s setup.
Treat the stream key as a credential. YouTube describes stream keys as like a password and address for a stream. Do not include it in a public script, shared screenshot, tutorial, or repository. If it may have been exposed, reset it in Live Control Room and update the encoder with the replacement. Keep the URL and key separate from notes or files that might be shared.
Use the server and key for the intended stream, and verify that the selected ingest protocol matches the server address shown in YouTube Studio. YouTube’s current encoder guidance recommends RTMPS; do not swap the protocol or edit the server address by guesswork. If you change a protocol or connection setting, check the relevant YouTube instructions and test the new configuration before an important broadcast.
A scheduled stream is helpful when viewers need a page to find in advance, but scheduling does not itself start a healthy broadcast. You still need to send an encoder signal and wait for YouTube to receive it. If you are testing, make sure the stream’s visibility and notification choices suit the test; do not assume a test is private merely because you have not announced it.
Choose FFmpeg settings for the actual media
There is no single FFmpeg command that fits every playlist. The right input options, codecs, output size, frame rate, bitrate, audio settings and connection target depend on the files, the installed FFmpeg build, the PC’s encoding capacity, the upload connection and the current YouTube ingest settings. A command copied from a different computer may start successfully while producing poor quality or failing at a file boundary.
Start by deciding whether the input streams can be copied or need to be encoded. Then decide what output your PC and upload can sustain. For example, a modest spare PC playing a simple 1080p recording is not automatically a good candidate for high-frame-rate software encoding, particularly if the same machine is also doing other work. Choose a conservative output that suits the source and the connection, then test it; do not select a larger resolution because it sounds more professional.
YouTube’s live encoder settings guidance lists supported video codec choices including H.264, H.265/HEVC and AV1, recommends constant bitrate encoding, and recommends a two-second keyframe frequency not exceeding four seconds. It also gives audio codec options including stereo AAC or MP3. These are platform recommendations, not a measurement of your computer or connection; check the current page for the full requirements and settings before configuring an encoder.
Use the upload connection as a practical constraint. If the outgoing stream is too demanding for the connection, viewers may see buffering or YouTube may report poor stream health. Reduce the output demand if testing shows instability, and avoid saturating the connection with unrelated uploads during the broadcast. A speed test can inform your decision, but it cannot guarantee that the connection will remain consistent overnight.
On Windows, run FFmpeg from a Command Prompt or PowerShell window that can find the executable and the playlist file. Keep the command’s quoting appropriate for the shell, especially where paths contain spaces. Before assembling a live command, confirm the installed FFmpeg build’s available options and the input playlist behaviour with a local test. A syntax example can demonstrate a pattern, but without your files’ properties it cannot be presented honestly as a ready-to-run command.
Consider the workload on the spare PC as well as the media. Disable sleep for the duration of the test, keep the machine ventilated, and avoid updates or scheduled restarts that could interrupt the encoder. Check the power and network connections. A computer that works for a short local playback test may still encounter a separate issue during a long session, so arrange a way to observe it and the YouTube stream after launch.
If encoding causes the PC to struggle, reducing output complexity or preparing uniform files ahead of time may help. Hardware encoding can be useful when available, but it is not automatically better for every source or driver. The point is to validate the particular machine and output rather than treating a spare PC as a known-capacity encoder. For a different continuous-playback approach, compare the MediaMTX playlist workflow, while still checking its requirements against your own files and operating arrangement.
Test playback and confirm the YouTube preview
Run a representative test before the real broadcast. Include sections with typical movement and sound, and cross at least one file boundary. Watch the local output or a test recording for black frames, frozen video, clipped audio, silence and abrupt transitions. Listen on headphones as well as checking meters if available; an audio stream can be present in metadata but still be silent or distorted.
Start FFmpeg and inspect its console output. Look for errors opening files, timestamp warnings, encoder failures, reconnect messages or repeated output stalls. Console output is diagnostic evidence, not a substitute for viewing the stream. A command prompt can remain open and report that FFmpeg is running even when YouTube has not accepted the stream or the viewers’ output has a problem.
Open the intended stream in Live Control Room and wait for the preview. Check that the picture appears, audio is present, the stream health status is acceptable, and the expected title and scheduled stream are selected. YouTube advises starting the encoder ahead of the event and checking the preview and stream health. Only proceed to Go live when the preview is the expected programme and the stream is behaving as intended.
If no preview appears, first confirm that FFmpeg is actually sending output, then re-check the server URL and key against the current stream settings. If the key could have been exposed or copied incorrectly, replace it in YouTube Studio and update the encoder. If the preview appears but quality is poor, investigate the PC load, output settings, upload connection and input files rather than repeatedly restarting without changing anything.
Test with the same kind of content you intend to publish. A still image with a short audio sample will not reveal issues caused by full-motion footage or a changing mix. A devotional channel should check both a quiet passage and a louder one; a local news loop should check any spoken segments and transitions between clips. Use the test to find an issue while you can still fix it.
During a longer run, periodically confirm that the preview and stream health remain sound, and that the source files are still accessible. A successful first preview does not rule out a later disk, power, network or process problem. For unattended monitoring concepts, see how to monitor a 24/7 YouTube stream running remotely; the monitoring details there concern a remote setup, but the need to check the actual stream applies to a Windows PC too.
Decide whether and how the list should repeat
A concat file lists a finite sequence. It does not make the sequence repeat automatically. Decide whether you need one pass for a scheduled event, a longer finite run, or continuous playback. A single pass is easier to test: you know where it ends, and you can verify the closing file. A repeat requires an explicit looping strategy and testing to confirm what happens at the end-to-start boundary.
Do not assume that adding a loop option anywhere in a command will repeat the whole playlist in the way you expect. FFmpeg options apply to particular inputs or outputs, and their effect depends on the chosen demuxer, command structure and installed build. Validate the repeat behaviour locally, including whether timestamps remain usable and whether the end-to-start transition causes a pause or discontinuity, before connecting it to a public stream.
If you need a continuous channel, plan for more than the nominal list. Check that the computer stays awake, the files remain available, the encoder does not exit at the end of the sequence, and someone can notice if YouTube stops receiving it. YouTube says streams under 12 hours are automatically archived; do not rely on that statement for longer broadcasts, and check current YouTube guidance for the intended duration and archive behaviour.
For a tested looping pattern and its trade-offs, see how to make FFmpeg loop a video without interrupting a YouTube live stream. A single video and a multi-file concat list are not interchangeable inputs, so adapt a documented approach only after confirming how it handles your playlist and timestamps.
When the stream is scheduled, end it cleanly in Live Control Room and stop the encoder output as YouTube instructs. If you are testing, use a test stream or suitable visibility settings and confirm what will be visible to viewers before you begin. A clean end and a verified archive are separate checks from the fact that the encoder process has stopped.
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 join MP4 files with FFmpeg’s concat demuxer?
Possibly, but the extension alone does not establish compatibility. Compare the files’ stream layout, codecs and time bases, then test the joined output; files with mismatched streams may need conversion or another workflow.
Does FFmpeg repeat the playlist automatically?
No. A concat list describes files in sequence, and the sequence needs an explicit looping strategy if it should repeat. Test that strategy and the join back to the first item before using it for a long-running stream.
Why is FFmpeg running but YouTube has no preview?
A running process is not proof that the correct stream is reaching YouTube. Confirm that FFmpeg is sending output, then verify the current server URL and key in Live Control Room and check that the encoder configuration matches the selected stream.
Can I leave the Windows PC on overnight?
You can use a spare PC for a long run, but it still depends on stable power, network access, available source files and a machine that does not sleep or restart. Test the full arrangement, monitor YouTube’s preview and stream health, and do not treat a successful short test as a guarantee of an uninterrupted night.