FFMPEG 没有按预期“切割”

mor*_*dew 6 java video ffmpeg video-processing

我正在通过一个简单的 system.process 使用 FFMPEG(来自 Java 应用程序)并尝试将视频切成块。我试图将其切成 10 秒的增量。我的 FFMPEG 命令如下所示:

ffmpeg -i SampleVideo.mp4 -ss 00:00:00.00 -t 00:00:10.00 -strict -2 1438458522836/1438458522836_0.mp4
ffmpeg -i SampleVideo.mp4 -ss 00:00:10.01 -t 00:00:20.00 -strict -2 1438458522836/1438458536306_1.mp4
ffmpeg -i SampleVideo.mp4 -ss 00:00:20.01 -t 00:00:30.00 -strict -2 1438458522836/1438458546042_2.mp4
ffmpeg -i SampleVideo.mp4 -ss 00:00:30.01 -t 00:00:40.00 -strict -2 1438458522836/1438458561165_3.mp4
ffmpeg -i SampleVideo.mp4 -ss 00:00:40.01 -t 00:00:50.00 -strict -2 1438458522836/1438458577187_4.mp4
ffmpeg -i SampleVideo.mp4 -ss 00:00:50.01 -t 00:01:00.00 -strict -2 1438458522836/1438458587935_5.mp4
Run Code Online (Sandbox Code Playgroud)

他们看起来对我来说是正确的,但我的视频没有以 10 秒的增量出现。他们似乎在随机地点“分裂”。关于我做错了什么的任何想法?

以供参考:

video 0 == 10 seconds
video 1 == 20 seconds
Video 2 == 30 seconds
Video 3 == 32 seconds
Video 4 == 22 seconds
Video 5 == 12 seconds
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。

小智 5

FFMPEG 文档中所述

-ss 位置(输入/输出)当用作输入选项(before -i)时,在这个输入文件中寻找位置。请注意,在大多数格式中,无法精确查找,因此 ffmpeg 将查找位置之前最近的查找点。当转码和 -accurate_seek 启用(默认)时,搜索点和位置之间的这个额外段将被解码并丢弃。在进行流复制或使用 -noaccurate_seek 时,它将被保留。

当用作输出选项时(在输出文件名之前),解码但丢弃输入,直到时间戳到达位置。

位置可以以秒为单位,也可以以hh:mm:ss[.xxx]形式为单位。

所以,你不会得到一个确切的起点,但由于-t当指针到达指定时间时停止“监听”,你不会得到统一的时间,但它们都会在你想要的时候结束。