Skip to content
streamneo.
Setup Guides13 min read

How to Stream a 24/7 YouTube Synthwave Radio Channel with FFmpeg

A practical FFmpeg workflow for looping synthwave programming on YouTube Live, with setup, testing, recovery, archive and rights guidance.

sn.
StreamNeoPublished 4 October 2026
Worth sharing?

To stream a 24/7 synthwave radio channel on YouTube with FFmpeg, prepare authorised video and audio, configure a loop or playlist as input, encode it to YouTube’s current ingest settings, and monitor the output. A looping command handles media playback; it does not by itself reconnect a failed network, restart an exited process, or guarantee an uninterrupted broadcast.

Treat the commands below as starting points, not universal recipes. FFmpeg options vary by build, and YouTube’s ingest settings can change, so check the installed build and current YouTube guidance, then rehearse the complete workflow before publishing.

Check channel eligibility and prepare the broadcast

First confirm that the channel can go live. YouTube’s live-streaming setup guidance says the channel must be verified and have no live-streaming restrictions within the preceding 90 days. First-time activation may take up to 24 hours, so do not leave activation until the day you intend to launch. Check the current requirements in YouTube Studio rather than assuming an older channel configuration is still eligible.

Create or schedule a stream in Live Control Room and choose the encoder workflow. YouTube provides a server URL and a stream key for the encoder to connect to. The URL is the destination; the key identifies the broadcast. Treat the key like a password: do not put it in a public script, screenshot, repository, or support message. If it is exposed, replace it in Studio before using the channel again.

Sketch the chain before you configure it: authorised video and audio files feed FFmpeg; FFmpeg loops or advances through them, encodes an output, then sends that output to YouTube’s ingest URL using the stream key. YouTube describes encoders as converting content to a digital format for delivery and has you enter the URL and key. This makes the roles clearer when diagnosing a failure: a file can stop while the connection remains alive, or the connection can fail while the playlist is still readable.

Decide whether the channel will use one long visual loop, a sequence of tracks with a visual bed, or a set of prepared programme blocks. The right choice depends on how much control you need over transitions and how much work you can put into testing them. If the programme includes distinct shows or changing visuals, a sequence of rendered blocks can be easier to inspect than a complicated live filter graph. For a different approach to rotating scheduled material, see how to alternate music and ambience overnight.

Prepare and verify authorised programming

Make a programme folder with files that you have permission to stream, plus a plain-text manifest recording the title, source, rights contact, and any relevant usage conditions. Include the visual material as well as the music: a permitted soundtrack does not grant permission to use a label logo, album artwork, film clip, or animated loop. Keep a clean copy of every source asset so you can rebuild a programme if a file is damaged or permission changes.

FFmpeg does not make an unplayable or inconsistent file safe to use. Check that each source decodes, that the picture and audio run for the expected duration, and that levels do not jump sharply between tracks. Inspect the beginning and end of each file, where a silent lead-in, clipped fade, or unexpected black frame can become noticeable when a short item repeats. A continuous visual bed can help make a music sequence coherent, but it does not guarantee seamless audio transitions.

For a simple channel, standardise a batch of files to the same frame size, frame rate, audio layout, and encoding before you build the live input. You can do that in advance with an editor or transcoder; the HandBrake preparation guide for a YouTube loop stream explains that preparatory step. Normalising inputs may reduce surprises, but it is not a substitute for testing the final playlist with the FFmpeg build you will actually run.

Use neutral file names and a stable directory layout. For example, keep programme files together in a folder and store the playlist text beside them, then avoid renaming or moving files after testing. If your chosen playlist format expects escaped paths or a particular separator, follow the format documented for your installed FFmpeg version. A filename that works in a shell command may need different quoting inside a playlist file.

Build a looping input workflow

There are several ways to loop prerecorded material. The simplest is a single file with FFmpeg’s input-loop option. A schematic starting point is:

ffmpeg -stream_loop -1 -re -i "radio-block.mp4" \
  -c:v libx264 -c:a aac output.mp4

This is not a YouTube publishing command: output.mp4 is a placeholder output, and the encoder choices are examples only. The loop option repeats the input; -re asks FFmpeg to read it at its native rate rather than racing through a file faster than real time. Test whether these options exist and behave as expected in your installed build. A looping file is useful when the content is already a complete visual-and-audio block. It is less suitable if you need every track to play once in a carefully ordered rotation.

For a playlist, create a list in the order you want items to run and use the concat demuxer or another documented input method available in your build. A basic concat list may look like this:

file 'opening.mp4'
file 'track-a.mp4'
file 'track-b.mp4'

You can then test a command that reads the list and repeats it, but do not assume the same looping syntax works for every input format. The concat demuxer has requirements about stream compatibility; mixed dimensions, frame rates, codecs, or audio layouts can produce errors or uneven transitions. One reliable production pattern is to prepare compatible programme blocks first, then test a short sequence and a full cycle before using it as a live source.

A playlist looping back to its beginning repeats the same order. That may be fine for a station with a fixed show block, but it can make repetition obvious. If you want scheduled changes, prepare separate lists or programme blocks and test how the transition is triggered. Avoid designing a complex automation scheme until a basic source can play for longer than its normal failure points, including a full programme cycle and a restart.

When you only need a small number of alternating files, concatenating their audio and video may simplify the input. The trade-off is that you have to handle differences in duration and format, and a poorly prepared sequence can drift or fail at a boundary. The guide to playing podcast episodes in order covers the same ordering problem in another prerecorded format. Whatever input design you choose, keep a copy of the tested command and note the FFmpeg version and input assumptions beside it.

Configure FFmpeg for YouTube Live

Once a local test output works, replace the placeholder destination with YouTube’s server URL and stream key. Keep the key out of the article, source code, and logs you share. Depending on the shell and FFmpeg build, you may use a URL containing the key or a separate option documented by the relevant output protocol. Check quoting and escaping carefully: special characters in a key can be interpreted by a shell if you paste them unquoted.

YouTube’s current encoder settings guidance lists RTMP and RTMPS ingest, H.264, H.265, and AV1 video support, CBR, AAC or MP3 audio, and frame rates up to 60 fps. Its guidance recommends a two-second keyframe interval and says it must not exceed four seconds. These are YouTube’s ingest requirements and recommendations, not a promise that every FFmpeg build exposes the same encoder controls or accepts identical option names.

For a familiar H.264 starting point, the official settings table recommends 14 Mbps for 1080p30 and lists 5 Mbps as the minimum for that combination. Those figures are YouTube Help’s ingest guidance reviewed in 2026, not a requirement that every synthwave visual needs that bitrate. A still background may not need the same data rate as fast animation, but going below the platform’s stated minimum can cause problems. Choose a quality and rate your actual upload connection can sustain, and check the stream health panel during testing.

YouTube transcodes the incoming feed into viewer formats, so you do not need to generate each viewer rendition yourself. Set one supported ingest output and let YouTube handle delivery variants. A schematic output section for an H.264 stream might include options for a constant target bitrate, a two-second keyframe interval, AAC audio, and an RTMP/RTMPS destination. Confirm the correct syntax for your version and encoder, then compare the resulting output with YouTube’s current table before using it live.

Do not treat bitrate as the only quality control. Confirm that audio is present, picture dimensions are right, frame rate is stable, and the chosen sample rate and channel layout are accepted by your output encoder. If a YouTube health warning appears, use the warning and the current settings page to diagnose it rather than adding flags at random. For a focused walkthrough of the ingest trade-off, use this 24/7 loop-stream bitrate guide.

Test the encoder output before publishing

Start with a local file output or a short unlisted test stream. A local output helps reveal whether the input, filters, and encoders work at all; an unlisted YouTube test checks the whole path through ingest. Keep the test long enough to cross a file boundary and, for a looping input, return to the beginning. Check the picture on a phone as well as a desktop, and listen with headphones for silence, distortion, clipped fades, or abrupt changes in loudness.

During an unlisted test, watch Live Control Room for stream health and confirm that YouTube receives the intended resolution, frame rate, and audio. A command can exit successfully while the stream still has a practical problem, such as a frozen picture or nearly silent audio. Conversely, a warning may point to a mismatch between your encoder settings and the current ingest requirements. Make one deliberate change at a time and repeat the test so you know what changed the result.

Keep a record of the working command with the FFmpeg version, operating system, input type, and relevant YouTube settings. Do not store the stream key in that record. Use a placeholder in the saved command and supply the credential separately at launch. If a future package update changes an encoder option, a concise record of what worked makes it easier to find the difference without relying on memory.

A rehearsal should include a deliberate interruption, not just a clean start. With a test stream, interrupt the network or stop and restart the local process, then observe what YouTube shows and how you bring the feed back. This does not prove that every future failure will recover, but it can reveal whether your setup needs a manual action, whether the stream state in Studio is confusing, or whether the input resumes at a useful point.

Monitor interruptions and recovery

A 24/7 broadcast has separate failure points: source files may finish unexpectedly, FFmpeg may exit, a host may restart, the network may drop, or YouTube ingest may stop accepting the connection. A loop addresses only the source-completion case. To operate continuously, decide who will notice each kind of failure, how they will check it, and what action they can take. Monitoring can include checking process status and logs, as well as watching YouTube’s stream health and live preview.

FFmpeg documents a FIFO muxer with options such as attempt_recovery, a configurable recovery wait, a maximum number of attempts, and recover_any_error. Its documentation explains that network output can be restarted after failure. These options may help with a transport interruption, but they are not a guarantee of uninterrupted playback or a replacement for supervising the whole process. The exact muxer syntax and compatibility depend on how FFmpeg was built and how the output is configured.

The same documentation describes drop_pkts_on_overflow, which can let streaming continue without delaying the input at the cost of omitting part of the stream. That is a trade-off, not a free recovery mechanism: viewers may hear or see a gap. Read the FFmpeg FIFO muxer documentation and test any recovery settings against your actual output path before relying on them.

If FFmpeg itself exits, a network recovery option cannot relaunch the process. A process supervisor or scheduled job can be part of a design, but its restart behaviour, logs, and interaction with YouTube must also be tested. Avoid an endless restart loop that hides a bad file or invalid key; collect useful logs and set a human check when repeated failure happens. After a restart, verify that the correct stream is live rather than assuming a new process means the audience sees the intended programme.

An always-on machine also needs practical attention: power, network, storage, software updates, and credential handling. If you prefer not to maintain an always-on local or cloud-hosted FFmpeg process, YouTube’s encoder page lists Gyre as a managed path for prerecorded continuous streaming. It is a different operational choice, not a promise that rights checks, archive planning, or platform interruptions disappear. StreamNeo is another way to avoid keeping your own computer switched on to feed a file into a continuous YouTube broadcast, which addresses the specific burden of maintaining that local process.

Check archive duration and music rights

Keeping a live broadcast running and getting a complete archive are separate tasks. YouTube Help says streams under 12 hours are automatically archived. A continuous 24/7 broadcast is longer than that stated condition, so do not plan around one complete automatic recording of the entire run. Check current Live Control Room behaviour before relying on any recording, and decide whether you need separate programme recordings or shorter scheduled streams for the archive you want.

For synthwave, clear rights before the first public test. “Synthwave” describes a style, not a licence. Permission to stream a song should cover the relevant public performance and online use for your territory and intended use; permission for the master recording and composition may come from different rights holders. Secure permission for artwork, animated visuals, samples, and any third-party footage as well. Keep copies of the terms and correspondence so you can answer a rights query accurately.

A licence does not automatically prevent a YouTube Content ID match or a live interruption. YouTube says live streams are scanned for third-party content and may replace the picture with a placeholder or interrupt or terminate a stream when a match remains. If you have permission, ask the rights holder whether the channel can be added to its Content ID allowlist. Allowlisting and legal permission are related but distinct: one does not prove the other, and YouTube notes that an archived-stream claim can still arrive after a live broadcast ends.

Royalty-free labels, attribution, or a purchase receipt should not be treated as blanket clearance. Read the actual licence for live streaming, monetisation if relevant, territory, duration, and whether the rights holder controls Content ID. If the terms are unclear, seek clarification from the owner before building a 24/7 schedule around the track. YouTube’s copyright guidance for live streams explains the platform’s matching and interruption process; check it again when preparing your channel because platform procedures can change.

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

How do I stream music 24/7 on YouTube with FFmpeg?

Enable live streaming, prepare authorised files, configure FFmpeg to loop or advance through them, and send a supported encoded output to the YouTube server URL using your stream key. Rehearse an unlisted stream and plan how you will detect and respond to failures; a loop command alone does not supervise the broadcast.

How do I loop a video or playlist on YouTube Live?

For a single file, an input-loop option can repeat it; for a playlist, use a compatible playlist or concat workflow supported by your build. Test a full cycle, especially boundaries between files, because looping does not ensure gapless transitions or compatible streams.

What happens if my YouTube livestream runs longer than 12 hours?

YouTube Help’s encoder guidance says streams under 12 hours are automatically archived. Do not assume a 24/7 broadcast will produce one complete automatic archive; check Live Control Room and plan separate recordings or shorter archive-friendly sessions if a full copy matters.

Can I use copyrighted synthwave music if I have a licence?

Only if the relevant rights and licence terms cover your intended stream, but a licence alone may not stop a Content ID match or interruption. Ask the rights holder about allowlisting your channel and check YouTube’s current live-stream copyright guidance.

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 Setup Guides guides ↗ · All topics ↗