我想使用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分钟,但是在我的情况下,我必须读取文件,所以我不完全知道文件的持续时间。我是否需要在循环内或以其他任何方式运行以上命令。请帮助。
最佳答案
仅当每180秒显示一个关键帧时,分段持续时间才恰好为180秒。
仅当输入视频在分割点处已经具有关键帧时,才可以使用-c copy
。
如果不是,则必须在分割之前重新编码并添加它们:
ffmpeg -i <input> -g 250 -sc_threshold 0 -f segment -segment_time 180 segment_%02d.mp4
哪里:
-g 250
[帧]每250帧添加关键帧(25 fps时为10s)-sc_threshold = 0
避免在场景更改时插入关键帧-segment_time 180
[s]创建指定持续时间的片段,并且必须是关键帧间隔的倍数关于java - 在不知道文件持续时间的情况下分割视频,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40523046/