#创享来客# 短视频混剪这是整个系统的灵魂,对于同一组素材,在不同系统处理,能生成高质量视频数
量多少决定了整个系统的质量;比如如下3组素材,每组5个短视频,应该是多少条?
一、我们先来看下短视频混剪的界面:
这个是混剪的主界面,在混剪前,提前把相关的素材准备好,主要是包括视频素材、图片素材、背景音乐素材,视频素材一般都是有顺序的(比如镜头、镜中、镜尾)、图片素材主要是用于设置视频的封面及如果是横屏需要的背景图、音乐可以有系统内置的背景音乐,也可自己专属音乐;
操作时,先选择全局时长时长,是随镜头组各字幕口播时长、全局字幕口播还是固定时长;这里选择不同,每个视频所截取的时长不同,决定了后续的一个算法;接下来就是设置每个镜头组的内容,包括有每个镜头里视频内容、字幕口播内容、标题及时长计算模式;如果是用原声音还可以选择视频原声;后面就是全局的音乐、AI配音选择及生成数量和画面比例;
主界面里面包括很多小的子页面,如标题字体和位置的设置:
二、混剪计算逻辑
混剪核心逻辑都是在保证视频逻辑性的前提下主要是围绕视频重复率来计算的,一个视频能否精准的计算出视频在整批的视频中的重复率,决定了视频质量,主要是会分以下几个步骤:
- 把视频按照排列组合的把视频组合好;
- 根据时长计算每个视频片段的所占比例;
- 计算多个片段在每个视频中所占比例;
- 把完全不重复的视频计算出来,做一个数组;
- 把重复率在20以内的视频计算出来,做一个数组;
- 把重复率在20~40或者50%以内的视频计算出来,做一个数组;
- 最终再整体去重,获得最终预设的视频组合;
如代码所示,部分:
private static void deduplication(List<List<Map<String,Integer>>> firstList,List<List<Map<String,Integer>>> secondList,
List<List<Map<String,Integer>>> secondPubList,List<List<Map<String,Integer>>> thirdList
,List<List<Map<String,Integer>>> newLowdupList,List<List<Map<String,Integer>>> newThirdList1){
List<String> keys1 = new ArrayList<>();
List<String> keys2 = new ArrayList<>();
List<String> keys22 = new ArrayList<>();
List<String> keys3 = new ArrayList<>();
//
List<List<Map<String,Integer>>> newThirdList = new ArrayList<>();
//把第三组所有组合好的视频做成key value形式
Map<String,List<Map<String,Integer>>> mapThirdList = new LinkedHashMap<>();
//新的低于20%的视频
List<List<Map<String,Integer>>> lowdupList = new ArrayList<>();
//把每组的key给拼接出来,方便后面做去重筛选及前缀判断
keys1 = keyJoint(firstList);
keys2 = keyJoint(secondList);
keys22 = keyJoint(secondPubList);
for(List<Map<String,Integer>> third:thirdList){
for(Map<String,Integer> map:third){
StringBuilder key = new StringBuilder();
Set set = map.keySet();
for (Object o:set){
key.append(o);
key.append("#");//key的链接符用#
}
String str = key.toString();
String nstr = str.substring(0,str.length()-1);
keys3.add(nstr);
mapThirdList.put(nstr,third);
}
}
三、视频组装
最终算法计算好了一个虚拟组合,再用视频切片组合能力,把视频片段切出来再做最终成品视频的组合,包括视频的音频、口播、音乐等,后面再讲解视频组装的能力,如有源码需求问题可联系:xiaoxiang8842