我想使用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分钟,但在我的情况下我必须读取一个文件,所以我不知道文件的持续时间。我需要在循环内运行上面的命令或任何其他方式。请帮忙。
答案 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]创建指定持续时间的段,且必须是关键帧间隔的倍数