我正在尝试使用ffmpeg在视频上叠加一些文字。我可以通过bellow命令覆盖文本。
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
通过这个我得到叠加视频:
因为在这首先我将视频旋转到45度,附加文本并将其恢复到原始位置。所以我正在失去边界。
请建议我在视频上以所需角度叠加文字的最佳方式。
提前致谢。
答案 0 :(得分:5)
基本方法是在空白画布上生成文本,然后生成文本的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
答案 1 :(得分:2)
一种方法是使用带有FFmpeg subtitles或ass过滤器的ASS或SRT字幕。
valsql1 = "SELECT DISTINCT c.ReportID, c.COMPANYID, rl.REPORTNAME
FROM CompanyReportListTable c
left join ReportList rl on c.reportid = rl.ReportID
WHERE rl.ReportVisible = 1
and CompanyID = " & DropDownList1.SelectedValue
SRT字幕比ASS简单,不支持旋转,但您可以手动将其添加到过滤器中:
ffmpeg -i input -filter_complex "subtitles=diagonal.ass" output
您可以使用Aegisub或手动创建字幕并设置样式。