FFMPEGA Text
Burn in subtitles and watermarks without hand-writing a single drawtext filter
- text_output
Adding text to video in raw ffmpeg means the drawtext filter, and drawtext is a special kind of hostile: escaping, fonts, positioning, the whole affair. FFMPEGA Text (the display name is "FFMPEGA Text", class FFMPEGATextInput) is the pack's civil version of that. You type text, pick a mode, and it outputs a JSON blob that the FFMPEG Agent parses into whatever text skill the job needs - burn_subtitles, text_overlay, or watermark. No filter syntax in sight.
The smart part is auto_mode (On by default): the node sniffs your content and picks sensible defaults. Paste a full SRT block with timestamps and it treats it as subtitles; type a short string and it guesses overlay vs. watermark. For most beginner workflows, you literally just type the text and wire text_output into the Agent's text_a slot.
The inputs that matter
text- the content. Plain text, multi-line subtitles, or full SRT format with timestamps. This is the one you'll touch every time.mode- override when auto-detection guesses wrong:subtitle(burned, timed),overlay(drawn on the video),watermark(small, persistent),title_card(large, centered), orraw(pass through untouched).position- where it sits;autofollows the mode (subtitle → bottom, watermark → bottom-right, and so on).font_size/font_color- size in px (0 = auto: 24 for subtitles, 48 for overlay, 20 for watermark) and hex color, default white.start_time/end_time- when the text is on screen.end_timeof -1 = whole video.
The single output is text_output - JSON-encoded text + metadata, wired to text_a (and text_b, text_c… for multiple text elements) on the FFMPEG Agent.
One genuinely nice touch: the node ships 10 right-click presets - SRT Subtitle Example, Cinematic Subtitles, Bold Watermark, Title Card, Social Caption, Lower Third, Credits Roll, Chapter Marker, Meme Text, Copyright Notice - so you can start from a realistic example instead of a blank box. There's also a "Clear Text" reset.
Installing it
Part of ComfyUI-FFMPEGA: ComfyUI Manager → search ComfyUI-FFMPEGA → Install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/AEmotionStudio/ComfyUI-FFMPEGA.git
cd ComfyUI-FFMPEGA
pip install -r requirements.txt
Restart ComfyUI; ffmpeg on PATH is the pack's hard dependency.
Where people get burned
The classic failure is expecting the text to show up without an Agent in the path. This node only prepares the text - the burning happens in the FFMPEG Agent when it renders, so your chain needs to be Text → Agent → Save. Also, in manual (no-LLM) mode the Agent auto-generates an overlay/subtitle pipeline from the Text node's settings only when it's connected to text_a without an Effects Builder in between - stick to that wiring when you're not using an LLM. And a format note worth knowing before you're surprised by it: H.264/MP4 doesn't carry alpha, so "transparent" text-only overlays aren't a thing here - text burns over the frame, which is what you usually want anyway.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | The text content to use. Can be plain text, multi-line subtitles, or full SRT format with timestamps. | |
| auto_modeopt | BOOLEAN | true | When Auto, the system detects whether your text is subtitles, a watermark, or overlay text and sets defaults accordingly. Turn off for full manual control. |
| modeopt | COMBO | auto | Text usage mode. 'auto' detects from content. 'subtitle' burns timed text. 'overlay' draws text on video. 'watermark' adds small persistent text. 'title_card' shows large centered text. 'raw' passes text through unchanged. |
| positionopt | COMBO | auto | Where to place the text. 'auto' chooses based on mode (subtitle → bottom, watermark → bottom-right, etc.). |
| font_sizeopt | INT | 00–200 | Font size in pixels. 0 = auto (24 for subtitles, 48 for overlay, 20 for watermark). |
| font_coloropt | STRING | #FFFFFF | Text color — click to pick a color or type a hex value (#RRGGBB). |
| start_timeopt | FLOAT | 0.00–3600 | Start time in seconds. 0 = beginning of video. |
| end_timeopt | FLOAT | -1.0-1–3600 | End time in seconds. -1 = full video duration. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text_output | STRING | JSON-encoded text with metadata. Connect to text_a, text_b, etc. on the FFMPEGA Agent node. |