From e0ae7fbdfa73e2989ea60e988eed7ea65746a87b Mon Sep 17 00:00:00 2001 From: shenrongliang <1328040932@qq.com> Date: 星期二, 08 四月 2025 16:03:13 +0800 Subject: [PATCH] 合成无人像视频 --- yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursescenes/vo/AppCourseScenesMegerReqVO.java | 3 +++ yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceUtil.java | 42 +++++++++++++++++++++++++++++------------- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursescenes/vo/AppCourseScenesMegerReqVO.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursescenes/vo/AppCourseScenesMegerReqVO.java index 074e531..8678fec 100644 --- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursescenes/vo/AppCourseScenesMegerReqVO.java +++ b/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: 姝e父, 1: 寮傚父)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") private Integer status; + //鏄惁鏈変汉鍍� + private String hasPerson; + private AppCourseSceneBackgroundsMegerReqVO background; private List<AppCourseSceneComponentsMegerReqVO> components; diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceUtil.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceUtil.java index 749dfe0..143ceec 100644 --- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceUtil.java +++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceUtil.java @@ -128,19 +128,35 @@ 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( - "ffmpeg", - "-i", cover1, - "-i", cover, - "-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(1).getWidth()) + ":" + Math.round(scene.getComponents().get(1).getHeight()) + "[v1];" + - "[bg][v1]overlay=x=" + Math.round(scene.getComponents().get(1).getMarginLeft()) + ":y=" + Math.round(scene.getComponents().get(1).getTop()) + "[img];" + - "[2:v]scale=" + Math.round(scene.getComponents().get(0).getWidth()) + ":" + Math.round(scene.getComponents().get(0).getHeight()) + "[v2];" + - "[img][v2]overlay=x=" + Math.round(scene.getComponents().get(0).getMarginLeft()) + ":y=" + Math.round(scene.getComponents().get(0).getTop()), - newFileName2 - ); + //鍒ゆ柇鏄惁鏈変汉鍍� + ProcessBuilder builder = null; + if("1".equals(scene.getHasPerson())){ + builder = new ProcessBuilder( + "ffmpeg", + "-i", cover1, + "-i", cover, + "-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(1).getWidth()) + ":" + Math.round(scene.getComponents().get(1).getHeight()) + "[v1];" + + "[bg][v1]overlay=x=" + Math.round(scene.getComponents().get(1).getMarginLeft()) + ":y=" + Math.round(scene.getComponents().get(1).getTop()) + "[img];" + + "[2:v]scale=" + Math.round(scene.getComponents().get(0).getWidth()) + ":" + Math.round(scene.getComponents().get(0).getHeight()) + "[v2];" + + "[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; -- Gitblit v1.9.3