如何使用 ffmpeg 在视频的最后 60 秒添加我的徽标?

如何使用 ffmpeg 在视频的最后 60 秒添加我的徽标?

我花了好几天才找到这个解决方案。我找到的办法都是在前几秒或几秒后或只在某些部分之间添加徽标(例如在 30 到 210 秒之间)

所以主要问题是:如何使用 ffmpeg 在视频的最后 60 秒添加我的徽标?我有很多不同长度的视频,只想在最后 60 秒叠加一个 .png 徽标(在本例中也位于屏幕左下角)

目前我正在使用下面看到的效果,效果很好(除 30-210 秒的视频外始终显示徽标)但就像我在标题中提到的那样,它并没有完全满足我的要求。

-i video.mp4 -vf "movie=/logo.png [watermark]; [in][watermark] overlay=1:main_h-overlay_h-1:enable=not(between'(t,30,210)') [out]"

答案1

有一种可能效率低下的方法可以做到这一点,该方法在测试中有效,但当输入时间戳不规则(即从非零开始时)时可能会失败。

基本模板是

ffmpeg -i in.mp4 -sseof -60 -copyts -i in.mp4 -loop 1 -i logo.png -filter_complex "[1][2]overlay=shortest=1[logo];[0][logo]overlay" out.mp4

视频输入两次。在第二次输入中,sseof设置了允许使用从末尾测量的时间间隔进行搜索的选项。当然,除非另有说明,否则 FFmpeg 将重置输入时间戳,因此copyts设置为保留输入 TS。

首先,将徽标叠加在修剪后的视频上,并将结果叠加在第一个输入上。由于保留了时间戳,因此帧对齐,目的就达到了。

答案2

overlay并且enable无法引用视频的结尾或时长。您需要使用其他命令(可能是ffprobegrep,例如在这个答案中描述)提取持续时间,然后使用它来生成ffmpeg具有正确between值的命令。

相关内容