短视频矩阵管理系统源码开发:视频批量剪辑,分发功能开发示例

news2024/9/28 3:18:44

短视频矩阵管理系统开发,首先对服务器要求:

源码所需服务器配置 1、规格:最低8核16G

2、硬盘:系统盘40-100G,数据盘不低于100G

3、带宽:10M

4、系统:CentOS7(务必选择7.*)

部署过程中,除对服务器有要求外,还需要提供准备备案域名,域名备案大致需要7-15个工作日,由于地区不同,备案审核的时间周期也不相同。

视频批量剪辑功能开发:

在视频批量剪辑过程中,采用了不同的剪辑模式:如,智能混剪,智能随机,场景顺序,图片组合等,未来还将根据市场开发,开发更多不同的功能

开发展示: 

 <van-tab title="自定义文案" title-style="font-size:32rpx;font-weight:700">
                <!-- 内容2 -->
                <view class="content">
                    <!-- 顶部 -->
                    <view class="top">
                        <view>
                            不会撰写爆款文案?
                        </view>
                       <view style="display: flex;align-items: center;">
                        <navigator url="/subpages/chatIndex/chatIndex" class="jddg" style="margin-right: 16rpx;">
                            AI智能文案
                        </navigator>
                        <view class="jddg" bindtap="toDraftWrite">
                            行业文案库
                        </view>
                       </view>
                    </view>
                    <!-- 顶部添加 -->
                    <view class="addCopy" bindtap="addCopy">
                        <image src="../../static/select/title/add.png" class="addImg"></image>添加自定义文案
                    </view>
                    <!-- 添加的文案内容 -->
                    <!-- 每一个 -->
                    <view  wx:for="{{editList}}" wx:key="index" class="listEvery e">
                        <view class="title">
                            第{{index+1}}个文案
                        </view>
                        <!-- 内容 -->
                        <view class="copywriter w">
                            <view class="wTxt">{{item.copy}}</view>
                            <view bindtap="delCopy" data-index="{{index}}" class="wImg"><image class="delImg" src="../../static/select/title/del.png"></image></view>
                            <van-dialog id="van-dialog" confirm-button-color="#586893" customStyle="border-radius:20rpx" confirmButtonText="确定"  />
                        </view>
                    </view>
                </view>

视频分发:采用代用户发布视频的形式

该能力的主要用途是:在用户授权的情况下,允许用户从开发者的应用上,将可公开的内容发布到用户自己的抖音账号作品里,并设置好相关的标题、话题、锚点等信息。

适用范围

当前能力仅支持网站应用进行申请开通。

使用场景

仅可在网站应用的电脑端网站中进行授权、使用,可用场景范围

  1. 【政务媒体】可支持政务或媒体机构,做内部的多媒体管理平台,但不可对外面向C端用户使用;(如果是代开发模式,代理公司需要提供授权书)
  2. 【企业服务】可支持企业服务平台,做面向抖音账号的内部内容管理服务平台,只可进行toB场景给到企业及企业员工针对自有账号使用;不可将后台的能力、授权码、相关功能暴露给线上或线下的普通用户使用;

所使用到的接口列表为

代码展示如下:


    /*
     * 新增场景
     */
    public function addSceneAction() {
        $dv_id  = $this->request->getIntParam('dv_id');
        $name   = $this->request->getStrParam('name');
        $scene_model    = new App_Model_Douyin_MysqlVideoSceneStorage();
        $video_model    = new App_Model_Douyin_MysqlVideoStorage();
        $video_item     = $video_model->getRowByIdSid($dv_id, $this->sid);
        if (empty($video_item)) {
            $this->displayJsonError('参数错误');
        }

        $max_scene  = $scene_model->getMaxSceneByDvid($dv_id);
        $indata = [
            'dvs_dv_id' => $dv_id,
            'dvs_ds_id' => $this->sid,
            'dvs_name'  => $name,
            'dvs_duration'  => $video_item['dv_video_shot']*1000,
            'dvs_scene' => $max_scene+1,
            'dvs_create_time'   => time(),
        ];
        $ret    = $scene_model->insertValue($indata);
        if ($ret) {
            $video_model->incNumberById('dv_video_use', 1, $dv_id);
        }
        $url    = "/dydqtshoppc/video/startProject?dv_id={$dv_id}&type=1&scene=".$indata['dvs_scene'];
        $this->displayJsonSuccess(['url' => $url], true, '添加成功');
    }

    public function deleteSceneAction() {
        $dv_id  = $this->request->getIntParam('dv_id');
        $scene  = $this->request->getIntParam('scene', 1);
        if ($scene == 1) {
            $this->displayJsonError('第一个场景不允许删除');
        }
        $scene_model    = new App_Model_Douyin_MysqlVideoSceneStorage();
        $video_model    = new App_Model_Douyin_MysqlVideoStorage();

        $where  = [
            ['name' => 'dvs_ds_id', 'oper' => '=', 'value' => $this->sid],
            ['name' => 'dvs_dv_id', 'oper' => '=', 'value' => $dv_id],
            ['name' => 'dvs_scene', 'oper' => '=', 'value' => $scene]
        ];
        $ret    = $scene_model->deleteValue($where);
        if ($ret) {
            $video_model->decNumberById('dv_video_use', 1, $dv_id);
        }
        $url    = "/dydqtshoppc/video/startProject?dv_id={$dv_id}&type=1&scene=1";
        $this->displayJsonSuccess(['url' => $url], true, '删除成功');
    }
    /*
     * 视频缓存
     */
    public function cacheVideoAction() {
        //面包屑
        $breadcrumbs = [
            ['title' => 'AI视频创意', 'link' => '#'],
            ['title' => '视频仓库', 'link' => ''],
        ];
        $this->buildBreadcrumbs($breadcrumbs);

        $dv_id  = $this->request->getStrParam('dv_id');
        $video_model    = new App_Model_Douyin_MysqlVideoStorage();
        $video_info     = $video_model->getRowByIdSid($dv_id, $this->sid);
        if (empty($video_info)) {
            $this->displayBlankPage('参数错误');
        }
        $this->output['video_info']     = $video_info;
        //获取视频缓存列表
        $where = [
            ['name' => 'dvtv_s_id', 'oper' => '=', 'value' => $this->sid],
            ['name' => 'dvtv_dv_id', 'oper' => '=', 'value' => $dv_id],
        ];
        $cache_model    = new App_Model_Douyin_MysqlVideoTempVideoStorage();
        $template_list  = $cache_model->getList($where,$this->index,$this->count);

        foreach ($template_list as &$item) {
            $item['score']  = 100 - min($item['dvtv_score'], 100);
            $use_platform   = empty($item['dvtv_use_platform']) ? [] : json_decode($item['dvtv_use_platform'], 1);
            $use_platform   = array_unique($use_platform);
            $item['used_count'] = count($use_platform);
            $item['used_platform']  = $use_platform;
        }

        //计算分页
        $template_list_all = $cache_model->getCount($where);
        $page_libs = new Libs_Pagination_Paginator($template_list_all,$this->count,'jquery',true);
        $pageHtml = $page_libs->render();

        $this->output['template_list']  = $template_list;
        $this->output['pageHtml']       = $pageHtml;
        $this->output['dv_id']          = $dv_id;
        $this->output_materail_link($dv_id, 0, $video_info);
        //点数展示
        $collect_model  = new App_Model_Douyin_MysqlCollectShopStorage();
        $collect_info   = $collect_model->getCollectSurplusBySid($this->sid);
        $this->output['collect_info']   = $collect_info;
        //预约列表
        $appoint_model  = new App_Model_Task_MysqlAppointTaskStorage();
        $appoint_where  = [
            ['name' => 'va_ds_id', 'oper' => '=', 'value' => $this->sid],
            ['name' => 'va_dv_id', 'oper' => '=', 'value' => $dv_id],
            #['name' => 'va_status', 'oper' => '<>', 'value' => 2],
        ];
        $appoint_sort   = ['va_status' => 'ASC'];
        $appoint_list   = $appoint_model->getList($appoint_where, 0, 1, $appoint_sort);
        $this->output['appoint_list']   = $appoint_list;
        $this->output['platform_list']  = $this->platform;
        $this->output['appoint_status'] = [
            0   => '<span style="color: #ff875c;">待执行</span>',
            1   => '<span style="color: darkgreen">执行中</span>',
            2   => '<span style="color: red">已结束</span>',
            3   => '<span style="color: #db4040;">异常中断</span>',
        ];

        $this->displaySmarty('dydqtshoppc/video/edit-project.tpl');
    }
    /*
     * 生成预览视频
     */
    public function previewVideoAction() {
        $dv_id  = $this->request->getIntParam('dv_id');
        $temp_id    = $this->request->getIntParam('temp_id', 0);
        $cache_model    = new App_Model_Douyin_MysqlVideoTempVideoStorage();
        $cache_video    = $cache_model->getPreviewVideo($dv_id);

        //判断点数
        $collect_model  = new App_Model_Douyin_MysqlCollectShopStorage();
        $collect_info   = $collect_model->getCollectSurplusBySid($this->sid);

        if (!$collect_info['cs_surplus']) {
            $this->displayJsonError('无可用点数,无法合成预览视频');
        }

        if (empty($temp_id)) {
            if ($cache_video) {
                $this->displayJsonSuccess(['path' => $cache_video['dvtv_video_path']], true, '合成成功');
            } else {
                $this->createTempVideoAction($dv_id, 1);
                $this->displayJsonSuccess(null, true, '预览视频正在努力合成中……');
            }
        } else {
            $cache_id   = empty($cache_video) ? 0 : $cache_video['dvtv_id'];
            if ($temp_id == $cache_id) {
                $this->displayJsonSuccess(null, true, '预览视频正在努力合成中……');
            } else {
                $this->displayJsonSuccess(['path' => $cache_video['dvtv_video_path']], true, '合成成功');
            }
        }
    }

 

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

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

相关文章

设计模式之结构型模式---代理模式

目录 1.概述2.代理模式类图3.应用场景3.1 功能增强3.2 控制访问 4.实现4.1 静态代理的实现4.1.1 实现静态代理模式的步骤4.1.2 静态代理的缺点 4.2 动态代理的实现4.2.1 Java JDK 动态代理的实现MethodInvocationHandlerProxy 4.2.2 JDK动态代理的使用方法4.2.3 JDK动态代理的实…

本内容由【想发APP】创始人编写:uniAPP申请百度广告后,开发者必须要空包签名验证应用的所有权,实现的详细内容如下

Android获取签名 注意先安装好jdk和jre&#xff0c;然后配置好环境变量 说明 空包签名需要本地配置jdk环境 Windows 安装JDK及环境变量的配置 命令行方式 命令格式&#xff1a; jarsigner -verbose -keystore [签名文件路径] -signedjar [签名后apk的文件路径] [未签名apk的文…

对顶堆学习笔记

对顶堆学习笔记 文章目录 **对顶堆学习笔记**介绍例题洛谷 P1168 中位数code 介绍 对顶堆是由一个大顶堆和一个小顶堆组合而成的数据结构&#xff0c;与传统堆维护最大数不同&#xff0c;对顶堆用于动态维护第k大的数。 对于对顶堆&#xff0c;我们可以用两个优先队列来表示两…

IllegalArgumentException: OnNoRibbonDefaultCondition异常与Maven Helper插件解决jar包冲突

在搭建Spring Cloud项目时&#xff0c;引入了不同版本的jar&#xff0c;导致项目启动时报错: main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.Bea…

Python 制作英文学习词典(简易版)

前言 今日分享 Python 制作英文学习词典&#xff0c;大家都可以尝试。 题目 制作英文学习词典。编写程序制作英文学习词典&#xff0c;词典有3个基本功能&#xff1a;添加、查询和退出。程序读取源文件路径下的txt格式词典文件&#xff0c;若没有就创建一个。词典文件存储方…

arcgis js 4.x加载自定义坐标系的arcgis server发布的wms服务

一、问题描述 一般城市本身用的都是自己定义的城市&#xff08;本地&#xff09;坐标系&#xff0c;没有对应公开的EPSG代码&#xff0c;如下图如果直接加载自定义坐标系的wms服务&#xff0c;直接会报错。 var customProjLayer new WMSLayer({url: "http://10.1.8.37:6…

封装一个带el-form的,带el-table的,带分页的,带搜索查询的dialog组件,很使用的二次封装组件。

#封装dialog小案例 提示&#xff1a;这是我工作中封装的代码&#xff0c;很使用&#xff0c;需要的可以拿去&#xff0c; 在我们的代码中往往会出现点击按钮出现弹窗进行操作&#xff0c;那么我们就需要对dialog进行一个二次封装。 下边是大概的一个样式。 ##对组件进行二次…

C语言中一维数组及二维数组的运用

1、int arr[] {12,3,4,5,6}; int * p arr; int * q &arr[1]; 其中arr是数组名&#xff0c;代表了整个数组的首元素地址&#xff0c;这个是一个常量&#xff0c;放在常量存储区&#xff0c;所以在给int*p赋值的时候可以不用带&&#xff0c;而下面的arr[1]则代表数…

unidbg或者java层解密方法IDEA中打包成jar包供python调用方法

一、导出jar包方法 &#xff08;1&#xff09;配置jar包参数 &#xff08;2&#xff09;创建生成jar包 成功生成&#xff01; 二、Python代码调用 import jpypejvmPath jpype.getDefaultJVMPath() d unidbg-android.jar # 对应jar地址 jpype.startJVM(jvmPath, "-ea&q…

cloudflared tunnel后台启动

前期视频链接 先前台启动&#xff0c;本文参考 cloudflared tunnel --url localhost:88 run ruoyu 或者 cloudflared tunnel --url localhost:88 --no-chunked-encoding run ruoyu找到你的uuid.json 文件 创建你的config.yaml 或config.yml 内容如下 uuid 配置自己的 url: …

创建员工表并按要求完成数据

mysql> create table employee( id int primary key, name varchar(50), gender enum(男,女) default 男, salary int ); Query OK, 0 rows affected (0.01 sec)mysql> mysql> desc employee; ------------------------------------------------------ | Field | T…

spring重点标签有哪些

<bean>标签 id属性:在容器中Bean实例的唯一标识&#xff0c;不允许重复 class属性:要实例化的Bean的全限定名 scope属性:Bean的作用范围&#xff0c;常用是singleton(默认)和prototype <property>标签:属性注入 name属性:属性名称 value属性:注入的普通属性值 ref属…

Perfetto概览

1、Perfetto 简介 Perfetto是谷歌提供的一个用于性能检测和 trace 文件抓取分析的生产级开源工具包。它可以帮助我们进行应用层面以及系统层面的 trace 文件抓取、native/java 内存剖析。它还提供了一个强大的库能够帮助我们在 web 网页上对抓取的trace 文件进行可视化分析&am…

java项目之农产品供销服务系统(ssm+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的农产品供销服务系统。 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;ssm&#xff0c;mybatis JDK…

关于chrome禁止混合内容造成的问题

混合内容 chrome 对混合内容的定义 是指 存储于http协议下的静态资源与https协议下的资源混用 Chrome官方相关说明 chrome 通过安全策略将 http强制转换为https 这会导致存储于http协议下的 文件出现协议问题从而无法访问 例&#xff1a; 从http文件服务器中引用一张图片到配…

LinearAlgebraMIT2_1_TheColumnSpaceOfAContainsAllVectorsAx

对于Axb&#xff0c;我们要迅速想到线性组合&#xff0c;如下&#xff0c; 我们也可以使用rank秩来反应一个矩阵的特征&#xff0c;如果满秩则可以表示整个向量空间&#xff0c;如上只有两个independent column&#xff0c;它的rank2&#xff0c;表达一个plane平面。 接下来我…

一款玩法十分经典的RPG游戏《QQ宠物大乐斗2》

文章目录 介绍界面介绍游戏主界面&#xff1a;出城界面&#xff1a; 战斗系统主动战斗被动战斗 技能系统主动技能被动技能五神技狂龙傲天拳惊天混元掌灵气寒霜指道威无极真气八卦迷踪腿 道具系统装备系统装备品质装备展示装备获得方式 玩家升级系统通过升级增加属性点使用道具更…

MySQL复习指南

1.数据类型 【数值型】 int或者integer&#xff0c;大小为4个字节&#xff0c;范围&#xff1a;&#xff08;大约&#xff09;-21.5亿~21.5亿&#xff1b; bigint&#xff0c;大小为8个字节&#xff1b; float大小为4个字节&#xff1b; double大小为8个字节&#xff1b; …

为什么要做海外应用市场排名

谷歌和苹果iOS应用商店的算法关键指标&#xff0c;都是基于确保应用商店推荐的应用可以满足大部分用户的需求。基于此&#xff0c;应用覆盖的关键词&#xff0c;应用评分和评论&#xff0c;和应用获取的下载量所体现的用户体验数据&#xff0c;对我们的应用能否获得商店高排名都…

Ajax简介和实例

目录 什么是 AJAX &#xff1f; AJAX实例 ajax-get无参 ajax-get有参 对象和查询字符串的互转 ajax-post ajax-post 表单 AJAX 是一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。 什么是 AJAX &#xff1f; 菜鸟教程是这样介绍的&#xff1a…