FFmpeg 剪切视频的一部分时,剪切视频部分的第一秒会冻结

FFmpeg 剪切视频的一部分时,剪切视频部分的第一秒会冻结

我使用这个从 MP4 文件中剪切出一部分:

ffmpeg -i input.mp4 -vcodec copy -acodec copy -ss 00:36:18 -to 00:39:50 output.mp4

效果很好,但视频图像总是在开始时冻结 1 秒。

无论我尝试从哪个视频文件中剪切出一部分,视频都需要大约 1 秒钟才能开始。

下面是一个例子我所看到的。

答案1

问题可能是视频尝试仅基于关键帧而不是帧间帧进行剪切,并且您的初始时间00:36:18比关键帧早几秒。解决方案应该是使用-copyinkf选项手册中是这样描述的

进行流复制时,也复制在开始时发现的非关键帧。

因此你的命令如下所示:

ffmpeg -i input.mp4 -vcodec copy -acodec copy -ss 00:36:18 -to 00:39:50 output.mp4

然后需要进行调整,使其看起来像这样并-copyinkf混合到其中:

ffmpeg -i input.mp4 -vcodec copy -acodec copy -copyinkf -ss 00:36:18 -to 00:39:50 output.mp4

答案2

您正在复制的时间戳位于关键帧之间,如果复制帧间编解码器并且您的输入不是从关键帧开始,则使用 -vcodec copy 将始终导致这种行为。

您的选择是进行完整编码(即没有 -vcodec 复制)或选择不同的时间戳进行查找。您可以使用 ffprobe 找到所有关键帧的位置。

ffprobe -select_streams v -show_frames -print_format csv -show_entries frame=key_frame,pkt_dts_time input.mp4  | grep "frame,1"

第三列包含所有关键帧的时间戳(以秒为单位),您需要最接近但不晚于目标时间戳的时间戳。

答案3

我也遇到过这个问题,但我不知道为什么会发生这种情况以及如何解决它。只知道这个代码帮我解决了这个问题:

ffmpeg -ss 00:00:00 -to 00:00:10 -i input.mp4 -c:v copy -c:a copy output.mp4

相关内容