- AI全自动批量处理
一键导入多段素材,AI智能全自动视频剪辑,支持自动剪辑,自动配音,自动添加字幕,自动添加关键词图标等。
- AI视频自动分段
导入多个视频后,根据选择的视频剪辑模式,自定义剪辑策略,设置多段视频段数。自定义设置视频的时长,支持多种视频格式。
- AI全自动自动配音
一键导入文本内容,即可自动生成对应的语音,多种语音模式,音频音色,可自动选择 1. 自动生成字幕
快速导入文本/输入文本内容,即可自动生成字幕。大量精美字幕样式可选择,支持自定义字外观,如:阴影,背景色,文字样式等
展示样例:
/*
* 开始创作
*/
public function startProjectAction() {
//面包屑
$breadcrumbs = [
['title' => 'AI视频创意', 'link' => '#'],
['title' => '开始创作', 'link' => ''],
];
$this->buildBreadcrumbs($breadcrumbs);
//搜索专用
$keyword_type = $this->request->getStrParam('keyword_type');
$keyword = $this->request->getStrParam('keyword');
$this->output['keyword_type'] = $keyword_type;
$this->output['keyword'] = $keyword;
$dv_id = $this->request->getIntParam('dv_id'); //视频工程ID
$this->output['dv_id'] = $dv_id;
$type = $this->request->getIntParam('type',0); //素材类型
$scene = $this->request->getIntParam('scene',1);
$this->output['scene'] = $scene;
//获取视频信息
$video_model = new App_Model_Douyin_MysqlVideoStorage();
$video_info = $video_model->getRowByIdSid($dv_id, $this->sid);
if(empty($video_info)){
plum_redirect_with_msg('视频创意工程不存在');
}
$mixed_video_mode = $video_info['dv_video_mode'];
if (in_array($mixed_video_mode, [11])) { //智能图片组合
$type = in_array($type, [0,1]) ? 3 : $type; //默认为图片素材类型
} else {
$type = in_array($type, [0, 3]) ? 1 : $type; //默认为视频素材类型
}
//获取素材列表
$where = [
['name' => 'dvm_ds_id', 'oper' => '=', 'value' => $this->sid],
['name' => 'dvm_dv_id', 'oper' => '=', 'value' => $dv_id],
['name' => 'dvm_material_type', 'oper' => '=', 'value' => $type]
];
//视频类型,区分混剪模式
if ($type == 1) {
$where[] = ['name' => 'dvm_video_mixed_mode', 'oper' => '=', 'value' => $video_info['dv_video_mode']];
}
if(!empty($keyword_type)){
$where[] = ['name' => $keyword_type, 'oper' => 'like', 'value' => "%{$keyword}%"];
}
//智能场景组合,视频素材加场景值筛选
if($type==1 && $mixed_video_mode==4){
$scene_model = new App_Model_Douyin_MysqlVideoSceneStorage();
$scene_count = $scene_model->getCountByDvid($dv_id);
if ($scene_count == 0 && $video_info['dv_video_use'] > 0) {
for($i=1; $i<=$video_info['dv_video_use']; $i++) {
$indata = [
'dvs_ds_id' => $this->sid,
'dvs_dv_id' => $dv_id,
'dvs_name' => "场景".$i,
'dvs_duration' => $video_info['dv_video_shot']*1000,
'dvs_scene' => $i,
'dvs_create_time' => time(),
];
$scene_model->insertValue($indata);
}
}
$where[] = ['name' => 'dvm_scene', 'oper' => '=', 'value' => $scene];
}
$sort = [ 'dvm_create_time' => 'DESC'];
$material_model = new App_Model_Douyin_MysqlVideoMaterialStorage();
$material_list = $material_model->getAttachList($where,$this->index,$this->count,$sort);
foreach ($material_list as &$item) {
$item['dsa_bit_rate'] = empty($item['dsa_bit_rate']) ? 0 : plum_compute_byte($item['dsa_bit_rate']);
$item['dsa_cover'] = empty($item['dsa_cover']) ? '/public/dydqt/img/video-edit.png' : $item['dsa_cover'];
}
//计算分页
$material_list_all = $material_model->getCount($where);
$page_libs = new Libs_Pagination_Paginator($material_list_all,$this->count,'jquery',true);
$pageHtml = $page_libs->render();
$video_info['dv_platform'] = json_decode($video_info['dv_platform'], true);
if (!empty($video_info['dv_platform']['bgcolor'])) {
$video_info['dv_platform']['last_bgcolor'] = array_pop($video_info['dv_platform']['bgcolor']);
} else {
$video_info['dv_platform']['last_bgcolor'] = '';
}
// var_dump($material_list);
$this->output['video_info'] = $video_info;
$this->output['material_list'] = $material_list;
$this->output['pageHtml'] = $pageHtml;
$this->output['video_mixed_mode'] = plum_parse_config('project_mixed_mode','dydqt/project');
//左侧素材类型导航输出
$this->output_materail_link($dv_id, $type, $video_info);
$this->renderCropTool('/dydqtshoppc/index/uploadImage');
$this->displaySmarty('dydqtshoppc/video/edit-project.tpl');
}
/*
* 素材类型输出
*/
private function output_materail_link($da_id, $type, $video_info){
$material_model = new App_Model_Douyin_MysqlVideoMaterialStorage($this->sid);
$template_model = new App_Model_Douyin_MysqlVideoTempVideoStorage($this->sid);
$temp_video_count = $template_model->getTempVideoCountByItem($da_id);
$type_list = [
'video' => [
'type' => 1,
'title' => '镜头素材',
'count' => $material_model->getMaterialCountByVideo($da_id, 1),
'top' => 33,
'url' => "/dydqtshoppc/video/startProject?dv_id={$da_id}&type=1",
],
'image' => [
'type' => 3,
'title' => '镜头素材',
'count' => $material_model->getMaterialCountByVideo($da_id, 3),
'top' => 33,
'url' => "/dydqtshoppc/video/startProject?dv_id={$da_id}&type=3",
],
'audio' => [
'type' => 2,
'title' => '背景音乐',
'count' => $material_model->getMaterialCountByVideo($da_id, 2),
'top' => 133,
'url' => "/dydqtshoppc/video/startProject?dv_id={$da_id}&type=2",
],
'title' => [
'type' => 4,
'title' => '标题字幕',
'count' => $material_model->getMaterialCountByVideo($da_id, 4),
'top' => 233,
'url' => "/dydqtshoppc/video/startProject?dv_id={$da_id}&type=4",
],
'write' => [
'type' => 5,
'title' => '配音字幕',
'count' => $material_model->getMaterialCountByVideo($da_id, 5),
'top' => 333,
'url' => "/dydqtshoppc/video/startProject?dv_id={$da_id}&type=5",
],
/*
'dubin' => [
'type' => 6,
'title' => '配音选择',
'url' => "/dydqtshoppc/video/materialList?dv_id={$da_id}&type=6",
],
*/
'background' => [
'type' => 7,
'title' => '创意背景',
'count' => $material_model->getMaterialCountByVideo($da_id, 7),
'top' => 433,
'url' => "/dydqtshoppc/video/startProject?dv_id={$da_id}&type=7",
],
'mixcut' => [
'type' => 0,
'title' => '视频仓库',
'count' => $temp_video_count,
'top' => 'calc(100% - 86px)',
'url' => "/dydqtshoppc/video/cacheVideo?dv_id={$da_id}&type=0",
],
];
$video_mode = $video_info['dv_video_mode'];
switch ($video_mode) {
case 1 :
case 2 :
case 3 :
case 4 :
unset($type_list['image']);
break;
case 11 :
unset($type_list['video']);
$type = $type == 1 ? 3 : $type;
break;
default :