瀏覽代碼

修改抽帧和字幕生成

xueyiming 4 月之前
父節點
當前提交
889bc7f9ec

+ 8 - 0
tencent-ad-server/src/main/java/com/tzld/piaoquan/tencentad/common/constants/OtherServerURL.java

@@ -0,0 +1,8 @@
+package com.tzld.piaoquan.tencentad.common.constants;
+
+public interface OtherServerURL {
+
+    String POST_VIDEO_DETAIL_URL = "https://longvideoapi.piaoquantv.com/longvideoapi/openapi/video/batchSelectVideoInfo";
+
+
+}

+ 1 - 1
tencent-ad-server/src/main/java/com/tzld/piaoquan/tencentad/controller/AdVideoController.java

@@ -86,7 +86,7 @@ public class AdVideoController {
         return adVideoImageService.uploadMuseImage(file, adVideoId);
     }
 
-    @PostMapping("/image/update")
+    @PostMapping("/image/submit")
     public CommonResponse<Void> getAdVideoImageList(@RequestBody AdVideoImageParam adVideoImageParam) {
         return adVideoImageService.updateAdVideoImage(adVideoImageParam);
     }

+ 1 - 4
tencent-ad-server/src/main/java/com/tzld/piaoquan/tencentad/model/bo/ImageParam.java

@@ -19,8 +19,5 @@ public class ImageParam {
     private Color color;
     //字体和大小
     private Font font;
-    //所在图片的x坐标
-    private int x;
-    //所在图片的y坐标
-    private int y;
+
 }

+ 11 - 0
tencent-ad-server/src/main/java/com/tzld/piaoquan/tencentad/model/po/AdMuseTask.java

@@ -15,6 +15,8 @@ public class AdMuseTask {
 
     private String dimensionSize;
 
+    private Integer outputImageNum;
+
     private String img2imgDesc;
 
     private String text2imgDesc;
@@ -83,6 +85,14 @@ public class AdMuseTask {
         this.dimensionSize = dimensionSize;
     }
 
+    public Integer getOutputImageNum() {
+        return outputImageNum;
+    }
+
+    public void setOutputImageNum(Integer outputImageNum) {
+        this.outputImageNum = outputImageNum;
+    }
+
     public String getImg2imgDesc() {
         return img2imgDesc;
     }
@@ -175,6 +185,7 @@ public class AdMuseTask {
         sb.append(", accountId=").append(accountId);
         sb.append(", similarity=").append(similarity);
         sb.append(", dimensionSize=").append(dimensionSize);
+        sb.append(", outputImageNum=").append(outputImageNum);
         sb.append(", img2imgDesc=").append(img2imgDesc);
         sb.append(", text2imgDesc=").append(text2imgDesc);
         sb.append(", subtitle=").append(subtitle);

+ 60 - 0
tencent-ad-server/src/main/java/com/tzld/piaoquan/tencentad/model/po/AdMuseTaskExample.java

@@ -496,6 +496,66 @@ public class AdMuseTaskExample {
             return (Criteria) this;
         }
 
+        public Criteria andOutputImageNumIsNull() {
+            addCriterion("output_image_num is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOutputImageNumIsNotNull() {
+            addCriterion("output_image_num is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOutputImageNumEqualTo(Integer value) {
+            addCriterion("output_image_num =", value, "outputImageNum");
+            return (Criteria) this;
+        }
+
+        public Criteria andOutputImageNumNotEqualTo(Integer value) {
+            addCriterion("output_image_num <>", value, "outputImageNum");
+            return (Criteria) this;
+        }
+
+        public Criteria andOutputImageNumGreaterThan(Integer value) {
+            addCriterion("output_image_num >", value, "outputImageNum");
+            return (Criteria) this;
+        }
+
+        public Criteria andOutputImageNumGreaterThanOrEqualTo(Integer value) {
+            addCriterion("output_image_num >=", value, "outputImageNum");
+            return (Criteria) this;
+        }
+
+        public Criteria andOutputImageNumLessThan(Integer value) {
+            addCriterion("output_image_num <", value, "outputImageNum");
+            return (Criteria) this;
+        }
+
+        public Criteria andOutputImageNumLessThanOrEqualTo(Integer value) {
+            addCriterion("output_image_num <=", value, "outputImageNum");
+            return (Criteria) this;
+        }
+
+        public Criteria andOutputImageNumIn(List<Integer> values) {
+            addCriterion("output_image_num in", values, "outputImageNum");
+            return (Criteria) this;
+        }
+
+        public Criteria andOutputImageNumNotIn(List<Integer> values) {
+            addCriterion("output_image_num not in", values, "outputImageNum");
+            return (Criteria) this;
+        }
+
+        public Criteria andOutputImageNumBetween(Integer value1, Integer value2) {
+            addCriterion("output_image_num between", value1, value2, "outputImageNum");
+            return (Criteria) this;
+        }
+
+        public Criteria andOutputImageNumNotBetween(Integer value1, Integer value2) {
+            addCriterion("output_image_num not between", value1, value2, "outputImageNum");
+            return (Criteria) this;
+        }
+
         public Criteria andImg2imgDescIsNull() {
             addCriterion("img2img_desc is null");
             return (Criteria) this;

+ 4 - 2
tencent-ad-server/src/main/java/com/tzld/piaoquan/tencentad/model/vo/AdVideoImageParam.java

@@ -11,15 +11,17 @@ public class AdVideoImageParam {
 
     private List<Long> ids;
 
-    private Integer status;
-
     private Integer similarity;
 
     private String dimensionSize;
 
+    private String img2imgDesc;
+
     private String text2imgDesc;
 
     private String subtitle;
 
+    private Integer outputImageNum;
+
     private String accountId;
 }

+ 38 - 4
tencent-ad-server/src/main/java/com/tzld/piaoquan/tencentad/service/impl/AdBaseVideoServiceImpl.java

@@ -1,8 +1,11 @@
 package com.tzld.piaoquan.tencentad.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.tzld.piaoquan.tencentad.common.base.CommonResponse;
 import com.tzld.piaoquan.tencentad.common.base.ExceptionCodeEnum;
 import com.tzld.piaoquan.tencentad.common.enums.AdBaseVideoStatusEnum;
+import com.tzld.piaoquan.tencentad.component.HttpPoolClient;
 import com.tzld.piaoquan.tencentad.dao.mapper.AdBaseVideoMapper;
 import com.tzld.piaoquan.tencentad.model.po.AdBaseVideo;
 import com.tzld.piaoquan.tencentad.model.po.AdBaseVideoExample;
@@ -12,20 +15,25 @@ import com.tzld.piaoquan.tencentad.service.AdBaseVideoService;
 import com.tzld.piaoquan.tencentad.service.AdVideoService;
 import com.tzld.piaoquan.tencentad.utils.DateUtils;
 import com.tzld.piaoquan.tencentad.utils.page.Page;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
+import java.io.IOException;
+import java.util.*;
 
+import static com.tzld.piaoquan.tencentad.common.constants.OtherServerURL.POST_VIDEO_DETAIL_URL;
+
+@Slf4j
 @Service
 public class AdBaseVideoServiceImpl implements AdBaseVideoService {
 
+    @Autowired
+    private HttpPoolClient httpPoolClient;
+
     @Autowired
     private AdBaseVideoMapper adBaseVideoMapper;
 
@@ -133,4 +141,30 @@ public class AdBaseVideoServiceImpl implements AdBaseVideoService {
         updateAdBaseVideo.setStatus(status);
         adBaseVideoMapper.updateByPrimaryKeySelective(updateAdBaseVideo);
     }
+
+    public Map<Long, AdBaseVideo> getVideoDetail(Set<Long> videoIdList) {
+        try {
+            Map<Long, AdBaseVideo> map = new HashMap<>();
+            JSONObject params = new JSONObject();
+            params.put("videoIdList", videoIdList);
+            String post = httpPoolClient.post(POST_VIDEO_DETAIL_URL, params.toJSONString());
+            JSONObject res = JSONObject.parseObject(post);
+            JSONArray data = res.getJSONArray("data");
+            for (int i = 0; i < data.size(); i++) {
+                AdBaseVideo adBaseVideo = new AdBaseVideo();
+                JSONObject jsonObject = data.getJSONObject(i);
+                Long videoId = jsonObject.getLong("id");
+
+                String coverImgPath = jsonObject.getJSONObject("coverImg").getString("coverImgPath");
+                String title = jsonObject.getString("title");
+                adBaseVideo.setVideoCover(coverImgPath);
+
+                map.put(videoId, adBaseVideo);
+            }
+            return map;
+        } catch (IOException e) {
+            log.error("MessageAttachmentServiceImpl getVideDetail error", e);
+        }
+        return new HashMap<>();
+    }
 }

+ 8 - 1
tencent-ad-server/src/main/java/com/tzld/piaoquan/tencentad/service/impl/AdMuseTaskServiceImpl.java

@@ -64,6 +64,9 @@ public class AdMuseTaskServiceImpl implements AdMuseTaskService {
                     accessToken, System.currentTimeMillis() / 1000, UUID.randomUUID().toString().replaceAll("-", ""));
             JSONObject param = new JSONObject();
             param.put("account_id", accountId);
+            if (adVideoImageParam.getOutputImageNum() != null) {
+                param.put("output_image_num", adVideoImageParam.getOutputImageNum());
+            }
             if (StringUtils.isNotEmpty(adVideoImageParam.getText2imgDesc())) {
                 param.put("task_type", "MUSE_AI_TASK_TYPE_TEXT2IMG");
                 JSONObject text2img = new JSONObject();
@@ -99,8 +102,13 @@ public class AdMuseTaskServiceImpl implements AdMuseTaskService {
                 adMuseTask.setTaskType(data.getString("task_type"));
                 adMuseTask.setAccountId(accountId);
                 adMuseTask.setAdVideoId(adVideoImage.getAdVideoId());
+                adMuseTask.setOutputImageNum(adVideoImageParam.getOutputImageNum());
                 adMuseTask.setAdVideoImageId(adVideoImage.getId());
                 adMuseTask.setSubtitle(adVideoImageParam.getSubtitle());
+                adMuseTask.setDimensionSize(adVideoImageParam.getDimensionSize());
+                adMuseTask.setSimilarity(adVideoImageParam.getSimilarity());
+                adMuseTask.setImg2imgDesc(adVideoImageParam.getImg2imgDesc());
+                adMuseTask.setText2imgDesc(adVideoImageParam.getText2imgDesc());
                 adMuseTaskMapper.insertSelective(adMuseTask);
             }
         } catch (Exception e) {
@@ -174,7 +182,6 @@ public class AdMuseTaskServiceImpl implements AdMuseTaskService {
         String targetImgPath = imagePath + "/" + UUID.randomUUID() + ".jpg";
         ImageParam imageParam = new ImageParam();
         imageParam.setFont(new Font("微软雅黑", Font.PLAIN, 48));
-        imageParam.setColor(new Color(102, 102, 102));
         imageParam.setText(subtitle);
         return ImageUtils.writeImageFromUrl(url, targetImgPath, imageParam);
     }

+ 0 - 19
tencent-ad-server/src/main/java/com/tzld/piaoquan/tencentad/service/impl/AdVideoServiceImpl.java

@@ -120,25 +120,6 @@ public class AdVideoServiceImpl implements AdVideoService {
         }
     }
 
-    public static void main(String[] args) {
-        String url = "http://rescdn.yishihui.com/longvideo/multitranscode/video/vpc/20191121/10426977qXdqkgYwJ8eJp8fFEb20200804131055256947746-1LD.mp4";
-        String imageFolder = "/Users/shimeng/Desktop/image_path" + "/" + UUID.randomUUID();
-        File dir = new File(imageFolder);
-        if (!dir.exists()) {
-            boolean mkdir = dir.mkdir();
-            if (!mkdir) {
-                return;
-            }
-        }
-        String imagePath = imageFolder + "/" + "%04d.jpg";
-        FfmpegUtil.getTargetThumbnail(url, imagePath);
-        File[] fileList = dir.listFiles();
-        if (fileList == null) {
-            return;
-        }
-    }
-
-
     //抽取图片
     public void buildVideoImage(AdVideo adVideo) {
         String imageFolder = imagePath + "/" + UUID.randomUUID();

+ 15 - 4
tencent-ad-server/src/main/java/com/tzld/piaoquan/tencentad/utils/FfmpegUtil.java

@@ -14,13 +14,24 @@ public class FfmpegUtil {
     public static boolean getTargetThumbnail(String url, String targetPath) {
         try {
             try (ProcessWrapper ffmpeg = new DefaultFFMPEGLocator().createExecutor();) {
+//                ffmpeg.addArgument("-i");
+//                ffmpeg.addArgument(url);
+//                ffmpeg.addArgument("-filter:v");
+//                ffmpeg.addArgument("select='eq(pict_type,I)+gt(scene,0.11)',showinfo");
+//                ffmpeg.addArgument("-vsync");
+//                ffmpeg.addArgument("vfr");
+//                ffmpeg.addArgument(targetPath);
                 ffmpeg.addArgument("-i");
                 ffmpeg.addArgument(url);
-                ffmpeg.addArgument("-filter:v");
-                ffmpeg.addArgument("select='eq(pict_type,I)+gt(scene,0.11)',showinfo");
+                ffmpeg.addArgument("-g");
+                ffmpeg.addArgument("1"); // 设置 GOP 大小为 1
+                ffmpeg.addArgument("-sc_threshold");
+                ffmpeg.addArgument("100"); // 设置场景切换阈值
+                ffmpeg.addArgument("-vf");
+                ffmpeg.addArgument("select='eq(pict_type,I)'"); // 选择关键帧
                 ffmpeg.addArgument("-vsync");
-                ffmpeg.addArgument("vfr");
-                ffmpeg.addArgument(targetPath);
+                ffmpeg.addArgument("vfr"); // 变帧率
+                ffmpeg.addArgument(targetPath); // 输出文件
                 ffmpeg.execute();
                 try (BufferedReader br = new BufferedReader(new InputStreamReader(ffmpeg.getErrorStream()))) {
                     blockFfmpeg(br);

+ 98 - 6
tencent-ad-server/src/main/java/com/tzld/piaoquan/tencentad/utils/ImageUtils.java

@@ -26,8 +26,8 @@ public class ImageUtils {
         ImageParam imageParam = new ImageParam();
         imageParam.setFont(new Font("微软雅黑", Font.PLAIN, 48));
         imageParam.setColor(new Color(102, 102, 102));
-        imageParam.setText("这是一个非常长的字幕");
-        System.out.println(writeImageFromUrl("http://videomaker-30171.sz.gfp.tencent-cloud.com/381af314920e2d856f283ccf237eaec05917018d", "/Users/shimeng/Desktop/image_path/sss.jpg", imageParam));
+        imageParam.setText("清朝图片");
+        System.out.println(writeImageFromUrl("https://videomaker-30171.sz.gfp.tencent-cloud.com/aigc/20241218135008_h8hB_OVLs.jpg", "/Users/shimeng/Desktop/image_path/sss.jpg", imageParam));
     }
 
     public static String writeImageFromUrl(String srcImgUrl, String targetImgPath, ImageParam imageParam) {
@@ -38,6 +38,10 @@ public class ImageUtils {
             int imageWidth = srcImg.getWidth(null); // 获取图片的宽
             int imageHeight = srcImg.getHeight(null); // 获取图片的高
 
+            System.out.println(imageWidth);
+            System.out.println(imageHeight);
+
+
             // 创建一个新的图片,宽度和高度加上文字的高度
             BufferedImage newImage = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
             Graphics2D g2d = newImage.createGraphics();
@@ -46,15 +50,50 @@ public class ImageUtils {
             g2d.drawImage(srcImg, 0, 0, null);
 
             // 设置字体和颜色
-            g2d.setFont(new Font("Arial", Font.BOLD, 48)); // 字体和大小
-            g2d.setColor(Color.BLACK); // 字体颜色
+            g2d.setFont(imageParam.getFont()); // 字体和大小
+
+            String text = imageParam.getText();
+
 
             // 计算文字的宽度和位置
             FontMetrics fontMetrics = g2d.getFontMetrics();
             int textWidth = fontMetrics.stringWidth(imageParam.getText());
             int x = (imageWidth - textWidth) / 2; // 中间对齐
-            int y = imageHeight - 50; // 在图片下方添加文字
-
+            int y = imageHeight - 50; // 在图片下方添加文字]
+
+            int fontSize = imageParam.getFont().getSize();
+            Color averageColor = getAverageColor(newImage, x, y - fontSize, textWidth, fontSize);
+            Color contrastColor = getContrastColor(averageColor);
+            if (isDarkColor(contrastColor)) {
+                // 绘制边框(轮廓)
+                g2d.setColor(Color.WHITE); // 边框颜色
+            } else {
+                // 绘制边框(轮廓)
+                g2d.setColor(Color.BLACK); // 边框颜色
+            }
+            g2d.drawString(text, x, y + 1); // 偏移绘制阴影
+            g2d.drawString(text, x, y + 2); // 偏移绘制阴影
+            g2d.drawString(text, x, y - 1); // 偏移绘制阴影
+            g2d.drawString(text, x, y - 2); // 偏移绘制阴影
+            g2d.drawString(text, x + 1, y + 1); // 偏移绘制阴影
+            g2d.drawString(text, x + 1, y + 2); // 偏移绘制阴影
+            g2d.drawString(text, x + 1, y - 1); // 偏移绘制阴影
+            g2d.drawString(text, x + 1, y - 2); // 偏移绘制阴影
+            g2d.drawString(text, x + 2, y + 1); // 偏移绘制阴影
+            g2d.drawString(text, x + 2, y + 2); // 偏移绘制阴影
+            g2d.drawString(text, x + 2, y - 1); // 偏移绘制阴影
+            g2d.drawString(text, x + 2, y - 2); // 偏移绘制阴影
+            g2d.drawString(text, x - 1, y + 1); // 偏移绘制阴影
+            g2d.drawString(text, x - 1, y + 2); // 偏移绘制阴影
+            g2d.drawString(text, x - 1, y - 1); // 偏移绘制阴影
+            g2d.drawString(text, x - 1, y - 2); // 偏移绘制阴影
+            g2d.drawString(text, x - 2, y + 1); // 偏移绘制阴影
+            g2d.drawString(text, x - 2, y + 2); // 偏移绘制阴影
+            g2d.drawString(text, x - 2, y - 1); // 偏移绘制阴影
+            g2d.drawString(text, x - 2, y - 2); // 偏移绘制阴影
+
+
+            g2d.setColor(contrastColor);// 字体颜色
             // 添加字幕
             g2d.drawString(imageParam.getText(), x, y);
             g2d.dispose();
@@ -68,6 +107,59 @@ public class ImageUtils {
         return null;
     }
 
+    private static boolean isDarkColor(Color color) {
+        // 获取 RGB 分量
+        int r = color.getRed();
+        int g = color.getGreen();
+        int b = color.getBlue();
+
+        // 计算亮度
+        double brightness = 0.299 * r + 0.587 * g + 0.114 * b;
+
+        // 判断是否为深色
+        return brightness < 128; // 128 是判断深浅的阈值
+    }
+
+    private static Color getContrastColor(Color color) {
+        // 计算对比色,这里简单地通过反转颜色来实现
+        int r = 255 - color.getRed();
+        int g = 255 - color.getGreen();
+        int b = 255 - color.getBlue();
+        return new Color(r, g, b);
+    }
+
+    private static Color getAverageColor(BufferedImage image, int x, int y, int width, int height) {
+        System.out.println(x);
+        System.out.println(y);
+        System.out.println(x + width);
+        System.out.println(y + height);
+        long red = 0, green = 0, blue = 0;
+        int count = 0;
+
+        // 遍历指定区域
+        for (int i = x; i < x + width; i++) {
+            for (int j = y; j < y + height; j++) {
+                // 确保不超出图像边界
+                if (i >= 0 && i < image.getWidth() && j >= 0 && j < image.getHeight()) {
+                    Color color = new Color(image.getRGB(i, j));
+                    red += color.getRed();
+                    green += color.getGreen();
+                    blue += color.getBlue();
+                    count++;
+                }
+            }
+        }
+
+        // 计算平均颜色
+        if (count > 0) {
+            red /= count;
+            green /= count;
+            blue /= count;
+        }
+
+        return new Color((int) red, (int) green, (int) blue);
+    }
+
 
     /**
      * 图片URL转Base64编码

+ 4 - 0
tencent-ad-server/src/main/java/com/tzld/piaoquan/tencentad/utils/OSSUploader.java

@@ -33,4 +33,8 @@ public class OSSUploader {
             ossClient.shutdown();
         }
     }
+
+    public static void main(String[] args) {
+        System.out.println(uploadToOSS("/Users/shimeng/Desktop/1.jpg"));
+    }
 }

+ 26 - 11
tencent-ad-server/src/main/resources/mapper/AdMuseTaskMapper.xml

@@ -8,6 +8,7 @@
     <result column="account_id" jdbcType="VARCHAR" property="accountId" />
     <result column="similarity" jdbcType="INTEGER" property="similarity" />
     <result column="dimension_size" jdbcType="VARCHAR" property="dimensionSize" />
+    <result column="output_image_num" jdbcType="INTEGER" property="outputImageNum" />
     <result column="img2img_desc" jdbcType="VARCHAR" property="img2imgDesc" />
     <result column="text2img_desc" jdbcType="VARCHAR" property="text2imgDesc" />
     <result column="subtitle" jdbcType="VARCHAR" property="subtitle" />
@@ -78,9 +79,9 @@
     </where>
   </sql>
   <sql id="Base_Column_List">
-    id, ad_video_id, ad_video_image_id, account_id, similarity, dimension_size, img2img_desc, 
-    text2img_desc, subtitle, `status`, task_id, task_type, task_status, is_delete, create_time, 
-    update_time
+    id, ad_video_id, ad_video_image_id, account_id, similarity, dimension_size, output_image_num, 
+    img2img_desc, text2img_desc, subtitle, `status`, task_id, task_type, task_status, 
+    is_delete, create_time, update_time
   </sql>
   <select id="selectByExample" parameterType="com.tzld.piaoquan.tencentad.model.po.AdMuseTaskExample" resultMap="BaseResultMap">
     select
@@ -118,16 +119,16 @@
   <insert id="insert" parameterType="com.tzld.piaoquan.tencentad.model.po.AdMuseTask">
     insert into ad_muse_task (id, ad_video_id, ad_video_image_id, 
       account_id, similarity, dimension_size, 
-      img2img_desc, text2img_desc, subtitle, 
-      `status`, task_id, task_type, 
-      task_status, is_delete, create_time, 
-      update_time)
+      output_image_num, img2img_desc, text2img_desc, 
+      subtitle, `status`, task_id, 
+      task_type, task_status, is_delete, 
+      create_time, update_time)
     values (#{id,jdbcType=BIGINT}, #{adVideoId,jdbcType=BIGINT}, #{adVideoImageId,jdbcType=BIGINT}, 
       #{accountId,jdbcType=VARCHAR}, #{similarity,jdbcType=INTEGER}, #{dimensionSize,jdbcType=VARCHAR}, 
-      #{img2imgDesc,jdbcType=VARCHAR}, #{text2imgDesc,jdbcType=VARCHAR}, #{subtitle,jdbcType=VARCHAR}, 
-      #{status,jdbcType=INTEGER}, #{taskId,jdbcType=BIGINT}, #{taskType,jdbcType=VARCHAR}, 
-      #{taskStatus,jdbcType=VARCHAR}, #{isDelete,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, 
-      #{updateTime,jdbcType=TIMESTAMP})
+      #{outputImageNum,jdbcType=INTEGER}, #{img2imgDesc,jdbcType=VARCHAR}, #{text2imgDesc,jdbcType=VARCHAR}, 
+      #{subtitle,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, #{taskId,jdbcType=BIGINT}, 
+      #{taskType,jdbcType=VARCHAR}, #{taskStatus,jdbcType=VARCHAR}, #{isDelete,jdbcType=INTEGER}, 
+      #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP})
   </insert>
   <insert id="insertSelective" parameterType="com.tzld.piaoquan.tencentad.model.po.AdMuseTask">
     insert into ad_muse_task
@@ -150,6 +151,9 @@
       <if test="dimensionSize != null">
         dimension_size,
       </if>
+      <if test="outputImageNum != null">
+        output_image_num,
+      </if>
       <if test="img2imgDesc != null">
         img2img_desc,
       </if>
@@ -200,6 +204,9 @@
       <if test="dimensionSize != null">
         #{dimensionSize,jdbcType=VARCHAR},
       </if>
+      <if test="outputImageNum != null">
+        #{outputImageNum,jdbcType=INTEGER},
+      </if>
       <if test="img2imgDesc != null">
         #{img2imgDesc,jdbcType=VARCHAR},
       </if>
@@ -259,6 +266,9 @@
       <if test="record.dimensionSize != null">
         dimension_size = #{record.dimensionSize,jdbcType=VARCHAR},
       </if>
+      <if test="record.outputImageNum != null">
+        output_image_num = #{record.outputImageNum,jdbcType=INTEGER},
+      </if>
       <if test="record.img2imgDesc != null">
         img2img_desc = #{record.img2imgDesc,jdbcType=VARCHAR},
       </if>
@@ -302,6 +312,7 @@
       account_id = #{record.accountId,jdbcType=VARCHAR},
       similarity = #{record.similarity,jdbcType=INTEGER},
       dimension_size = #{record.dimensionSize,jdbcType=VARCHAR},
+      output_image_num = #{record.outputImageNum,jdbcType=INTEGER},
       img2img_desc = #{record.img2imgDesc,jdbcType=VARCHAR},
       text2img_desc = #{record.text2imgDesc,jdbcType=VARCHAR},
       subtitle = #{record.subtitle,jdbcType=VARCHAR},
@@ -334,6 +345,9 @@
       <if test="dimensionSize != null">
         dimension_size = #{dimensionSize,jdbcType=VARCHAR},
       </if>
+      <if test="outputImageNum != null">
+        output_image_num = #{outputImageNum,jdbcType=INTEGER},
+      </if>
       <if test="img2imgDesc != null">
         img2img_desc = #{img2imgDesc,jdbcType=VARCHAR},
       </if>
@@ -374,6 +388,7 @@
       account_id = #{accountId,jdbcType=VARCHAR},
       similarity = #{similarity,jdbcType=INTEGER},
       dimension_size = #{dimensionSize,jdbcType=VARCHAR},
+      output_image_num = #{outputImageNum,jdbcType=INTEGER},
       img2img_desc = #{img2imgDesc,jdbcType=VARCHAR},
       text2img_desc = #{text2imgDesc,jdbcType=VARCHAR},
       subtitle = #{subtitle,jdbcType=VARCHAR},