使用FFMPEG将文字以所需角度叠加在视频上

4

我正在尝试使用ffmpeg在视频上叠加一些文本。我可以通过下面的命令来叠加文本。

ffmpeg -i input1.mp4 -filter_complex "[0:v]transpose=2[anticlockwiserotated];[anticlockwiserotated]drawtext=fontfile=../../public/fonts/Roboto-Regular-webfont.ttf: text='Test Text':x=100: y=50: fontsize=36: fontcolor=white:[textapplied];[textapplied]transpose=1" output_video.mp4

它只允许我水平或垂直叠加。

但我想以45度的角度附加它。

为此,如果我修改命令为

ffmpeg -i input1.mp4 -filter_complex "[0:v]rotate=45*PI/180[anticlockwiserotated];[anticlockwiserotated]drawtext=fontfile=../../public/fonts/Roboto-Regular-webfont.ttf: text='Test Text':x=100: y=50: fontsize=36: fontcolor=white:[textapplied];[textapplied]rotate=315*PI/180" output_video.mp4

通过这种方式,我得到了叠加视频,如下所示:

enter image description here

因为在这个过程中,我首先将视频旋转45度,添加文本并将其恢复到原始位置。所以我失去了边框。

请建议我最佳方法来使所需角度的文本与视频叠加。

提前感谢您。

2个回答

7

基本方法是在空白画布上生成文本,然后为文本生成一个 Alpha 层,在旋转结果并将其叠加到主视频上。

在下面的命令中,a 应该被替换为角度。drawtext 的坐标被用于叠加。根据您的文本长度,如果您将其逆时针旋转,则某些文本可能会被裁剪。因此,请检查和相应地调整 Y 偏移量。

ffmpeg -i input1.mp4 -filter_complex 
        "color=black:100x100[c];
         [c][0]scale2ref[ct][mv];
         [ct]setsar=1,drawtext=fontfile=../../public/fonts/Roboto-Regular-webfont.ttf:
             text='Test Text':fontsize=36:fontcolor=white,split[text][alpha];
         [text][alpha]alphamerge,rotate=a:ow=rotw(a):oh=roth(a):c=black@0[txta];
         [mv][txta]overlay=x='min(0,-H*sin(a))+100':y='min(0,W*sin(a))+50':shortest=1"
      output_video.mp4

这非常有用。还有一个小问题,我们可以给文本添加粗体或斜体效果吗?并且是否可以在特定时间段添加文本。我的意思是仅在视频的第10秒到第20秒之间添加文本,其余视频应该没有文本。 - Harsha Vardhan
角度必须以弧度为单位,因此55度= a = 55*PI/180 - Gyan
你好 @Mulvya ,请问如何通过上述命令显示多个不同时间的文本? - karanatwal.github.io
@Gyan 如何使用以上命令在不同的时间显示不同的文本? - gone
1
@ gone,您只需在第一个绘制文本过滤器之后立即添加另一个过滤器,用逗号分隔即可。 - Gyan
显示剩余3条评论

4
一种方法是使用带有FFmpeg字幕ASS过滤器的ASS或SRT字幕。

enter image description here

ffmpeg -i input -filter_complex "subtitles=diagonal.ass" output

SRT字幕比ASS简单得多,不支持旋转,但您可以使用过滤器手动添加它:
ffmpeg -i input -filter_complex "subtitles=diagonal.srt:force_style='Angle=45'" output

您可以使用Aegisub创建和样式化字幕,也可以手动完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接