我正在尝试找到一种使用 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]
将计时器的顺序从结束时间恢复为 0enable='between(t,0,$duration-1)'
从计时器中删除最后一秒,因为您不想要 00:00...{pts\:gmtime\:0\:%#M\\\:%S}
创建一个计时器,分钟为 %#M,秒为 %S,%#M 中的 # 会删除前导零,但在 Linux 中,我猜是 %-M。Linux 中的反斜杠数量%#M\\\:%S
可能也不同。尝试一个、两个、四个,看看哪个适合您。