DrawText FFmpeg 在字体颜色上的表达

DrawText FFmpeg 在字体颜色上的表达

我正在尝试让文本淡入淡出。我希望能够通过字体颜色和表达式来实现 - 就像这样

fontcolor='if(gt(n,44), [email protected], white)'

显然,这不会“淡入”,但只是测试它是否可以评估表达式,并且似乎字体颜色无法处理表达式。这是一个事实陈述 - 字体颜色无法处理表达式?

有人知道除了逐帧链接之外淡入文本的方法吗?有没有办法将文本或类似的东西屏蔽到那种程度?

答案1

遗憾的是,您无法使用表达式作为drawtext滤镜的文本颜色选项。这使得无法轻松淡入文本或执行任何花哨的操作。

诀窍是使用blendLordNeckbeard 建议的过滤器,并将包含字幕的流覆盖在原始视频流上。淡入字幕的方法如下:

ffmpeg -y -i input.mp4 -filter_complex "[0:v] drawtext=fontfile=Fonts.ttf:text='test':x=100:y=50:fontcolor=white:fontsize=30 [subtitles]; [subtitles][0:v] blend=all_expr='A*(if(between(T,$start,$end),(T-$start)/($end-$start),1))+B*(1-(if(between(T,$start,$end),(T-$start)/($end-$start),1)))' [out]" -map '[out]' -map 0:a output.mp4

这里,$start$end分别是淡入的开始和结束位置(以秒为单位)。音频流将从输入中获取。您可以使用 将其复制过来-c:a copy

答案2

ffmpeg 现在有参数fontcolor_expr(见ffmpeg 文档),您可以在其中使用表达式。

相关内容