抖音SEO,顾名思义抖音搜索排名优化,目前短视频平台如火如荼,抖音也凭借自身优势,迅猛发展,据相关数据统计,目前抖音平台日活用户已超8亿,抖音搜索超4亿,商业价值巨大,这无疑也是2023年企业入驻抖音可以把握的新一轮的流量红利。
那么企业应该如何借助抖音实现价值转化呢?
答案只有两个字“矩阵”
抖音账号矩阵是账号运营的高阶玩法,指一个运营主体开设或联动多个账号,做账号之间相关引流,诱导流量分类,转化精准流量,以账号分组的形式,实现企业曝光价值最大化。
(1)不同的ip合拍作品
(2)关注账号里只留矩阵内部账号
(3)标题中@矩阵账号
(4)评论中@矩阵号
(5)通过个性签名引流
不同平台的矩阵运营方法也是共通的,视觉志创始人沙小皮说过:“做矩阵一般有两点考虑,扩大用户覆盖和增加营收”
都应矩阵系统前端采用vue和React技术语言,后端采用PHP后台技术语言。首先,我们需要去抖音开放平台申请开放平台网页的授权接口和视频分发接口。
抖音官方申请流程:
注册官方开放平台账号-应用服务商-相关申请-申请权限-等待审批。
同样,我们可以嫁接其他平台,达到多平台矩阵的目的。这里需要根据各平台官方开发者的背景做一个应用。至少现在我们已经收录了(快手、今日头条、西瓜视频)并打算添加(b站,好看视频等等)。
下面这里重点说下视频制作板块的核心点:
市面上大多数的视频制作都是阿里云的混剪接口
混剪的代码逻辑:
智能混剪合成:仅需上传1个长度为15-60秒的长视频即可,系统将抽取音频,随后裁剪为多个小片段,用户发布视频时系统随机选择该模式下多个片段进行组合,再和抽取的音频合成。
智能随机组合:需上传至少6个(越多越好)6秒以内的短视频,系统将视频转静音,用户发布视频时系统随机选择该模式下的5个短视频素材随机组合,再和音频素材合成。
场景顺序组合:需在5个场景中分别上传至少1个或多个6秒以内的短视频,系统将视频转静音,用户发布视频时系统在每个场景中随机选择1个短视频素材组合,再和音频素材合成。
随机选定发布:需上传尽可能多的不限长度的短视频,用户发布视频时系统随机选择该模式下的特定视频,发布后将自动删除已使用视频素材。
*:模式一旦选定后,请勿轻易切换视频合成模式,否则将导致素材清空,缓存视频清空。
class App_Controller_Dydqtshoppc_VideoController extends App_Controller_Dydqtshoppc_InitController {
const VIDEO_PLAY_POSTER = "/public/dydqt/img/video-zw.png";
//支持的视频平台
private $platform = [
'dou_yin' => '抖音',
'kuai_shou' => '快手',
'bai_jia_hao' => '好看视频',
'xiao_hong_shu'=> '小红书',
'xi_gua' => '西瓜',
'tou_tiao' => '头条',
'bili_bili' => '哔哩哔哩',
];
/*
* AI视频创意工作台
*/
public function indexAction() {
//面包屑
$breadcrumbs = [
['title' => 'AI视频创意', 'link' => '#zhyy'],
['title' => '工作台', 'link' => '/video/index'],
];
$this->buildBreadcrumbs($breadcrumbs);
//视频数量统计
$collect_model = new App_Model_Douyin_MysqlCollectShopStorage();
$collect_data = $collect_model->getCollectSurplusBySid($this->sid);
//视频创意统计
$video_model = new App_Model_Douyin_MysqlVideoStorage();
$vt_where = [
['name' => 'dv_s_id', 'oper' => '=', 'value' => $this->sid]
];
$video_total = $video_model->getCount($vt_where);
//素材数量统计
$attachment_model = new App_Model_Douyin_MysqlShopAttachmentStorage();
$attachment_count = $attachment_model->getTotalByGroup($this->sid);
$count_data = [
'image_count' => 0,
'image_size' => '0B',
'audio_count' => 0,
'audio_size' => '0B',
'video_count' => 0,
'video_size' => '0B',
];
foreach ($attachment_count as $count) {
switch ($count['dsa_type']) {
case 1 :
$count_data['image_count'] = $count['total'];
$count_data['image_size'] = plum_compute_byte($count['size']);
break;
case 2 :
$count_data['audio_count'] = $count['total'];
$count_data['audio_size'] = plum_compute_byte($count['size']);
break;
case 3 :
$count_data['video_count'] = $count['total'];
$count_data['video_size'] = plum_compute_byte($count['size']);
break;
}
}
$count_data['video_remain'] = $collect_data['cs_surplus'];
$count_data['video_create'] = $collect_data['cs_rest_num'];
$count_data['video_release']= $collect_data['cs_scan_count'];
$count_data['video_download'] = $collect_data['cs_download_num'];
$count_data['video_total'] = $video_total;
$this->output['count_data'] = $count_data;
if ($this->front_module == 'eui') {
$this->displaySmarty('dspui/video/index.html');
} else {
$this->displaySmarty('dydqtshoppc/video/index.tpl');
}
}
public function itemListAction() {
//面包屑
$breadcrumbs = [
['title' => 'AI视频创意', 'link' => '#'],
['title' => '创意工程', 'link' => '#'],
];
$this->buildBreadcrumbs($breadcrumbs);
$mode = $this->request->getIntParam('mode', 0);
$this->output['mode'] = $mode;
$time_range = $this->request->getStrParam('time_range');
$keyword_type = $this->request->getStrParam('keyword_type');
$keyword = $this->request->getStrParam('keyword');
$where = [
['name' => 'dv_s_id', 'oper' => '=', 'value' => $this->sid]
];
if(!empty($time_range)){
$add_time_range_arr = explode('~',$time_range);
$where[] = ['name' => 'dv_create_time', 'oper' => '>=', 'value' => strtotime($add_time_range_arr[0])];
$where[] = ['name' => 'dv_create_time', 'oper' => '<', 'value' => strtotime($add_time_range_arr[1]) + 86400];
}
if(!empty($keyword_type)){
$where[] = ['name' => $keyword_type, 'oper' => 'like', 'value' => "%{$keyword}%"];
}
if ($mode > 0) {
$where[] = ['name' => 'dv_video_mode', 'oper' => '=', 'value' => $mode];
}
$sort = ['dv_create_time' => 'DESC'];
//获取视频列表
$Video_model = new App_Model_Douyin_MysqlVideoStorage();
$video_list = $Video_model->getList($where,$this->index,$this->count,$sort);
$temp_video_model = new App_Model_Douyin_MysqlVideoTempVideoStorage($this->sid);
$pailie_video_model = new App_Model_Douyin_MysqlVideoMaterialPailieStorage();
foreach ($video_list as &$item) {
$item['cache_num'] = $temp_video_model->getTempVideoCountByItem($item['dv_id']);
$item['pailie'] = $pailie_video_model->getRowByDvid($item['dv_id']);
$progerss = 40;
if ($item['video_num'] > 0 || $item['image_num'] > 0) {
$progerss += 10;
}
if ($item['audio_num'] > 0 || $item['write_num'] > 0) {
$progerss += 10;
}
if ($item['pailie']['dvmp_is_zuhe']) {
$progerss += 20;
}
if ($item['cache_num'] > 0) {
$progerss += 20;
}
$item['progress'] = $progerss;
}
//计算分页
$active_list_all = $Video_model->getCount($where);
$page_libs = new Libs_Pagination_Paginator($active_list_all,$this->count,'jquery',true);
$pageHtml = $page_libs->render();
$this->output['time_range'] = $time_range;
$this->output['keyword_type'] = $keyword_type;
$this->output['keyword'] = $keyword;
$this->output['video_list'] = $video_list;
$this->output['pageHtml'] = $pageHtml;
$this->output['progress_line'] = [
20 => ['color' => 'red', 'tip' => '创建创意工程已完成'],
40 => ['color' => 'red', 'tip' => '选择混剪模式已完成'],
50 => ['color' => 'orange', 'tip' => '添加音视频素材未完成'],
60 => ['color' => 'orange', 'tip' => '添加音视频素材已完成'],
70 => ['color' => 'blue', 'tip' => '视频混剪组合已完成'],
80 => ['color' => 'blue', 'tip' => '视频混剪组合已完成'],
90 => ['color' => 'green', 'tip' => '视频缓存已完成'],
100 => ['color' => 'green', 'tip' => '工程所有步骤已完成'],
];
$this->output_mode_link();
$this->displaySmarty('dydqtshoppc/video/item-list.tpl');
}
/*
* 剪辑模式链接
*/
private function output_mode_link() {
$video_mixed_mode = plum_parse_config('project_mixed_mode', 'dydqt/project');
array_unshift($video_mixed_mode, [
'title' => '全部',
'mode' => 0,
'desc' => '',
]);
foreach ($video_mixed_mode as &$item) {
$item['link'] = "/dydqtshoppc/video/itemList?mode=".$item['mode'];
}
$this->output['video_mixed_mode'] = $video_mixed_mode;
}
/**
* 视频列表
*/
public function videoListAction() {
//面包屑
$breadcrumbs = [
['title' => '账号运营', 'link' => '#zhyy'],
['title' => '短视频管理', 'link' => '/video/videoList'],
];
$this->buildBreadcrumbs($breadcrumbs);
$add_time_range = $this->request->getStrParam('add_time_range');
$keyword_type = $this->request->getStrParam('keyword_type');
$keyword = $this->request->getStrParam('keyword');
$where = [
['name' => 'dv_s_id', 'oper' => '=', 'value' => $this->sid]
];
if(!empty($add_time_range)){
$add_time_range_arr = explode('~',$add_time_range);
$where[] = ['name' => 'dv_create_time', 'oper' => '>=', 'value' => strtotime($add_time_range_arr[0])];
$where[] = ['name' => 'dv_create_time', 'oper' => '<', 'value' => strtotime($add_time_range_arr[1]) + 86400];
}
if(!empty($keyword_type)){
$where[] = ['name' => $keyword_type, 'oper' => 'like', 'value' => "%{$keyword}%"];
}
$sort = ['dv_create_time' => 'DESC'];
//获取视频列表
$Video_model = new App_Model_Douyin_MysqlVideoStorage();
$video_list = $Video_model->getList($where,$this->index,$this->count,$sort);
$material_model = new App_Model_Douyin_MysqlVideoMaterialStorage($this->sid);
$temp_video_model = new App_Model_Douyin_MysqlVideoTempVideoStorage($this->sid);
$pailie_video_model = new App_Model_Douyin_MysqlVideoMaterialPailieStorage();
foreach ($video_list as &$item) {
$item['video_num'] = $material_model->getMaterialCountByVideo($item['dv_id'], 1);
$item['audio_num'] = $material_model->getMaterialCountByVideo($item['dv_id'], 2);
$item['image_num'] = $material_model->getMaterialCountByVideo($item['dv_id'], 3);
$item['title_num'] = $material_model->getMaterialCountByVideo($item['dv_id'], 4);
$item['write_num'] = $material_model->getMaterialCountByVideo($item['dv_id'], 5);
$item['cache_num'] = $temp_video_model->getTempVideoCountByItem($item['dv_id']);
$item['pailie'] = $pailie_video_model->getRowByDvid($item['dv_id']);
$progerss = 40;
if ($item['video_num'] > 0 || $item['image_num'] > 0) {
$progerss += 10;
}
if ($item['audio_num'] > 0 || $item['write_num'] > 0) {
$progerss += 10;
}
if ($item['pailie']['dvmp_is_zuhe']) {
$progerss += 20;
}
if ($item['cache_num'] > 0) {
$progerss += 20;
}
$item['progress'] = $progerss;
}
//计算分页
$active_list_all = $Video_model->getCount($where);
$page_libs = new Libs_Pagination_Paginator($active_list_all,$this->count,'jquery',true);
$pageHtml = $page_libs->render();
$this->output['add_time_range'] = $add_time_range;
$this->output['keyword_type'] = $keyword_type;
$this->output['keyword'] = $keyword;
$this->output['video_list'] = $video_list;
$this->output['pageHtml'] = $pageHtml;
$video_mixed_mode = plum_parse_config('project_mixed_mode', 'dydqt/project');
$this->output['video_mixed_mode'] = $video_mixed_mode;
$this->output['progress_line'] = [
20 => ['color' => 'red', 'tip' => '创建创意工程已完成'],
40 => ['color' => 'red', 'tip' => '选择混剪模式已完成'],
50 => ['color' => 'orange', 'tip' => '添加音视频素材未完成'],
60 => ['color' => 'orange', 'tip' => '添加音视频素材已完成'],
70 => ['color' => 'blue', 'tip' => '视频混剪组合已完成'],
80 => ['color' => 'blue', 'tip' => '视频混剪组合已完成'],
90 => ['color' => 'green', 'tip' => '视频缓存已完成'],
100 => ['color' => 'green', 'tip' => '工程所有步骤已完成'],
];
if ($this->front_module == 'eui') {
$this->displaySmarty('dspui/video/videoList.html');
} else {
$this->displaySmarty('dydqtshoppc/video/videoList.html');
}
}
但是只是单纯的混剪不过平台去重审核的概率很大,现在平台审核的力度越来越大。
所以我们在混剪的基础上再做视频的渲染,随机抽帧,针对画面做轻微的画面切割,翻转的技术处理,这样有效的减少批量视频的重复概率。
当然,小编相信,肯定还有更多视频剪辑优化及矩阵系统的开发优化方案,也欢迎各位伙伴评论区交流讨论。