使用FFMPEG

时间:2016-07-11 11:55:23

标签: ffmpeg

我正在尝试使用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

通过这个我得到叠加视频:

enter image description here

因为在这首先我将视频旋转到45度,附加文本并将其恢复到原始位置。所以我正在失去边界。

请建议我在视频上以所需角度叠加文字的最佳方式。

提前致谢。

2 个答案:

答案 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 subtitlesass过滤器的ASS或SRT字幕。

enter image description here

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或手动创建字幕并设置样式。