From 0e7b0e885872459ad27492e84c0dce43a92a465e Mon Sep 17 00:00:00 2001
From: shenrongliang <1328040932@qq.com>
Date: 星期四, 03 四月 2025 09:09:38 +0800
Subject: [PATCH] 配置修改,合成视频

---
 easegen-front/src/views/chooseTemplate/index.vue                                                                                                              |   15 ++++---
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceUtil.java |   75 ++++++++++++++++++++++++++++++-------
 2 files changed, 68 insertions(+), 22 deletions(-)

diff --git a/easegen-front/src/views/chooseTemplate/index.vue b/easegen-front/src/views/chooseTemplate/index.vue
index d06b627..9fa14cf 100644
--- a/easegen-front/src/views/chooseTemplate/index.vue
+++ b/easegen-front/src/views/chooseTemplate/index.vue
@@ -1560,14 +1560,15 @@
             warningStrArr.push(
               `鍦烘櫙<span style="color: red; font-weight: bold;">${i + 1}</span>鏃犳湁鏁堢殑鍙f挱鍐呭`
             )
-          } else {
-            //鍒ゆ柇鍘婚櫎鏍囩鍚庣殑鍐呭闀垮害鏄惁瓒呰繃2000瀛�
-            if (plainText.length > 2000) {
-              warningStrArr.push(
-                `鍦烘櫙<span style="color: red; font-weight: bold;">${i + 1}</span>鍙f挱鍐呭瓒呰繃2000瀛楋紝璇峰噺灏戞垨鎷嗗垎鍦烘櫙`
-              )
-            }
           }
+          // else {
+          //   //鍒ゆ柇鍘婚櫎鏍囩鍚庣殑鍐呭闀垮害鏄惁瓒呰繃2000瀛�
+          //   if (plainText.length > 2000) {
+          //     warningStrArr.push(
+          //       `鍦烘櫙<span style="color: red; font-weight: bold;">${i + 1}</span>鍙f挱鍐呭瓒呰繃2000瀛楋紝璇峰噺灏戞垨鎷嗗垎鍦烘櫙`
+          //     )
+          //   }
+          // }
         }
       }
 
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 a82ee9e..cde4060 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
@@ -26,16 +26,15 @@
 import org.springframework.validation.annotation.Validated;
 
 import java.io.*;
+import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.math.RoundingMode;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.StandardCopyOption;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -97,7 +96,7 @@
         AuditionVO auditionVO = new AuditionVO();
         auditionVO.setHumanId(String.valueOf(digitalHumansDO.getId()));
         for (AppCourseScenesMegerReqVO scene : scenes) {
-
+            //TODO 鍏堝垽鏂槸鍚︽湁澶囨敞鍐呭
             auditionVO.setText(scene.getBackground().getPptRemark());
             String audition = serviceImpl.audition(auditionVO);
             // 鎻愬彇闊抽鏂囦欢鍚嶏紙璺緞鐨勬渶鍚庝竴閮ㄥ垎锛�
@@ -107,32 +106,58 @@
             // 鎻愬彇瑙嗛鏂囦欢鍚嶏紙璺緞鐨勬渶鍚庝竴閮ㄥ垎锛�
             String substring1 = configApi.getConfigValueByKey("easegen.url") + digitalHumansDO.getFixVideoUrl().substring(digitalHumansDO.getFixVideoUrl().lastIndexOf("/"));
             String fileName1 = digitalHumansDO.getFixVideoUrl().substring(digitalHumansDO.getFixVideoUrl().lastIndexOf('/') + 1);
-            String newFileName1 = "D:/heygem_data/face2face/temp/" + fileName1;
+            String newFileName1 = "D:/heygem_data/face2face/temp/"+fileName1;
+            //鑾峰彇鏃堕棿鎴�
+            Date date = new Date();
+            long timestamp = date.getTime();
+            String newFileName2 = "D:/heygem_data/face2face/temp/"+timestamp+".mp4";
             //鑾峰彇PPT鍐呭
-            String cover = scene.getComponents().get(1).getCover();
+            String cover = scene.getComponents().get(1).getSrc();
+            cover = configApi.getConfigValueByKey("easegen.url") + scene.getComponents().get(1).getSrc().substring(scene.getComponents().get(1).getSrc().lastIndexOf("/"));
+
             //鑾峰彇鑳屾櫙
             String cover1 = scene.getBackground().getCover();
+            cover1 = configApi.getConfigValueByKey("easegen.url") + scene.getBackground().getCover().substring(scene.getBackground().getCover().lastIndexOf("/"));
+            // 鍘绘帀鎵╁睍鍚�
+            int dotIndex = fileName1.lastIndexOf('.');
+            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=",scene.getBackground().getWidth().toString(),":",scene.getBackground().getHeight().toString(),"[bg];[1:v]scale=",scene.getComponents().get(1).getWidth().toString(),":",scene.getComponents().get(1).getHeight().toString(),"[v1];[bg][v1]overlay=x=",scene.getComponents().get(1).getMarginLeft().toString(),":y=",scene.getComponents().get(1).getTop().toString(),"[img];[2:v]scale=",scene.getComponents().get(0).getWidth().toString(),":",scene.getComponents().get(0).getHeight().toString(),"[v2];[img][v2]overlay=x=",scene.getComponents().get(0).getMarginLeft().toString(),":y=",scene.getComponents().get(0).getTop().toString(),newFileName1
+                    "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
             );
+            System.out.println(newFileName2);
             builder.redirectErrorStream(true);
             Process process = null;
             try {
                 process = builder.start();
+                // 璇诲彇 FFmpeg 杈撳嚭锛堝彲閫夛級
+                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+                System.out.println(builder.command());
+                String line;
+                while ((line = reader.readLine()) != null) {
+                    System.out.println(line);
+                }
+
             } catch (IOException e) {
                 throw new RuntimeException(e);
             }
 
-            // 璇诲彇 FFmpeg 杈撳嚭锛堝彲閫夛級
-            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
             try {
                 Files.copy(Path.of(substring), Path.of(newFileName), StandardCopyOption.REPLACE_EXISTING);
             } catch (IOException e) {
                 throw new RuntimeException(e);
             }
-
             //鏈�澶ч噸璇曟鏁�
             int maxRetries = 3;
             // 褰撳墠閲嶈瘯娆℃暟
@@ -145,8 +170,8 @@
                     HashMap<String, Object> objectObjectHashMap = new HashMap<>();
                     //闊抽璺緞
                     objectObjectHashMap.put("audio_url", fileName);
-                    //瑙嗛璺緞锛堟棤澹帮級
-                    objectObjectHashMap.put("video_url", fileName1);
+                    //瑙嗛璺緞
+                    objectObjectHashMap.put("video_url",timestamp+".mp4");
                     //鍞竴key锛堢敤浜庢煡璇級
                     String code = RandomUtil.randomString(32);
                     //鍥哄畾鍊�
@@ -191,10 +216,10 @@
                     String result = getResult(code);
                     result = "D:/heygem_data/face2face/temp" + result;
                     videoUrls.add(result);
+                    System.out.println("椹卞姩瑙嗛鍚�"+result);
                     // 濡傛灉鎴愬姛锛屾洿鏂扮姸鎬佷负1锛堟垚鍔燂級
                     courseMediaDO.setStatus(1);
                     courseMediaMapper.updateById(courseMediaDO);
-                    success = true;
                 } catch (Exception e) {
                     retryCount++;
                     if (retryCount >= maxRetries) {
@@ -213,7 +238,9 @@
                         break;
                     }
                 }
+                success = true;
             }
+
         }
         String fileListPath = "D:/heygem_data/face2face/temp/filelist.txt";
         try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileListPath))) {
@@ -224,13 +251,24 @@
         } catch (IOException e) {
             e.printStackTrace();
         }
+        //鍘绘帀updateReqVO.getName()涓殑绌烘牸鍜岀壒娈婂瓧绗�
+        String newFileName = updateReqVO.getName().replaceAll("[\\s\\p{Punct}]", "");
         ProcessBuilder builder = new ProcessBuilder(
-                "ffmpeg", "-f", "concat", "-safe","0", "-i", "DD:/heygem_data/face2face/temp/filelist.txt", "-c", "copy", "D:/heygem_data/face2face/temp/鐢熸垚瑙嗛.mp4"
+                "ffmpeg", "-f", "concat", "-safe","0", "-i",fileListPath , "-c", "copy", "D:/heygem_data/face2face/temp/"+"111111.mp4"
         );
         builder.redirectErrorStream(true);
         Process process = null;
         try {
             process = builder.start();
+            // 璇诲彇 FFmpeg 杈撳嚭锛堝彲閫夛級
+            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+            System.out.println(builder.command());
+            System.out.println("鏈�缁堣棰戝凡鐢熸垚");
+            String line;
+            while ((line = reader.readLine()) != null) {
+                System.out.println(line);
+            }
+
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
@@ -238,6 +276,13 @@
 
     }
 
+    // 鍥涜垗浜斿叆鏂规硶
+    private static int round(double value) {
+        return BigDecimal.valueOf(value)
+                .setScale(0, RoundingMode.HALF_UP)
+                .intValue();
+    }
+
     public String getResult(String taskCode) {
         // 浣跨敤 do-while 寰幆杞浠诲姟鐘舵��
         // 瀹氫箟鍙橀噺瀛樺偍杩斿洖缁撴灉

--
Gitblit v1.9.3