【问题标题】:Drawtext, drawbox or overlay on only a single frame using FFmpeg使用 FFmpeg 仅在单个帧上绘制文本、绘制框或覆盖
【发布时间】:2011-11-02 11:28:52
【问题描述】:

我在 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

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

我们将不胜感激地收到任何帮助或 FFmpeg 指导。

【问题讨论】:

标签: video ffmpeg video-processing transcoding


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 2013-10-12
  • 1970-01-01
  • 2020-11-10
  • 2011-08-31
  • 1970-01-01
相关资源
最近更新 更多