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

问题描述

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

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

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

有没有更好更简单的方法来实现上述目标?

解决方法

要“扩展”最后一帧,请通过填充来扩展音频流。

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

对于以最少的重新编码在中间暂停帧,分段 + 连接确实是要走的路