我在FFmpeg上使用 drawtext 和 drawbox avfilters,这是人类已知的两个最难记录的函数。
我正在努力研究是否以及如何在一帧上使用它们,即第22帧的drawtext。
当前命令:
ffmpeg -i test.wmv -y -b 800k -f flv -vcodec libx264 -vpre default -s 768x432 \
-g 250 -vf drawtext="fontfile=/home/Cyberbit.ttf:fontsize=24:text=testical:\
fontcolor=green:x=100:y=200" -qscale 8 -acodec libfaac -sn -vstats out.flv
提到的两个元素in the documentation是 n 和 t 。但是,我似乎只能在x和y中使用它们。不在文本中,甚至不在其他参数中。
非常感谢任何帮助或FFmpeg指导。
答案 0 :(得分:3)
在一个很好的例子中,FFmpeg始终让你保持警惕,这对于drawtext
来说是微不足道的,而drawbox
则非常痛苦。
关键是drawtext
包含draw
参数:
<强>绘制强>
设置一个表达式,指定是否应绘制文本。如果表达式的计算结果为0,则不会绘制文本。这对于指定仅在满足特定条件时才应绘制文本非常有用。
所以只在第22帧显示文字:
ffmpeg -i in.wmv -vf drawtext="fontfile=font.ttf:text='blah':draw='eq(n,22)'" out.flv
drawbox
没有draw
参数,并且没有通用的方法来模拟它,所以你要做一些事情,比如提取要放置框的视频部分,然后重叠它有一个偏移量:
ffmpeg -i in.wmv -t 1 -ss 10 -vf drawbox=10:10:20:20:red boxed.flv
ffmpeg -i in.wmv -itsoffset 10 -i boxed.flv -filter_complex overlay out.flv
(虽然这会使boxed.flv
的最后一帧永远可见)或将视频分成多个部分,绘制正确的部分,然后重新组合。