Use FFmpeg’s subtitles video filter to render subtitle text into the video frames, then encode the filtered video and send it to YouTube using the live-stream settings for your channel. You need an FFmpeg build with libass support. Because the subtitles become part of the picture, viewers cannot turn them off as a separate caption track.
“Playlist stream” can mean a local sequence of clips, a YouTube playlist of videos already published, or an HLS playlist. Those are different workflows. The steps below explain burning subtitles into a file and how to approach a local clip sequence; they do not assume that making an HLS playlist sends it to YouTube Live.
Choose the subtitle workflow before you encode
First establish where the subtitles are and what you mean by a playlist. An external SRT or ASS file can be supplied to the filter; subtitles embedded in a media file can be selected from that input. For a local playlist where each clip has its own subtitle file, each clip needs the correct subtitle selection and timing. A single filter expression should not be assumed to pick the right track or file for every clip.
- One video with an external subtitle file: render the file with the
subtitlesfilter. - One video with embedded subtitle tracks: identify the intended text track and select it explicitly.
- A local sequence of clips with separate subtitle files: render each clip with its matching subtitles, then assemble the rendered clips using a compatible workflow. Check that the clips’ streams and settings are suitable for that assembly method.
- A YouTube playlist: this is a collection of published YouTube videos, not an FFmpeg playlist input that automatically becomes a live stream.
- An HLS playlist: this is a media delivery format. FFmpeg documents HLS generation and subtitle renditions, but creating HLS output does not by itself deliver it to YouTube Live.
See the FFmpeg Filters Documentation for the subtitle filter and the Formats Documentation for HLS and playlist-related formats.
Free tools Windows power users keep installed
One-click scans. No signup required.
#1 Best Overall
- Includes Raspberry Pi 4 4GB Model B with 1.5GHz 64-bit quad-core CPU (4GB RAM)
- Includes Pre-Loaded 32GB EVO+ Micro SD Card (Class 10), USB MicroSD Card Reader
- CanaKit Premium High-Gloss Raspberry Pi 4 Case with Integrated Fan Mount, CanaKit Low Noise Bearing System Fan
- CanaKit 3.5A USB-C Raspberry Pi 4 Power Supply (US Plug) with Noise Filter, Set of Heat Sinks, Display Cable - 6 foot (Supports up to 4K60p)
- CanaKit USB-C PiSwitch (On/Off Power Switch for Raspberry Pi 4)
Burn subtitles into a video with FFmpeg
1. Check that your FFmpeg build has the filter
The subtitles filter requires an FFmpeg build configured with libass. Check the available filters with ffmpeg -filters and look for subtitles. FFmpeg’s filter documentation specifies the libass requirement; if the filter is unavailable, use a build that includes it.
2. Render an external SRT file
For a compatible input file named input.mp4 and an external subtitle file named subtitles.srt, this illustrates the basic rendering step:
Rank #2
- Broadcom BCM2711, quad-core Cortex-A72 (ARM v8) 64-bit SoC @ 1. 5GHz
- 2. 4 GHz and 5. 0 GHz IEEE 802. 11b/g/n/ac wireless LAN, Bluetooth 5. 0, BLE
- 2 × USB 3. 0 ports, 2 x USB 2. 0 Ports
- 2 × micro HDMI ports supproting up to 4Kp60 video resolution
- Micro SD card slot for loading operating system and data storage
ffmpeg -i input.mp4 -vf "subtitles=subtitles.srt" -c:v libx264 -c:a copy output.mp4
This is an offline example, not a tested command or a complete YouTube playlist configuration. It assumes that your FFmpeg build provides both the filter and the libx264 encoder, and that copying the input audio into the output container is compatible. If the audio cannot be copied, choose an audio encoding and output format that suit your source and delivery requirements.
3. Select an embedded subtitle stream deliberately
If the subtitle track is inside the media file, do not assume the first track is the language or type you want. Inspect the input’s streams, identify the subtitle stream, and pass the appropriate stream selection to the filter. FFmpeg’s subtitle-filter documentation covers selecting subtitle streams from an input; the exact selection depends on the file’s stream layout.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Rank #3
- Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit SoC @ 1.5GHz
- 1GB, 2GB, 4GB or 8GB LPDDR4-3200 SDRAM (depending on model)
- 2.4 GHz and 5.0 GHz IEEE 802.11ac wireless, Bluetooth 5.0, BLE Gigabit Ethernet
- 2 USB 3.0 ports; 2 USB 2.0 ports.
- Raspberry Pi standard 40 pin GPIO header (fully backwards compatible with previous boards)
Confirm that the selected track contains text subtitles. A wrong stream index, wrong language, or non-text subtitle track can lead to missing or unexpected output.
4. Encode video; do not use video stream copy
The filter changes decoded video frames, so those frames must be encoded again. -c:v copy bypasses frame processing and cannot apply a visual subtitle filter. The example uses libx264; another encoder may be appropriate if it is available and meets your delivery requirements.
Rank #4
- Vilros Complete Starter Kit for Pi 4 Includes Raspberry Pi 4 Model B Board and all the accessories you need to get started.
- 9-PART KIT WILL HAVE YOU READY TO GET UP AND RUNNING: Kit Includes 1. Raspberry Pi 4 Model B Board 2. Case With Easy to connect Built-in fan 3. 64GB Micro SD card Preloaded with RP OS 4. Vilros Pi 4 Compatible Power Supply with Inline on/off switch (power supply color may vary white/black) 5. Micro HDMI to Standard HDMI cable (5ft) 6. Micro SD to USB adapter to reflash card if desired 7. Neoprene Storage Bag to store all parts when not in use 8. Set of 4 Heatsinks 9. Vilros QuickStart Guide instruction booklet for Pi 4
- PASSIVE & ACTIVE COOLING: The included case is well-vented and the kit also includes a set of heatsinks with thermal stickers for easy application and a pre-installed fan to keep the board cool in any use.
- CONVENIENT ACCESSORIES: The power supply features an inline on/off switch neoprene bag that holds and protects all the parts when not in use and the QuickStart guide is updated and written for Raspberry Pi 4.
- IMPORTANT: Kit does NOT include Keyboard, Mouse or Monitor
5. Check appearance and timing before using the result
Review the output at the resolution you intend to stream. Check subtitle timing, language, line breaks, visibility, and font availability. If you use ASS styling, confirm that the rendered appearance is acceptable with the fonts and filter options available in your environment. A local review can catch subtitle problems before you rely on a long-running stream.
Handle a local playlist of clips
When every clip has a different subtitle file, the key requirement is matching each subtitle file to its clip and preserving timing at each clip boundary. The general filter example above does not specify a universal playlist command for per-clip subtitle files, repeats, transitions, and encoder choices.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Clear out junk files and repair common Windows errors3Fix the driver behind crashes, sound loss and screen glitchesBest Value
- Includes Raspberry Pi 4 4GB Model B with 1.5GHz 64-bit quad-core CPU (4GB RAM)
- CanaKit 3.5A USB-C Power Supply with Noise Filter (UL Listed) specially designed for the Raspberry Pi 4 (5-foot cable)
- CanaKit USB-C PiSwitch (On/Off Power Switch)
- Set of 3 Aluminum Heat Sinks for the Raspberry Pi 4
- Map the inputs: list each clip and the subtitle file or embedded track it should use. Verify language and timing for each pair.
- Render each clip with its matching subtitles: apply the filter to that clip and encode its video. Do not substitute video stream copy for the filtered video.
- Assemble the rendered clips: use a playlist or concatenation workflow compatible with the resulting files. Confirm that the chosen method handles their stream parameters and boundaries as intended.
- Test the complete sequence: review transitions and subtitle timing at the point where one clip ends and the next begins. Then configure the live encoder output separately.
FFmpeg documents playlist and HLS formats, but the right assembly method depends on how your clips are prepared. Do not treat an HLS output playlist as a YouTube Live ingest destination.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Send the encoded output to YouTube Live
For a live encoder workflow, configure FFmpeg’s outgoing format, video and audio codecs, and ingest destination according to YouTube’s current instructions and the live configuration shown for your channel. YouTube provides the current encoder settings, bitrates, and resolutions and instructions to create a live stream with an encoder. Follow those pages for the selected resolution and channel setup rather than assuming one set of encoder values suits every stream.
Use the stream URL and key provided in your YouTube live setup. Treat the stream key as a secret: do not publish it in a command, screenshot, script, or shared playlist. A complete command depends on the playlist design, codecs, output format, and YouTube configuration, so the offline example above should not be used as if it were a universal live-stream command.
Hard subtitles or selectable captions?
| Approach | What viewers get | Trade-off |
|---|---|---|
| Burn subtitles into the video | Text is visible in the rendered frames. | Viewers cannot switch it off, select another language, or restyle it as a separate caption track. |
| Provide a separate caption track | Viewers can use the relevant YouTube caption controls. | It is a separate caption workflow, not text permanently rendered into the video image. |
Burn subtitles when fixed on-screen text is the intended presentation. If accessibility, viewer choice, or multiple languages matter, retain or provide a separate caption track through the relevant YouTube workflow as well.
Troubleshoot common failures
- “No such filter: subtitles” or the filter is unavailable: check whether the installed FFmpeg build includes the filter and libass support. The filter requires a build configured with
--enable-libass. - Subtitles are missing or the wrong language appears: verify the external filename and path, or inspect the input’s subtitle streams and select the intended text track explicitly.
- Filter expression or path parsing fails: quote the filter expression and escape special characters as required by both your shell and FFmpeg’s filtergraph syntax. Quoting rules vary across shells and operating systems.
- Encoding is unexpectedly slow or CPU-heavy: filtering requires processing video frames and encoding the result; copying the compressed video cannot apply the filter. Actual throughput depends on the source, resolution, encoder, and hardware.
- YouTube does not receive or accept the stream: check the current YouTube encoder guidance and the destination URL and key in your channel’s live control room. The correct full command depends on the playlist and output configuration.
- Subtitles drift, overlap, or look wrong at a boundary: inspect the affected source clip and subtitle timing, then test the assembled sequence at its final output resolution before relying on it for an extended stream.
Or let it run in the cloud
If your goal is to keep a YouTube playlist live without leaving an FFmpeg process and computer running at home, StreamNeo is a cloud alternative: upload a recording or build a playlist, add your YouTube stream key once, and go live. It plays uploaded videos, not a live camera feed.
Quick Recap
- Nothing has to stay on at home; StreamNeo loops the uploaded video or playlist from the cloud and automatically recovers if YouTube drops the stream.
- Each slot streams your upload as made, up to 4K 60fps, at one flat price per slot, with no re-encode or quality tiers.
- The first day is free with no card, one free day per account. Monthly: $9.99 per month.
See StreamNeo for details, or start your free day.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




