拆分视频而不知道文件持续时间

时间:2016-11-10 08:31:37

标签: java ffmpeg

我想使用ffmpeg制作一个视频块,每个块不超过3分钟。我已经阅读了关于ffmpeg的这个命令。

ffmpeg -i output.mp4 -ss 0 -t 180 -c copy outputVideoSegment.mp4

我在我的代码中使用它,如

 String command = "ffmpeg -i videos/testing.vob  -ss 0 -t 180 -c copy outputVideoSegment.mp4";

            ProcessBuilder processBuilder = new ProcessBuilder("/bin/sh", "-c", command);
            try {
                Process process = processBuilder.start();
                process.waitFor(); // to wait for process builder to finish the
                                    // process
            } catch (Exception exception) {
                log.error("Exception occured in making chunks due to " + exception.getCause());
            }

上面的命令工作正常并将视频分成3分钟,但在我的情况下我必须读取一个文件,所以我不知道文件的持续时间。我需要在循环内运行上面的命令或任何其他方式。请帮忙。

1 个答案:

答案 0 :(得分:3)

只有当每180秒存在一个关键帧时,段持续时间才会精确为180秒。

仅当您的输入视频在分割点已有关键帧时,才能使用-c copy

如果不是,则必须重新编码并在拆分之前添加它们:

ffmpeg -i <input> -g 250 -sc_threshold 0 -f segment -segment_time 180 segment_%02d.mp4

其中:

  • -g 250 [frames]每250帧添加一个关键帧(10 fs,25 fps)
  • -sc_threshold = 0避免在场景更改
  • 上插入关键帧
  • -segment_time 180 [s]创建指定持续时间的段,且必须是关键帧间隔的倍数