使用FFMPEG在视频上以所需角度覆盖文本

Har*_*han 3 ffmpeg

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

它允许我仅水平或垂直覆盖。

但是我想以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
Run Code Online (Sandbox Code Playgroud)

这样,我得到的重叠视频为:

在此处输入图片说明

因为在这第一个过程中,我将视频旋转到45度,然后将文本附加到原始位置。因此,我正在失去边界。

请向我建议最好的方法来在视频上以所需的角度覆盖文本。

提前致谢。

Gya*_*yan 5

基本方法是在空白画布上生成文本,然后在文本的Alpha层上旋转结果并将其覆盖在主视频上。

在下面的命令中,a应将其替换为角度。绘制文本的坐标改为在叠加层中使用。根据文本的长度,如果您将其逆时针旋转,可能会被剪切掉。因此,请检查并相应地调整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
Run Code Online (Sandbox Code Playgroud)