康鲁杰
2025-03-31 91a1c9bf1fc1e7b711655d987cfab54445362ef6
扣视频
已修改5个文件
29 ■■■■ 文件已修改
yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/digitalhumans/vo/DigitalHumansSaveReqVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/digitalhumans/vo/DigitalHumansTrailVO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/digitalhumans/DigitalHumansDO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/digitalhumans/DigitalHumansServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/digitalhumans/DigitalHumansServiceUtil.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/digitalhumans/vo/DigitalHumansSaveReqVO.java
@@ -69,5 +69,6 @@
    private String fixPictureUrl;
    //修复视频
    private String fixVideoUrl;
    //是否为透明背景视频 1是 2否
    private Integer isTransparent;
}
yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/digitalhumans/vo/DigitalHumansTrailVO.java
@@ -14,5 +14,6 @@
    private String useModel;
    private String accountId;
    private String videoUrl;
    private Integer isTransparent;
}
yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/digitalhumans/DigitalHumansDO.java
@@ -134,5 +134,6 @@
    private String referenceAudioText;
    private String asrFormatAudioUrl;
    private Integer isTransparent;
}
yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/digitalhumans/DigitalHumansServiceImpl.java
@@ -60,6 +60,10 @@
        DigitalHumansDO updateObj = BeanUtils.toBean(updateReqVO, DigitalHumansDO.class);
        digitalHumansMapper.updateById(updateObj);
        if (updateObj.getStatus() == 2){
            //受理扣视频
            digitalHumansServiceUtil.remoteHeyGemMatting(transferVO(updateObj.getId()));
        }
        //异步训练模型
        if (updateObj.getStatus() == 3){
            digitalHumansServiceUtil.remoteHeyGemTrain(transferVO(updateObj.getId()));
@@ -72,6 +76,10 @@
        DigitalHumansDO digitalHumans = this.getDigitalHumans(id);
        DigitalHumansTrailVO build = DigitalHumansTrailVO.builder().build();
        if (StrUtil.isBlank(digitalHumans.getVideoUrl())) build.setVideoUrl(digitalHumans.getVideoUrl());
        if (StrUtil.isBlank(digitalHumans.getFixVideoUrl())) build.setFixVideoUrl(digitalHumans.getFixVideoUrl());
        if (digitalHumans.getIsTransparent() != null) {
            build.setIsTransparent(digitalHumans.getIsTransparent());
        }
        BeanUtils.copyProperties(digitalHumans, build);
        build.setAccountId(digitalHumans.getCreator());
        return build;
yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/digitalhumans/DigitalHumansServiceUtil.java
@@ -60,6 +60,10 @@
    private ConfigApi configApi;
    @Resource
    private FileApi fileApi;
    public void remoteHeyGemMatting(DigitalHumansTrailVO digitalHumansTrailVO) {
        System.out.println(digitalHumansTrailVO);
    }
    @Async
    public void remoteHeyGemTrain(DigitalHumansTrailVO digitalHumansTrailVo){
        String origin_audio = configApi.getConfigValueByKey(HEYGEM_VOICE_DATA) + "/origin_audio";
@@ -147,9 +151,8 @@
                    throw new RuntimeException(e);
                }
                String picFilePath = Paths.get(pngPath , picFileName).toString();
                int frameTime = 3; // 截取第 5 秒的画面
                extractFrame(modelFilePath, picFilePath, frameTime);
                extractFrame(modelFilePath, picFilePath);
                byte[] fileContent = Files.readAllBytes(Paths.get(picFilePath)); // 读取文件内容
                String fileUrl = fileApi.createFile(fileContent);
@@ -220,10 +223,11 @@
     * @param outputImagePath 输出图片路径
     * @param frameTime 截取的时间点
     */
    public static void extractFrame(String videoPath, String outputImagePath, int frameTime) {
    public static void extractFrame(String videoPath, String outputImagePath) {
        ProcessBuilder processBuilder = new ProcessBuilder(
                "ffmpeg","-i", videoPath,"-ss", String.valueOf(frameTime),
                "-vframes", "1",
                "ffmpeg", "-i", videoPath,
                "-vf", "select=eq(n\\,0)", // 选择第0帧
                "-vsync", "vfr", // 防止重复帧
                "-q:v", "2",
                outputImagePath
        );
@@ -390,4 +394,6 @@
        }
    }
}