我可以使用ffmpeg在关键帧处剪辑视频吗?

3

我正在使用这个命令

ffmpeg -start_at_zero -copyts -ss <start time> -t <duration> -i <SrcFile> -c copy <DstFile>

快速剪切mp4视频的一部分。我得到了关键帧,因此选择其中一个作为<start time>。我认为这将给我一个准确的输出视频,从那个关键帧开始,但是事实并非如此。 我该如何实现这一点(在关键帧上快速而准确地进行剪切)? 换句话说:ffmpeg如何决定从哪里开始剪切?我认为它使用最接近的关键帧。
另一个问题: 如何使用完全相同的视频和音频选项对mp4的一部分进行编码?我不知道这些选项。我只想保持输出与原始视频相同。在第二种情况下,剪切可以在任何帧(不一定是关键帧)处进行。 谢谢。
1个回答

0

我有一个解决方案,但是不知道如何使用当前的 ffmpeg 命令来实现(我试图在关键帧处复制,但精确度不够)。我想知道 ffmpeg 是如何确定切割点的。

我建议采用以下算法将我们想要复制的片段(t1,t2)分成三个部分: 1. 一个部分(t1-x,t1+y),这是一个完整的编码块,需要重新编码以便能够精确地复制部分(t1,y)。 2. 一个部分(t2-z,t3+w),这是一个完整的编码块,需要重新编码以便能够精确地复制部分(z,t2)。 3. 一个中间部分(y,z),其中包含完整的编码块,可以直接复制。 4. 将以上步骤得到的三个部分合并起来。

请注意,前两个部分预计较小(其中一个或两者都可能为空),因此重新编码过程会很快。这使得我们能够进行精确的切割,虽然操作稍微慢一些,但比重新编码整个视频要快得多。如果我们能够一次使用一个命令进行多次切割,那么速度甚至可以更快,因为我们只需遍历一次帧。我希望有人能够尝试应用这个算法,并告诉我们如何操作,或者将其传达给 ffmpeg 团队的相关人员。


嗨,你找到这个解决方案的实现方法了吗?我也有完全相同的问题,并且想到了完全相同的解决方案,但是无法找到使用ffmpeg完成它的方法。 - jdscosta91

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接