FFMPEG - 带背景的淡入淡出文本
FFMPEG - Fading text with background
我正在尝试淡入和淡出文本(文本有背景),目前,我有这个命令:
1.混合命令
ffmpeg -y -i input.mp4 -filter_complex "drawtext=fontfile=HelveticaNeue.ttf:text='Testing': fontcolor=white:fontsize=40: box=1: boxcolor=black@0.5: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
上面的命令成功淡化了 drawtext(也就是这个过滤器中的字幕),但出于某种原因我没能让它淡出,因为改变它的数值并没有我期待的结果。
我也试过一个不那么复杂但由于其他原因不起作用的命令:
2。淡入淡出命令
ffmpeg -y -i input.mp4 -filter_complex "drawtext=fontfile=HelveticaNeue.ttf:text='Testing': fontcolor=white:fontsize=40: box=1: boxcolor=black@0.5: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
第二个命令淡入淡出,但适用于整个视频,而不是单独的字幕部分。
有人可以帮我解决这个问题吗?
执行此操作的快速而肮脏的方法是将基本视频一分为二,在一个副本上绘制文本,添加一个 alpha 通道,对 alpha 应用淡入淡出,将结果叠加到另一个副本上。
例如
ffmpeg -y -i input.mp4 -filter_complex "[0]split[base][text];[text]drawtext=fontfile=HelveticaNeue.ttf:text='Testing': fontcolor=white:\
fontsize=40: box=1: boxcolor=black@0.5: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
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
按照此 link 为文本淡入淡出生成您自己的 ffmpeg 命令:http://ffmpeg.shanewhite.co/
我正在尝试淡入和淡出文本(文本有背景),目前,我有这个命令:
1.混合命令
ffmpeg -y -i input.mp4 -filter_complex "drawtext=fontfile=HelveticaNeue.ttf:text='Testing': fontcolor=white:fontsize=40: box=1: boxcolor=black@0.5: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
上面的命令成功淡化了 drawtext(也就是这个过滤器中的字幕),但出于某种原因我没能让它淡出,因为改变它的数值并没有我期待的结果。
我也试过一个不那么复杂但由于其他原因不起作用的命令:
2。淡入淡出命令
ffmpeg -y -i input.mp4 -filter_complex "drawtext=fontfile=HelveticaNeue.ttf:text='Testing': fontcolor=white:fontsize=40: box=1: boxcolor=black@0.5: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
第二个命令淡入淡出,但适用于整个视频,而不是单独的字幕部分。
有人可以帮我解决这个问题吗?
执行此操作的快速而肮脏的方法是将基本视频一分为二,在一个副本上绘制文本,添加一个 alpha 通道,对 alpha 应用淡入淡出,将结果叠加到另一个副本上。
例如
ffmpeg -y -i input.mp4 -filter_complex "[0]split[base][text];[text]drawtext=fontfile=HelveticaNeue.ttf:text='Testing': fontcolor=white:\
fontsize=40: box=1: boxcolor=black@0.5: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
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
按照此 link 为文本淡入淡出生成您自己的 ffmpeg 命令:http://ffmpeg.shanewhite.co/