使用 FFmpeg 为视频添加计时器

使用 FFmpeg 为视频添加计时器

我正在尝试找到一种使用 FFmpeg 向视频添加倒计时文本的方法。

我希望文本为“剩余时间:mm:ss”,但避免在分钟前加上零。

例如:

  • 剩余时间:10:01
  • 剩余时间:10:00
  • 剩余时间:9:59
  • ...
  • 剩余时间:1:00
  • 剩余时间:00:59

我还希望文本在显示 00:00 之前消失

所有视频时长均在 1 小时以内,因此无需处理时长 >= 60 分钟的情况

答案1

我已经在 Windows 上测试了这些命令,但在 Linux 上应该以类似的方式执行:

首先,您必须获取视频的时长(以秒为单位):

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4

接下来,您将使用 ffprobe 命令中获得的秒数,我将其指定为“$duration”(也使用点后面的数字,例如:3600.48993):

ffmpeg -f lavfi -i "color=color=#00000000@0:size=600x100:duration=$duration:r=30,format=rgba,settb=AVTB,drawtext=text='Time left\: %{pts\:gmtime\:0\:%#M\\\:%S}':fontsize=80:fontcolor=black:bordercolor=white:borderw=3:x=20:y=(H-th)/2:font=calibri" -i input.mp4 -filter_complex "[0]reverse[timer];[1][timer]overlay=x=0:y=H-h:enable='between(t,0,$duration-1)'" -y -c:v libx264 -c:a copy output.mp4

您可能需要创建一个 bash 脚本或其他东西来自动执行此操作...

输出类似于我之前发布的链接: 输出.gif

解释:

  • color=创建一个具有透明背景的计时器
  • [0]reverse[timer]将计时器的顺序从结束时间恢复为 0
  • enable='between(t,0,$duration-1)'从计时器中删除最后一秒,因为您不想要 00:00...
  • {pts\:gmtime\:0\:%#M\\\:%S}创建一个计时器,分钟为 %#M,秒为 %S,%#M 中的 # 会删除前导零,但在 Linux 中,我猜是 %-M。Linux 中的反斜杠数量%#M\\\:%S可能也不同。尝试一个、两个、四个,看看哪个适合您。

相关内容