短视频矩阵管理营销系统.源代码

news2024/11/19 8:27:02

一、短视频矩阵系统一般拥有以下几个主要功能

1. 视频拍摄和剪辑功能,让用户轻松制作和发布短视频内容。

2. 视频分发和推广功能,矩阵管理发布、将制作好的短视频内容推送到各大短视频平台,实现效果最大化。

3. 数据监测和分析功能,对短视频内容的播放量、互动等数据进行监测和分析,帮助用户优化短视频内容。

4. 社交功能,收录意向线索、让短视频制作者和客户间进行互动,增加内容的粘性和互动性。 智能收录意向线索触达变现。

二、部分源代码实时在线分享:

 

 $type_list_single = array_column($type_list,'title','type');
        $this->output['now_type']   = $type;
        $this->output['type_list']  = $type_list;
        $this->output['type_list_single']  = $type_list_single;

        //获取素材组合信息
        $pailie_model   = new App_Model_Douyin_MysqlVideoMaterialPailieStorage();
        $pailie_row     = $pailie_model->getRowByDvid($da_id);
        $pailie_row['dvmp_pailie_have']     = $pailie_row['dvmp_total']-$pailie_row['dvmp_used'];
        //视频混剪模式
        $this->output['pailie_row']         = $pailie_row;
        $this->output['temp_video_count']   = $temp_video_count;
        $this->output['project_mode']       = plum_parse_config('project_mixed_mode','dydqt/project')[$video_mode];
        //输出操作指引
        $index  = [
            1   => [
                'order'     => 1,
                'title'     => '视频素材',
                'desc'      => '根据混剪模式,必须上传',
                'url'       => "/dydqtshoppc/video/materialList?dv_id={$da_id}&type=1",
            ],
            2   => [
                'order'     => 2,
                'title'     => '音频素材',
                'desc'      => '背景音与文案配音,可二选一',
                'url'       => "/dydqtshoppc/video/materialList?dv_id={$da_id}&type=2",
            ],
            3   => [
                'order'     => 3,
                'title'     => '标题素材',
                'desc'      => '视频上半部分的标题,可不传',
                'url'       => "/dydqtshoppc/video/materialList?dv_id={$da_id}&type=4",
            ],
            4   => [
                'order'     => 4,
                'title'     => '文案素材',
                'desc'      => '视频下半部分的文案,可不传',
                'url'       => "/dydqtshoppc/video/materialList?dv_id={$da_id}&type=5",
            ],
        ];

        if ($video_mode == 11) {
            $index[1]   = [
                'order'     => 1,
                'title'     => '图片素材',
                'desc'      => '根据混剪模式,必须上传',
                'url'       => "/dydqtshoppc/video/materialList?dv_id={$da_id}&type=3",
            ];
        }
        $this->output['oper_index'] = $index;
    }

    /*
     * 素材管理
     */
    public function materialListAction(){
        //面包屑
        $breadcrumbs = [
            ['title' => '视频管理', 'link' => '/video/videoList'],
            ['title' => '素材管理', 'link' => '#'],
        ];
        $this->buildBreadcrumbs($breadcrumbs);

        $dv_id                  = $this->request->getIntParam('dv_id');  //活动ID
        $type                   = $this->request->getIntParam('type',0);   //素材类型
        $keyword_type           = $this->request->getStrParam('keyword_type');
        $keyword                = $this->request->getStrParam('keyword');
        $scene  = $this->request->getIntParam('scene',0);

        //获取视频信息
        $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;  //默认为视频素材类型
        }

   三、短视频矩阵系统前端代码如何实现框架:

短视频矩阵系统的前端框架语言包括但不限于JavaScript、HTML、CSS等常见的Web技术语言。其中,JavaScript作为客户端脚本语言,主要用于实现互动效果和动态交互;HTML用于构建网页结构和元素的布局;CSS则负责网页的样式设计和布局排版。此外,短视频矩阵系统还可能采用Vue.js、React、Angular等流行的前端框架来简化开发流程和提高页面性能。

源代码: 

ase 4: //场景组合
                    if($video_info['dv_video_mode']==2){
                        $maxnum = 1000;//该原声模式下,视频数量最多为10个
                    }else{
                        $maxnum = 4000;//该配声模式下,视频数量最多为40个
                    }
                    $min_video_count = $maxnum - count($have_video_list); //本次上传至少还需要多少个视频
                    if(count($attachment_list) > $min_video_count){
                        $this->displayJsonError("该模式下最多可上传{$maxnum}个视频素材,本次请最多上传{$min_video_count}个视频");
                    }
                    if(count($have_video_list) >= $maxnum){
                        $this->displayJsonError("该模式下只能上传{$maxnum}个视频素材");
                    }
                    //智能组合(原声)、智能组合(配声)视频限制5秒以内
                    foreach ($attachment_list as $video_item){
                        if(floor($video_item['dsa_duration']) > 15){
                            $this->displayJsonError('该模式下请使用15秒及以内的短视频');
                        }
                    }
                    break;
                case 3: //随机选定
                    //该模式下,视频长度不限,视频数量越多越好,不做限制
                    foreach ($attachment_list as $video_item){
                        if(floor($video_item['dsa_duration']) < 15 || floor($video_item['dsa_duration']) > 60){
                            $this->displayJsonError('该模式下请使用15~60秒的视频素材');
                        }
                    }
                    break;
            }
        } elseif ($sc_type == 'audio') {//音频素材
            //智能组合(原声)、智能组合(配声)视频限制5秒以内
            foreach ($attachment_list as $item){
                if(floor($item['dsa_duration']) < $video_info['dv_video_duration']){
                    #$this->displayJsonError('该模式下需要的音频素材不应短于预计合成短视频长度');
                }
            }
        } elseif ($sc_type == 'image') {//图片素材
            //目前仅支持jpg图片,png图片需要转码
            foreach ($attachment_list as $key => &$item) {
                list(,,$image_type) = getimagesize(PLUM_DIR_ROOT.$item['dsa_path']);
                //仅接受jpg,png
                if (!in_array($image_type, [2,3])) {
                    unset($attachment_list[$key]);
                    continue;
                }
                //png图片转码
                if ($image_type == 3) {
                    $jpg_file   = pathinfo($item['dsa_path'], PATHINFO_DIRNAME)."/".pathinfo($item['dsa_path'], PATHINFO_FILENAME).".jpg";
                    $png_image  = imagecreatefrompng(PLUM_DIR_ROOT.$item['dsa_path']);
                    $bg_image   = imagecreatetruecolor(imagesx($png_image), imagesy($png_image));

                    imagefill($bg_image, 0, 0, imagecolorallocate($bg_image, 255, 255, 255));
                    imagealphablending($bg_image, true);
                    imagecopy($bg_image, $png_image, 0, 0, 0, 0, imagesx($png_image), imagesy($png_image));
                    imagedestroy($png_image);
                    $quality    = 60;
                    imagejpeg($bg_image, PLUM_DIR_ROOT.$jpg_file, $quality);
                    imagedestroy($bg_image);
                    $item['dsa_path']   = $jpg_file;
                }
            }
        }
        //保存
        $dvm_id_list = [];  //保存的所有素材列表
        foreach ($attachment_list as $each){
            $material_data = [
                'dvm_aa_id'             => $this->manager['ds_agent_id'],
                'dvm_ds_id'             => $this->sid,
                'dvm_dv_id'             => $video_info['dv_id'],
                'dvm_material_name'     => $each['dsa_real_name'],
                'dvm_material_type'     => $mt_type,
                'dvm_material_content'  => $each['dsa_path'],
                'dvm_video_mixed_mode'  => $video_info['dv_video_mode'],
                'dvm_video_is_deal'     => ($sc_type == 'video' && $video_info['dv_video_mode'] != 3) ? 0 : 1,
                'dvm_update_time'       => time(),
                'dvm_width'             => $each['dsa_width'],
                'dvm_height'            => $each['dsa_height'],
                'dvm_duration'          => $each['dsa_duration'],
                'dvm_scene'             => $scene > 0 ? $scene : 1,//默认场景1
                'dvm_related_aid'       => $each['dsa_id'],
                'dvm_create_time'       => time(),
            ];
            $dvm_id = $videvo_material_model->insertValue($material_data);
            array_push($dvm_id_list, $dvm_id);
        }

        //清空素材排列组合(视频及图片素材,背景图片不处理)
        if (in_array($sc_type, ['video', 'image']) && in_array($mt_type, [1,3])) {
            $VideoMaterialPailie_model = new App_Model_Douyin_MysqlVideoMaterialPailieStorage();
            $VideoMaterialPailie_model->clearPailie($video_info['dv_id']);
            //后台进程对视频进行剪辑处理
            if (in_array($video_info['dv_video_mode'], [1,2,4])) {
                foreach ($dvm_id_list as $dvm_id_item){
                    plum_open_backend('douyinvideo','dealUploadMaterialVideo',['dvm_id'=>$dvm_id_item, 'shot'=>$video_info['dv_video_shot']]);
                }
            }
        }
        $this->displayJsonSuccess([],true,'保存成功');
    }
    /*
     * 生成素材视频组合
     */
    public function zuheMaterialAction(){
        //获取视频信息
        $dv_id          = $this->request->getIntParam('dv_id');
        $video_model    = new App_Model_Douyin_MysqlVideoStorage();
        $video_info     = $video_model->getRowByIdSid($dv_id, $this->sid);
        if(empty($video_info)){
            $this->displayJsonError('该视频不存在');
        }
        //初次遍历,验证数据完整性
        $videoMaterial_model = new App_Model_Douyin_MysqlVideoMaterialStorage();
        switch ($video_info['dv_video_mode']) {
            case 1:     //智能混剪
            case 2:     //随机组合
            case 3:     //随机选定
                $have_video_list = $videoMaterial_model->getCreateVideoMaterials($this->sid, $dv_id,1,$video_info['dv_video_mode'],1);
                if(count($have_video_list) < $video_info['dv_video_use']){
                    $this->displayJsonError("生成失败,当前模式下视频素材数量至少为{$video_info['dv_video_use']}个");
                }
                break;
            case 4:     //场景组合
                //获取当前模式下已有的视频列表
                $have_video_list = $videoMaterial_model->getCreateVideoMaterials($this->sid, $dv_id,1,$video_info['dv_video_mode'],1);
                $scene  = [];
                $scene_total    = 1;
                foreach($have_video_list as $k=>$v){
                    $scene[$v['dvm_scene']][]   = $have_video_list[$k]['dvm_id'];
                }
                for ($i=1; $i<=$video_info['dv_video_use']; $i++) {
                    if (empty($scene[$i])) {
                        $this->displayJsonError("生成失败,当前模式下场景{$i}视频素材不存在");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/492251.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机三级嵌入式系统开发 知识点笔记

目录为搜索词&#xff0c;详情看每一节后图片 思维导图已上传&#xff0c;点击这里下载 嵌入式系统开发 全部章节图片第一章 嵌入式系统概论1.1SoCIP核 1.21.2.1ASCIIGB2312GB18030UTF8UTF16超文本字符形状两种描述方法 1.2.2数字图像 1.2.3音频 1.3传输介质分为 有线通信 和 无…

Windows下安装MySQL数据库+Navicat (从完全卸载到安装使用图文详细步骤,附安装包)

目录 第一章&#xff1a;如何完全卸载干净mysql教程&#xff08;三个步骤完全卸载&#xff09;1&#xff09;步骤一&#xff1a;卸载程序2&#xff09;步骤二&#xff1a;删除文件3&#xff09;步骤三&#xff1a;删除注册表信息 第二章&#xff1a;下载软件两种方式1&#xff…

架构师日记-深入理解软件设计模式 | 京东云技术团队

作者&#xff1a;京东零售 刘慧卿 一 设计模式与编程语言 1.1 什么是设计模式 设计模式&#xff08;Design pattern&#xff09; &#xff1a;由软件开发人员在软件开发中面临常见问题的解决方案&#xff0c;是经过长时间的试验积累总结出来的&#xff0c;它使设计更加灵活和…

MyBatis详细笔记

核心知识点 核心配置文件 映射文件概述 Dao层实现与代理开发实现 自动映射与自定义映射 参数传递与返回值 动态SQL 注解开发 缓存机制 总结 核心配置文件【mybatis-config.xml】 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 位置&#xff1a;resourc…

前端配置化表单组件设计方法 | 京东云技术团队

一、背景 前端开发中涉及表单的页面非常多&#xff0c;看似功能简单&#xff0c;开发快速&#xff0c;实则占去了很大一部分时间。当某个表单包含元素过多时还会导致html代码过多&#xff0c;vue文件过大。从而不容易查找、修改和维护。为了提高开发效率及降低维护成本&#x…

基于max30102的物联网病房监测系统(中断处理和主题逻辑)

目录 五、中断处理 六、主体框架 对采集数据的初始化 核心功能的实现 烟雾 通信帧格式 wifi接收数据的处理 OLED显示 五、中断处理 void SysTick_Handler(void) {TimingDelay_Decrement(); }void ESP8266_USART_INT_FUN(void) {uint8_t ucCh;if ( USART_GetITStatus (…

platform总线五级匹配解析

代码来源&#xff1a;开源linux内核linux-6.2.9 platform总线设备与驱动的匹配 对于device和driver无论哪个创建都会尝试主动寻找对方进行绑定&#xff0c;而platform bus总线的匹配原则如上面的代码所示&#xff0c;共有五级匹配&#xff0c;这里进行详细解析下&#xff1a; …

WRF模式

随着生态文明建设和“碳中和”战略的持续推进&#xff0c;我国及全球气候变化及应对是政府、科学界及商业界关注的焦点。气候是多个领域&#xff08;生态、水资源、风资源及碳中和等问题&#xff09;的主要驱动因素&#xff0c;合理认知气候变化有利于解释生态环境变化机理及过…

Android应用层开发学习 Framework 是必须的吗?

作为一名应用层 App 开发工程师&#xff0c;我们为什么要学习 Android Framework&#xff1f;答案很简单&#xff0c;为了不被淘汰&#xff01;在 2023 年的当下,不会点 Binder WMS AMS PMS 好像都找不到工作了&#xff0c;更过分的是应聘企业甚至希望你会点 RN Fluter 等跨平台…

元宇宙的重要底层技术

在元宇宙中&#xff0c;人们可以通过数字分身、化身&#xff08;可理解为虚拟化身&#xff09;、社交媒体化身和智能代理进行交互&#xff0c;这背后都需要底层技术支持。元宇宙的底层技术主要包括&#xff1a; VR/AR、5G/6G、区块链和人工智能。 VR/AR是元宇宙的主要交互设备…

JAVA新提案:努力简化Hello World写法

OpenJDK 的 JEP 445 提案正在努力简化 Java 的入门难度。这个提案主要是引入 “灵活的 Main 方法和匿名 Main 类” &#xff0c;希望 Java 的学习过程能更平滑&#xff0c;让学生和初学者能更好地接受 Java 。 提案的作者 Ron Pressler 解释&#xff1a;现在的 Java 语言非常适…

ES6-迭代器和生成器

一、迭代器概念 遍历器&#xff08; Iterator &#xff09;就是一种机制。它是一种接口&#xff0c;为各种不同的数据结构提 供统一的访问机制。任何数据结构只要部署 Iterator 接口&#xff0c;就可以完成遍历操作。 1) ES6 创造了一种新的遍历命令 for...of 循环&#…

虹科方案 | 助力高性能视频存储解决方案-2

上篇文章《虹科方案 | 助力高性能视频存储解决方案-1》我们分享了虹科&ATTO 和 Avid 共同创建协作解决方案&#xff0c;助力高性能视频存储&#xff0c;今天我们再深入介绍一下我们的案例详情。 一、行业挑战 从高端广播设施到小型独立工作室的媒体后期制作环境都需要允许多…

【C++】STL标准库之list

STL标准库之list list类的简介常用的list类的接口构造迭代器容量访问修改 list和vector的区别 list类的简介 list是一种序列式容器&#xff0c;可以在任意位置插入和删除元素&#xff0c;并且其时间复杂度为O(1)&#xff0c;在底层&#xff0c;list是双向链表结构&#xff0c;…

《CTFshow-Web入门》08. Web 71~80

Web 71~80 web71知识点题解 web72知识点题解 web73题解 web74题解 web75知识点题解 web76题解 web77知识点题解 web78知识点题解 web79题解 web80知识点题解 ctf - web入门 web71 知识点 ob_get_contents()&#xff1a;得到输出缓冲区的内容。ob_end_clean()&#xff1a;清除…

程序员:面试造飞机,入职拧螺丝?真难···

刚开始工作的时候&#xff0c;我也想不通这个问题&#xff0c;甚至很鄙视这种现象。后面当了面试官&#xff0c;做到了公司中层管理&#xff0c;也会站在公司以及行业角度去重新思考这个问题。 为什么这种现象会越来越普遍呢&#xff1f;尤其在 IT 行业愈加明显。 面试看的是…

树与二叉树

我们之前讲过的链表和顺序表都是线性结构的数据结构&#xff0c;那么我们肯定会想有没有一种数据结构的形式不是线性结构而是其他的形式呢&#xff1f;今天我们就来学习一种新的数据结构——树形结构。 &#x1f335;初识树形结构 树形结构就是像我们上面的图形一样。因为像是…

Java从入门到转行

Java开发从入门到转行 Java基本介绍Java学习路线Java学习须知Java学习文档Java SEJava 对象与类Java 基本数据类型Java 变量类型Java 修饰符Java 运算符Java 循环结构Java 条件语句Java switch caseJava 数组Java 日期与时间Java 正则表达式Java 方法Java 流(Stream)、 File、 …

A Restful API

SpringBoot 定义Restful API 定义POJOOrderBuyer 定义RestfulControllerGet API for queryPost API for addPut API for updateDelete API for delete 定义AjaxResponse Patavariable RequestParm RequestBodyRequestHeader 定义POJO Order import java.util.Date; import ja…

工厂方法模式

// 简单工厂模式 #include <iostream> #include <string>// 抽象产品类 class Product { public:virtual ~Product() {}virtual std::string getName() 0; };// 具体产品类A class ProductA : public Product { public:std::string getName() {return "Produ…