5

我在 FFmpeg 上使用drawtextdrawbox avfilter,这是人类已知的两个记录最差的函数。

我正在努力弄清楚是否以及如何仅在单个帧上使用它们,即第 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

文档中提到的两个元素是nt。但是,我似乎只能在 x 和 y 中使用它们。不在文本中,甚至不在其他参数中。

任何帮助或 FFmpeg 指导将不胜感激。

4

1 回答 1

3

在 FFmpeg 始终让您保持警觉的一个很好的例子中,这drawtextdrawbox.

关键是drawtext包含draw参数:

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永远可见)或将视频分成多个片段,绘制适当的片段,然后重新组合。

于 2012-08-03T23:47:06.553 回答