| | |
| | | @Schema(description = "状态 (0: 正常, 1: 异常)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | private Integer status; |
| | | |
| | | //是否有人像 |
| | | private String hasPerson; |
| | | |
| | | private AppCourseSceneBackgroundsMegerReqVO background; |
| | | |
| | | private List<AppCourseSceneComponentsMegerReqVO> components; |
| | |
| | | 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, |
| | |
| | | "[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; |