Helder Santos
Helder Santos

Reputation: 119

FFMPEG - Fading text with background

I'm trying to fade a text in and out (the text has a background), at the moment, what I have is this command:

1. Blend command

ffmpeg -y -i input.mp4 -filter_complex "drawtext=fontfile=HelveticaNeue.ttf:text='Testing': fontcolor=white:fontsize=40: box=1: [email protected]:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2[subtitles];[subtitles][0:v]blend=all_expr='A*(if(between(T,1,2),(T-1),0))+B*(1-(if(between(T,1,2),(T-1),0)))'[out]"  -map '[out]' -map 0:a output.mp4

The command above successfully fades in the drawtext (aka subtitles in this filter), but I haven't managed to make it fade them out for some reason, because changing the numeric values of it don't quite have the result I expect.

I've also tried a command that is less complex but doesn't work too for other reasons:

2. Fade command

ffmpeg -y -i input.mp4 -filter_complex "drawtext=fontfile=HelveticaNeue.ttf:text='Testing': fontcolor=white:fontsize=40: box=1: [email protected]:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2[subtitles]; [subtitles]fade=t=in:st=2:d=1,fade=t=out:st=3:d=1[out]"  -map '[out]' -map 0:a output.mp4

This second command fades in and out, but applies to the entire video and not the subtitles part alone.

Any way someone can give me a hand with this?

Upvotes: 6

Views: 7638

Answers (3)

user2300572
user2300572

Reputation: 11

if you want to use it for video captioning, use SSA.

Upvotes: 0

Sunny Rajdeep
Sunny Rajdeep

Reputation: 151

ffmpeg -y -i input.mp4 -filter_complex "[0:v]drawtext=fontfile=Lato-Light.ttf:text='Sample Text':fontsize=40:fontcolor=985a5a:alpha='if(lt(t,2),0,if(lt(t,3),(t-2)/1,if(lt(t,6),1,if(lt(t,7),(1-(t-6))/1,0))))':x=(w-text_w)/2:y=(h-text_h)/2" output.mp4

Follow this link to generate your own ffmpeg command for text fade in fade out: http://ffmpeg.shanewhite.co/

Upvotes: 14

Gyan
Gyan

Reputation: 93319

The quick and dirty method to do this is to split the base video into two, draw the text on one copy, add an alpha channel, apply fades to the alpha, overlay the result onto the other copy.

e.g.

ffmpeg -y -i input.mp4 -filter_complex "[0]split[base][text];[text]drawtext=fontfile=HelveticaNeue.ttf:text='Testing': fontcolor=white:\
fontsize=40: box=1: [email protected]:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2,format=yuva444p,fade=t=in:st=2:d=1:alpha=1,fade=t=out:st=3:d=1:alpha=1[subtitles]; \
[base][subtitles]overlay" output.mp4

Upvotes: 4

Related Questions