我想使用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/

10-12 00:11
查看更多