如何通过冻结最后一帧而不重新编码整个流来扩展视频?

How to extend a video by freezing the last frame without reencoding the whole stream?

我想在不重新编码整个视频流的情况下实现两件事:

  1. 通过将最后一帧冻结给定持续时间来延长视频。
  2. 通过在给定时间戳处冻结帧给定持续时间来扩展视频。

目前我正在使用 ffmpeg -i in.mp4 -vf tpad=stop_mode=clone:stop_duration=5 out.mp4,但它需要对整个视频流进行编码,并且只允许冻结流的最后一帧。为了获得我想要的结果,我需要将视频分成多个片段,将片段的最后一秒提取到一个单独的文件(所以我只重新编码那部分),运行 上面的命令然后合并所有使用 concat demuxer 返回段。

有没有什么更好更简单的方法可以达到上面的效果?

到 'extend' 最后一帧,通过填充扩展音频流。

ffmpeg -i in.mp4 -c:v copy -af apad -t 5 out.mp4

如果没有现有的音频流,添加一个

ffmpeg -i in.mp4 -f lavfi -i anullsrc -c:v copy -af apad -t 5 out.mp4

为了在中间暂停帧并进行最少的重新编码,分段 + concat 确实是可行的方法