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

我试图通过使用以下命令使用video的开始和结束时间来剪切video

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剪切video。 但是这并不是在那段时间之间切换video,而是在第一个11秒钟之前剪切video。 谁能帮我解决这个问题?

编辑1:

我试图通过使用mark4obuild议的以下命令来剪切

 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 

现在它工作正常。

你可能没有在3秒的关键帧。 由于非关键帧与其他帧的差异编码,它们需要以前一个关键帧开始的所有数据。

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

如果你使用的是git master的最新ffmpeg ,它将使用你提供的命令调用时使用编辑列表来完成。 如果这不适合你,那么你可能使用的是旧版本的ffmpeg,或者你的播放器不支持编辑列表。 有些玩家会忽略编辑列表,始终播放文件中的所有媒体。

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

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

在重新编码时,您可能还希望包含其他质量相关选项或特定的AAC编码器。 有关详细信息,请参阅ffmpeg针对audio的“video和AAC编码指南”的“ x264编码指南 ” 。

另外, -t选项指定了一个持续时间,而不是结束时间。 上面的命令将从3秒开始编码8个video。 从3秒开始,以8秒结束使用-t 5 。 如果你使用的是当前版本的ffmpeg,你也可以在上面的命令中用-toreplace-t在指定的时间结束。

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

使用-c立即复制 。 在这种情况下,ffmpeg不会对video进行重新编码,只会缩小到相应的大小。

尝试使用这个。 这是最快和最好的ffmpeg方式我已经弄明白了:

  ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:00 -c copy output.mp4 

这个命令在几秒钟内修剪你的video!

我在这里的博客上解释过

-i:这指定了input文件。 在这种情况下,它是(input.mp4)。
-ss:和-i一起使用,在input文件(input.mp4)中寻找位置。
00:01:00:这是您的剪辑video将开始的时间。
-to:指定从开始(00:01:40)到结束(00:02:12)的持续时间。
00:02:00:这是您的剪辑video结束的时间。
-c copy:这是一个通过stream拷贝修剪的选项。 (注意:非常快)

时间格式是: hh:mm:ss

请注意,目前高度答复的答案已经过时,修剪将非常缓慢。 欲了解更多信息,请看官方的ffmpeg 文章 。

  ffmpeg -i movie.mp4 -vf trim=3:8 cut.mp4 

除了从第二个3到第二个8以外的所有东西。