我正在尝试使用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度,然后将文本附加到原始位置。因此,我正在失去边界。
请向我建议最好的方法来在视频上以所需的角度覆盖文本。
提前致谢。
基本方法是在空白画布上生成文本,然后在文本的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)