小编典典

使用 ffmpeg 根据开始和结束时间剪切视频

all

我尝试使用以下命令使用视频的开始和结束时间剪切视频

ffmpeg -ss 00:00:03 -t 00:00:08 -i movie.mp4 -acodec copy -vcodec copy -async 1 cut.mp4

通过使用上述命令,我想将视频00:00:0300:00:08. 但它不是在这些时间之间剪切视频,而是在前 11 秒剪切视频。谁能帮我解决这个问题?

编辑1:

我尝试使用mark4o建议的以下命令进行剪切

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4

但它显示了以下错误。

编码器“aac”是实验性的,但实验性编解码器未启用

所以我将其添加-strict -2到命令中,即

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 -strict -2 cut.mp4

现在它工作正常。


阅读 364

收藏
2022-03-02

共1个答案

小编典典

您可能在 3 秒标记处没有关键帧。因为非关键帧编码与其他帧的差异,所以它们需要从前一个关键帧开始的所有数据。

使用 mp4 容器,可以在非关键帧处进行剪切,而无需使用编辑列表重新编码。换句话说,如果 3s 之前最近的关键帧是 0s,那么它将复制从 0s
开始的视频,并使用编辑列表告诉播放器开始播放 3 秒。

如果您使用来自 git master 的最新
ffmpeg
,它将在使用您提供的命令调用时使用编辑列表执行此操作。如果这对您不起作用,那么您可能正在使用旧版本的
ffmpeg,或者您的播放器不支持编辑列表。有些播放器会忽略编辑列表,总是从头到尾播放文件中的所有媒体。

如果您想从非关键帧开始精确剪切,并希望它在不支持编辑列表的播放器上从所需点开始播放,或者想要确保剪切部分实际上不在输出文件中(例如如果它包含机密信息),那么您可以通过重新编码来做到这一点,以便在所需的开始时间精确地有一个关键帧。如果不指定,则重新编码是默认设置copy。例如:

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4

重新编码时,您可能还希望包括其他与质量相关的选项或特定的 AAC 编码器。有关详细信息,请参阅 ffmpeg
x264视频编码指南和AAC音频编码指南。

此外,该-t选项指定持续时间,而不是结束时间。上面的命令将从 3s 开始编码 8s 的视频。要从 3 秒开始并在 8 秒结束,请使用-t 5.
如果您使用的是当前版本的 ffmpeg,您也可以在上述命令中替换为在指定时间结束-t-to

2022-03-02