您好,我正在尝试将几个2秒长度的mp4剪辑串联起来,这些剪辑使用drawtext过滤器创建,但在此之前,我想通过重复最后一帧来延长其中某些的长度。我该怎么做?
如果使用的ffmpeg版本是2018年11月2日之后的最新版本,则可以使用以下命令:
ffmpeg -i in.mp4 -vf tpad=stop_mode=clone:stop_duration=2 out.mp4
音频将被忽略。有关旧版本,请参见下面。
默认情况下,覆盖滤镜会在覆盖输入的最后一帧已经结束而基础输入还没有结束时,重复显示覆盖输入的最后一帧。因此,关键是要在完整流上叠加主视频的截断版本,从而“延长”最后一帧。还有一种不同且更简单的方法来完成以上操作:
ffmpeg -i in.mp4 -filter_complex "[0]trim=0:N[hold];[0][hold]concat[extended];[extended][0]overlay" out.mp4
其中N
是扩展的持续时间(以秒为单位)。
;[extended][0]overlay
的作用吗?因为你已经连接了 [0] 和被修剪的部分 [hold]。这里的叠加是什么意思? - vdegennetrim
命令后添加fifo
,否则ffmpeg会报错[Parsed_concat_5 @ 048f7760] Buffer queue overflow, dropping.
并且无论修剪长度如何,视频只会延长3秒。但是请准备好足够的RAM(我不得不下载64位版本的ffmpeg,因为32位版本无法分配足够的RAM)。 - Martin Pecka