javacv 切片问题

问题遇到的现象和发生背景

为什么我使用javacv 的 切片设置的是10秒 第二个开始后每个视频都会叠加10秒?

问题相关代码,请勿粘贴截图
package com.alex.test;

import javax.swing.JFrame;

import org.bytedeco.ffmpeg.global.avcodec;
import org.bytedeco.javacv.CanvasFrame;
import org.bytedeco.javacv.FFmpegFrameFilter;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.FFmpegFrameRecorder;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.FrameRecorder.Exception;

/**
 * 视频切片制作
 * 
 * @author eguid
 */
public class SegmentVideoRecorder {

    /**
     *
     * @param input         输入流或者对应文件
     * @param output        输出流或者对应文件
     * @param segmentTime   对应分段
     * @param width         宽
     * @param height        高
     * @param frameRate     码率
     * @param filterContent 过滤主题(后面有机会说)
     * @return
     * @throws Exception
     */
    public static boolean recordSegment(String input, String output, Integer segmentTime, Integer width, Integer height,
            Integer frameRate, String filterContent) {
        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(input);
        try {
            grabber.start();
            if (width == null || height == null) {
                width = grabber.getImageWidth();
                height = grabber.getImageHeight();
            }
            // 是否录制音频(0:不录制/1:录制)
            FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(output, width, height, 1);
            recorder.setFormat("segment");
            recorder.setOption("segment_time", segmentTime.toString());
            recorder.setOption("segment_list_flags", "live");
            recorder.setOption("segment_atclocktime", "1");
            recorder.setOption("break_non_keyframes", "1");
            recorder(grabber, recorder, segmentTime, width, height, frameRate, filterContent);
        } catch (org.bytedeco.javacv.FrameGrabber.Exception | Exception | org.bytedeco.javacv.FrameFilter.Exception e) {
            e.printStackTrace();
        }
        return true;
    }

    /**
     * 录像核心
     * 
     * @param grabber
     * @param recorder
     * @param segmentTime
     * @param width
     * @param height
     * @param frameRate
     * @param filterContent
     * @throws org.bytedeco.javacv.FFmpegFrameFilter.Exception
     * @throws org.bytedeco.javacv.FrameFilter.Exception
     * @throws org.bytedeco.javacv.FrameGrabber.Exception
     */
    public static void recorder(FFmpegFrameGrabber grabber, FFmpegFrameRecorder recorder, Integer segmentTime,
            Integer width, Integer height, Integer frameRate, String filterContent)
            throws Exception, org.bytedeco.javacv.FrameFilter.Exception, org.bytedeco.javacv.FrameGrabber.Exception {

////       //默认10秒生成一个文件
//        if (segmentTime == null) {
//            segmentTime = 10;
//        }
//        if (frameRate == null) {
//            frameRate = 25;
//        }
        // 生成模式:live(实时生成)
//        
        // 设置帧率
        recorder.setFrameRate(grabber.getFrameRate());
        // 设置gop
//        recorder.setGopSize((int)(grabber.getFrameRate() * segmentTime));
        recorder.setVideoBitrate(grabber.getVideoBitrate());
        recorder.setAudioBitrate(grabber.getAudioBitrate());
        // 这种方式也可以
        recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
        // 设置音频编码
        recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);

        recorder.start();
        FFmpegFrameFilter filter = null;
//       if(StringUtils.hasLength(filterContent)) {
//          // filter= RecorderLogoUtils.overlayChar(filterContent, grabber);
//       }

        Frame frame;
        // grab 混合帧。
        for (; (frame = grabber.grab()) != null;) {
            try {
                if (filter != null) {
                    // 把数据放到filter里面
                    filter.push(frame);
                    // 取出过滤器合并后的图像
                    Frame filterFrame = filter.pull();
                    recorder.record(filterFrame);
                } else {
                    // 录制/推流
                    recorder.record(frame);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
//       if(filter != null) {
//           filter.close();
//       }
        recorder.close();// close包含stop和release方法。录制文件必须保证最后执行stop()方法,才能保证文件头写入完整,否则文件损坏。
        grabber.close();// close包含stop和release方法
    }

    public static void main(String[] args) {
        String input = "E:\\视频采集工具\\作品保存\\作者作品\\龙帅食堂\\2022年\\第2季度\\7091152418955693342-哇塞!青苔战斧牛排?复刻高级餐厅的招牌!香草脆皮战斧牛排味道怎么样?把春天留住 方太蒸烤烹饪机.mp4";
        String output = "E:\\视频采集工具\\作品保存\\作者作品\\龙帅食堂\\2022年\\第2季度\\output\\eguid%03d.mp4";
        recordSegment(input, output, 10, null, null, null, null);
    }

}

来点积分