shenrongliang
2025-04-08 e0ae7fbdfa73e2989ea60e988eed7ea65746a87b
合成无人像视频
已修改2个文件
21 ■■■■■ 文件已修改
yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursescenes/vo/AppCourseScenesMegerReqVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceUtil.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursescenes/vo/AppCourseScenesMegerReqVO.java
@@ -42,6 +42,9 @@
    @Schema(description = "状态 (0: 正常, 1: 异常)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    private Integer status;
    //是否有人像
    private String hasPerson;
    private AppCourseSceneBackgroundsMegerReqVO background;
    private List<AppCourseSceneComponentsMegerReqVO> components;
yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceUtil.java
@@ -128,7 +128,10 @@
            String substring2 = fileName1.substring(0, dotIndex);
            // 合成ppt背景,视频,模板
            //ffmpeg -i 2.png -i 1.mp4 -filter_complex "[0:v]scale=w=ceil(iw/2)*2:h=ceil(ih/2)*2[bg];[1:v]scale=iw/2:ih/2[v1];[bg][v1]overlay=x=0:y=H-h" output.mp4
            ProcessBuilder builder = new ProcessBuilder(
            //判断是否有人像
            ProcessBuilder builder = null;
            if("1".equals(scene.getHasPerson())){
                builder = new ProcessBuilder(
                    "ffmpeg",
                    "-i", cover1,
                    "-i", cover,
@@ -141,6 +144,19 @@
                            "[img][v2]overlay=x=" + Math.round(scene.getComponents().get(0).getMarginLeft()) + ":y=" + Math.round(scene.getComponents().get(0).getTop()),
                    newFileName2
            );
            } else if ("2".equals(scene.getHasPerson())) {
                // 当没有人像时,视频放在 cover 的下层
                builder = new ProcessBuilder(
                        "ffmpeg",
                        "-i", cover1, // 背景图
                        "-i", substring1, // 视频
                        "-filter_complex",
                        "[0:v]scale=" + Math.round(scene.getBackground().getWidth()) + ":" + Math.round(scene.getBackground().getHeight()) + "[bg];" +
                                "[1:v]scale=" + Math.round(scene.getComponents().get(0).getWidth()) + ":" + Math.round(scene.getComponents().get(0).getHeight()) + "[v1];" +
                                "[bg][v1]overlay=x=" + Math.round(scene.getComponents().get(0).getMarginLeft()) + ":y=" + Math.round(scene.getComponents().get(0).getTop()),
                        newFileName2 // 输出文件名
                );
            }
            System.out.println(newFileName2);
            builder.redirectErrorStream(true);
            Process process = null;