A stream that stops at the first video transition does not point to one confirmed FFmpeg fault. First identify what “playlist” means in your command: an FFmpeg concat list, an HLS manifest, or a YouTube playlist processed by yt-dlp are different workflows and need different evidence.
Then check whether FFmpeg exited, or is still running without producing video. The full command, playlist or manifest, and log lines around the transition are needed before anyone can identify a specific cause or offer a corrected command with confidence.
Clarify what “playlist” means
Start with the exact input your command gives to FFmpeg. If -i names a text file containing file entries, you may be using the concat demuxer. If it names a .m3u8, FFmpeg is reading an HLS manifest. If yt-dlp downloads or processes a YouTube playlist and sends media through a pipe to FFmpeg, the downloader and the encoder are separate moving parts. The word “playlist” alone does not tell you which one is involved.
These distinctions matter because each program advances differently. The concat demuxer reads a script and sequences local media files. yt-dlp handles playlist entries and may output data for a downstream process. HLS uses a manifest and media segments; it may be an input you consume or a format you publish. Applying a concat-list fix to an HLS manifest will not repair the manifest, and changing FFmpeg output flags will not make yt-dlp advance if the downloader has stopped.
YouTube’s official HLS live-ingestion guide describes the requirements for sending an HLS live stream to YouTube. Those publishing requirements are not an explanation for a local concat script stopping at its second entry. First decide whether FFmpeg is reading HLS or uploading it as part of a publishing workflow.
For a concat-demuxer script, a minimal list looks like this:
ffconcat version 1.0
file 'video-01.mp4'
file 'video-02.mp4'
The header shown here must be on the first line when relying on automatic detection. If you explicitly pass -f concat, make sure the input that follows is in fact the list file. Paths with spaces or special characters need correct quoting or escaping. Check that the second file is present in the script and that it is the same file the command is meant to play.
For practical background on an FFmpeg loop, see how to use FFmpeg to loop meditation videos for YouTube Live. A loop command and a playlist transition are not identical problems, but the article can help distinguish a deliberate repeat from a sequence that should advance to a different file.
Check whether FFmpeg exited or stopped producing video
A frozen picture, a quiet output, or a YouTube preview that no longer changes does not establish that FFmpeg has exited. Check the process itself and its latest output. Does the terminal show an exit code or a final error? Is FFmpeg still listed as running? Are timestamps, frame counts, or output bytes continuing to change? Record what you can observe and when it changes.
If FFmpeg exited, the final log lines and exit status may show a parse error, an input failure, or another stopping point. If it is still running, determine whether it is waiting for input, reading data without producing usable frames, or writing output that YouTube is not accepting. These are different branches of diagnosis. Do not treat a running process as proof that the broadcast is healthy, and do not treat a stalled preview as proof that FFmpeg closed.
In a yt-dlp pipeline, inspect both processes. A pipe can make the command look like one operation even though yt-dlp controls playlist advancement and FFmpeg consumes what arrives. If yt-dlp never reports the next entry, begin by investigating its playlist handling. If it reports the next entry but FFmpeg stops consuming or emitting, inspect the hand-off and FFmpeg input. The yt-dlp project documentation covers playlist processing and output options; its FAQ is another primary reference for using the downloader.
Avoid adding retry flags, changing codecs, or restarting the whole command before you have captured the point of failure. Those changes can hide the original evidence without addressing the process that actually stopped.
Capture the transition log lines
Save the complete command and the output from several seconds before the first transition through the point where the stream stalls or exits. Include any stderr messages, not just a cropped line that appears relevant. If the failure repeats, note whether the same input entry and message appear each time. Preserve timestamps as printed; do not paraphrase an error when asking for help.
For a concat list, the useful context often includes the file being opened, stream information, timestamp or duration messages, and any error naming the next file. For yt-dlp, capture its progress and the point at which the next playlist entry is selected or not selected. For HLS, capture which manifest or segment is being read or sent, and whether FFmpeg is consuming a live-updating playlist or a fixed one.
Keep credentials private. Redact stream keys, cookies, authorisation headers, and private URLs before sharing a command or log. Do not remove the options around -i, the output target, or the pipe itself: those parts establish which workflow is running. If a YouTube stream key appears in a command, replace its value with a marker such as [REDACTED] while leaving the option in place. A guide to securing a YouTube stream key on an OVHcloud VPS explains why that credential should not be posted publicly.
The transition log is evidence, not a diagnosis by itself. A warning about duration, a missing file, a broken pipe, and an encoder error imply different next checks. Read the surrounding lines and relate them to the command rather than assuming that any warning means playback must stop.
Inspect the command and input format
Share the whole command with private values redacted. Include the shell or operating system if it affects quoting, line continuation, or pipe behaviour. The command should make clear whether you have -f concat, an -i pointing to a manifest, a yt-dlp process, or a pipe between commands. Also record the FFmpeg version and how it was installed, since command syntax and available components can vary.
For concat, verify the intended list is passed as the input, the format is identified as intended, and each listed path resolves from the process’s working directory. Relative paths are interpreted in context; a command launched from another directory may fail to find a file that exists elsewhere. Check for accidental list entries, a missing second filename, malformed quotes, or a different input file than the one you edited.
The FFmpeg formats documentation describes the concat demuxer and its script format. It states that the files must have the same streams, including matching codecs and time bases. That is a compatibility requirement, not a promise that every valid-looking MP4 pair will transition cleanly with stream copy.
For yt-dlp, identify who is responsible for iterating through the playlist. A single-media output piped to FFmpeg is not automatically equivalent to a process configured to advance through multiple playlist entries. Establish whether yt-dlp has playlist handling enabled and what it sends to standard output before changing FFmpeg’s output options. Test the downloader separately where practical, then test the downstream FFmpeg command with a known input.
If the question is about the order of videos shown to viewers on YouTube rather than a media sequence sent into FFmpeg, that is a separate concern. How to create and use YouTube playlists for live streams covers the YouTube-side playlist concept; it does not make a YouTube playlist URL interchangeable with a concat script.
Test each playlist entry and boundary
Before investigating a long sequence, test the first and second entries individually with the same FFmpeg build. Confirm each can be opened and read, and inspect its streams with ffprobe or FFmpeg’s input logs. Compare stream count, codec, time base, dimensions, audio sample rate, channel layout, and any other properties present. The relevant comparison depends on the actual media; do not assume that matching filenames or containers mean matching streams.
Next test just the first two entries in a shortened concat list. This isolates the first boundary without changing the whole show. If both files play individually but the two-entry test fails at the join, the evidence points towards the transition path. If the second file fails on its own, investigate that file or its path first. If the short test works but the full list does not, check later entries, durations, and list syntax rather than concluding that the first transition is fixed.
The concat demuxer uses file durations to position later timestamps. If a duration is incorrect or unavailable, the resulting timing at a boundary can be wrong. When the actual duration is known, the script’s duration directive can override a stored value. Verify a duration from the file or a reliable probe; do not guess a value to silence a warning. Because timestamp adjustment is global, streams of different lengths may also leave gaps.
If you use yt-dlp, run a small test that demonstrates whether it advances from one selected entry to the next, and inspect what reaches the pipe at the transition. Avoid publishing or sharing copyrighted material without permission; for a technical test, use media you are entitled to use. If the downloader stops before sending the next item, changing concat options in FFmpeg is unlikely to address that point of failure.
Check stream compatibility and output behaviour
For concat demuxer stream copy, the source files need compatible stream layouts and parameters. FFmpeg’s manual puts the requirement plainly: “All files must have the same streams (same codecs, same time base, etc.).” Compare the actual first and second files, not just the settings you intended to export. A difference in video dimensions, time base, audio layout, or stream count can matter even when both files play normally by themselves.
Stream copy avoids decoding and re-encoding, which can save processing and preserve the encoded media as-is. Its trade-off is that it cannot normalise incompatible inputs. If the files differ, you may need to prepare them with common properties or use a filter-based workflow that decodes and processes the media before output. Re-encoding takes more computation and can alter quality, so it is not a cost-free universal fix.
The FFmpeg FAQ distinguishes the concat filter from the concat demuxer. The filter is a different approach, not a flag to append blindly to an existing command. Choose it when the inputs need processing and you can accept the encoding step; prefer the demuxer when its stream compatibility requirements are met and stream-copy behaviour is suitable.
Also inspect the output side. Confirm that FFmpeg is mapping the expected video and audio streams, writing the intended format, and continuing to produce timestamps or data after the join. A process can accept an input transition but fail later in encoding or output. Conversely, a YouTube preview can appear stalled while the local process is still producing output, so compare local logs and process behaviour with what YouTube displays.
For a live channel, a repeatable file preparation process is often easier to diagnose than changing several live options at once. If resolution and bitrate also need checking, use the guide to YouTube Live resolution versus bitrate as a separate output-planning reference. It will not identify a playlist transition fault, but it can help you avoid mixing output-quality changes into a boundary test.
Request the evidence needed for diagnosis
A useful report lets another person reproduce the workflow or at least identify which process stopped. Include the full command with secrets redacted, the playlist or manifest format, a few representative entries, the FFmpeg version, and the log lines around the transition. For local files, add stream information for the first and second entries. For yt-dlp, include its progress around the intended next video and explain how its output reaches FFmpeg.
State whether FFmpeg exited or remained running, whether the output file or stream continued changing, and what the viewer saw. Include the exact time or entry at which behaviour changed, if available. If the input is HLS, say whether FFmpeg is reading a source manifest or publishing HLS to YouTube. These details keep advice focused on the actual workflow.
Do not share a stream key, account cookie, private token, or unredacted authenticated URL. If a helper needs to reproduce the issue, create a safe test with non-sensitive media and replace credentials with placeholders. A public log should be detailed enough to identify options and sequence without exposing access to your channel.
Until those facts are available, the responsible answer is a diagnostic path rather than a claimed fix. There is no evidence in the supplied report details to establish a universal FFmpeg defect or one confirmed cause for every stream that stops at its first transition. If you run the channel from a local machine and the repeated manual restart is itself the problem, StreamNeo removes that specific burden by running an uploaded video as a YouTube live stream without requiring your computer to stay on; first confirm that a single-file broadcast suits the channel’s format.
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
Is this always an FFmpeg concat bug?
No. The title alone does not show whether the input is a concat script, HLS manifest, or yt-dlp pipeline, and it does not establish whether FFmpeg exited. Capture the command and transition logs before naming a cause.
Should I add -stream_loop -1?
Not as a general answer to a multi-entry playlist stopping at its first transition. A loop option changes repetition behaviour, but it does not establish that the second input is valid, compatible, or even being sent by the program that owns playlist advancement.
Can I use -c copy for every pair of videos?
No. Stream copy is appropriate only when the source streams are compatible for the intended concat workflow. Compare the streams first; where they differ, prepare compatible files or consider a filter-based approach and its decoding and re-encoding trade-offs.
What should I post when asking for help?
Post the full command with credentials redacted, identify the playlist type, and include the log lines immediately before and after the transition. Add whether FFmpeg exited, the version, and stream details for the first two files; for yt-dlp, include its playlist progress and how output is piped to FFmpeg.