当前位置: 首页 > news >正文

ChatGPT + Stable Diffusion + 百度AI + MoviePy 实现文字生成视频,小说转视频,自媒体神器!(一)

ChatGPT + Stable Diffusion + 百度AI + MoviePy 实现文字生成视频,小说转视频,自媒体神器!(一)

前言

最近大模型频出,但是对于我们普通人来说,如何使用这些AI工具来辅助我们的工作呢,或者参与进入我们的生活,就着现在比较热门的几个AI,写个一个提高生产力工具,现在在逻辑上已经走通了,后面会针对web页面、后台进行优化。

github链接 https://github.com/Anning01/TextCreateVideo

B站教程视频 https://www.bilibili.com/video/BV18M4y1H7XN/

那么从一个用户输入文本到生成视频,我分成了五个步骤来做。
在这里插入图片描述

其中2、3 和 4 没有关系,后期做成异步并行。

第一步、将用户输入的文本进行段落切割。

我这里默认用户输入的为txt文件,也是建议一章一章来,太大并不是不可以执行,只是时间上耗费太多,当然4080用户除外!

from config import file_pathclass Main:def txt_handle(self, filepath):"""txt文件处理:return:"""file = open(file_path + filepath, 'r')content = file.read().replace('\n', '')return content.split('。')

这里比较简单,现在也没有做前端页面,现在将文件放在指定的目录下,会将txt文件按照中文“。”来切片。后期考虑有传整本的需求,会加上数据库进行持久化,按照章节区分,按章节来生成视频。


第二步、使用chatGPT生成提示词

我ChatGPT的免费调用API次数没了,最优选肯定是原生调用ChatGPT的api,但是没有这个条件,我选择了一些提供ChatGPT的API中间商
fastapi 和 API2D

from SDK.ChatGPT.FastGPT.app import Main as FM
from SDK.ChatGPT.API2D.app import Main as AM
from config import apikey, appId, ForwardKeyclass Main:# 默认反向提升词negative = "NSFW,sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, bad anatomy,(long hair:1.4),DeepNegative,(fat:1.2),facing away, looking away,tilted head, {Multiple people}, lowres,bad anatomy,bad hands, text, error, missing fingers,extra digit, fewer digits, cropped, worstquality, low quality, normal quality,jpegartifacts,signature, watermark, username,blurry,bad feet,cropped,poorly drawn hands,poorly drawn face,mutation,deformed,worst quality,low quality,normal quality,jpeg artifacts,signature,watermark,extra fingers,fewer digits,extra limbs,extra arms,extra legs,malformed limbs,fused fingers,too many fingers,long neck,cross-eyed,mutated hands,polar lowres,bad body,bad proportions,gross proportions,text,error,missing fingers,missing arms,missing legs,extra digit, extra arms, extra leg, extra foot,"# 默认提示词prompt = "best quality,masterpiece,illustration, an extremely delicate and beautiful,extremely detailed,CG,unity,8k wallpaper, "def create_prompt_words(self, text_list: list):"""生成英文提示词:return: [{prompt, negative, text, index},...]"""# 包含着 坐标、英文提示词、英文反向提示词、中文文本 列表data = []instance_class_list = []if all([apikey, appId]):instance_class_list.append(FM())if ForwardKey:instance_class_list.append(AM())for index, value in enumerate(text_list):prompt = instance_class_list[0].prompt_generation_chatgpt(value)if not prompt:if len(instance_class_list) >= 1:instance_class_list.pop(0)prompt = instance_class_list[0].prompt_generation_chatgpt(value)if not prompt:print("------fastgpt和API2D都无法使用---------")raise Exception("请检查代码")else:print("------fastgpt和API2D都无法使用---------")raise Exception("请检查代码")print(f"-----------生成第{index}段提示词-----------")data.append({"index": index,"text": value,"prompt": self.prompt + prompt,"negative": self.negative,})return data

我将两个api接口做成插件式的,并且保证一个坏了可以去使用另一个

fastGPT

class Main:apikey = apikeyappId = appIdurl = "https://fastgpt.run/api/openapi/v1/chat/completions"def prompt_generation_chatgpt(self, param):# 发送HTTP POST请求headers = {'Content-Type': 'application/json','User-Agent': 'Apifox/1.0.0 (https://www.apifox.cn)','Authorization': f'Bearer {self.apikey}-{self.appId}'}data = {"stream": False,# "chatId": "3232","messages": [{"content": '根据下面的内容描述,生成一副画面并用英文单词表示:' + param,"role": "user"}]}json_data = json.dumps(data)# 发送HTTP POST请求response = requests.post(self.url, data=json_data, headers=headers)result_json = json.loads(response.text)if response.status_code != 200:print("-----------FastAPI出错了-----------")return False# 输出结果return result_json['responseData'][0]['answer']

API2D

import requests
from config import ForwardKeyclass Main:ForwardKey = ForwardKeyurl = "https://openai.api2d.net/v1/chat/completions"def prompt_generation_chatgpt(self, param):# 发送HTTP POST请求headers = {'Content-Type': 'application/json','Authorization': f'Bearer {ForwardKey}'# <-- 把 fkxxxxx 替换成你自己的 Forward Key,注意前面的 Bearer 要保留,并且和 Key 中间有一个空格。}data = {"model": "gpt-3.5-turbo","messages": [{"role": "user", "content": '根据下面的内容描述,生成一副画面并用英文单词表示:' + param, }]}response = requests.post(self.url, headers=headers, json=data)print("-----------进入API2D-----------")if response.status_code != 200:return False# 发送HTTP POST请求result_json = response.json()# 输出结果return result_json["choices"][0]["message"]["content"]

相关文章:

ChatGPT + Stable Diffusion + 百度AI + MoviePy 实现文字生成视频,小说转视频,自媒体神器!(一)

ChatGPT Stable Diffusion 百度AI MoviePy 实现文字生成视频&#xff0c;小说转视频&#xff0c;自媒体神器&#xff01;(一) 前言 最近大模型频出&#xff0c;但是对于我们普通人来说&#xff0c;如何使用这些AI工具来辅助我们的工作呢&#xff0c;或者参与进入我们的生活…...

linux strcpy/strncpy/sprintf内存溢出问题

本文主要介绍strcpy/strncpy/sprintf都是不安全的&#xff0c;可能存在内存溢出的问题。下来进行实例分析。 strcpy代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdbool.h>void test_func(char *str) {b…...

Jmeter如何添加插件

一、前言 ​ 在我们的工作中&#xff0c;我们可以利用一些插件来帮助我们更好的进行性能测试。今天我们来介绍下Jmeter怎么添加插件&#xff1f; 2023最新Jmeter接口测试从入门到精通&#xff08;全套项目实战教程&#xff09; 二、插件管理器 ​ 首先我们需要下载插件管理器j…...

flask---CBV使用和源码分析

1 cbv写法 -1 写个类&#xff0c;继承MethodView-2 在类中写跟请求方式同名的方法-3 注册路由&#xff1a;app.add_url_rule(/home, view_funcHome.as_view(home))#home是endpoint&#xff0c;就是路由别名#例子 class add(MethodView):def get(self):return holleapp.add_url…...

Qt 实现压缩文件、文件夹和解压缩操作zip

一、实现方式 通过Qt自带的库来实现&#xff0c;使用多线程方式&#xff0c;通过信号和槽来触发压缩与解压缩&#xff0c;并将压缩和解压缩结果回传过来。 使用的类&#xff1a; #include "QtGui/private/qzipreader_p.h" #include "QtGui/private/qzipwriter…...

简单工厂模式VS策略模式

简单工厂模式VS策略模式 今天复习设计模式&#xff0c;由于简单工厂模式和策略模式太像了&#xff0c;重新整理梳理一下 简单工厂模式MUL图&#xff1a; 策略模式UML图&#xff1a; 1、简单工厂模式中只管创建实例&#xff0c;具体怎么使用工厂实例由调用方决定&#xff0c…...

【MySQL】触发器 (十二)

🚗MySQL学习第十二站~ 🚩本文已收录至专栏:MySQL通关路 ❤️文末附全文思维导图,感谢各位点赞收藏支持~ 一.引入 触发器是与表有关的数据库对象,作用在insert/update/delete语句执行之前(BEFORE)或之后(AFTER),自动触发并执行触发器中定义的SQL语句集合。它可以协助应…...

听说 Spring Bean 的创建还有一条捷径?

文章目录 1. resolveBeforeInstantiation1.1 applyBeanPostProcessorsBeforeInstantiation1.2 applyBeanPostProcessorsAfterInitialization1.3 案例 2. 源码实践2.1 切面 Bean2.2 普通 Bean 在 Spring Bean 的创建方法中&#xff0c;有如下一段代码&#xff1a; AbstractAutow…...

大数据课程E6——Flume的Processor

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Processor的概念和配置参数; ⚪ 掌握Processor的使用方法; ⚪ 掌握Processor的Default Processo; ⚪ 掌握Processor的Load Balance Processo; 一、Failover Sink Processor 1. …...

实现邮箱管理之gmail邮箱、office365(Azure)邮箱之披荆斩棘问题一览

要进行Office365邮箱的授权对接&#xff0c;你需要先申请一个应用&#xff0c;并获取授权访问令牌。 以下是一个简单的步骤&#xff1a; 登录 Azure 门户&#xff1a;https://portal.azure.com/创建一个新的应用程序&#xff0c;或者使用现有的应用程序。要创建新的应用程序&…...

(AcWing)多重背包问题 I,II

有 N 种物品和一个容量是 V 的背包。 第 i 种物品最多有 si 件&#xff0c;每件体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使物品体积总和不超过背包容量&#xff0c;且价值总和最大。 输出最大价值。 输入格式 第一行两个整数 N&#xff0c;…...

如何把几个视频合并在一起?视频合并方法分享

当我们需要制作一个比较长的视频时&#xff0c;将多个视频进行合并可以使得整个过程更加高效。此外&#xff0c;合并视频还可以避免出现“剪辑断层”的情况&#xff0c;使得视频内容更加连贯&#xff0c;更加容易被观众理解和接受。再有&#xff0c;合并视频还可以减少视频文件…...

【MyBatis】初学MyBatis

目录 MyBatis 是什么&#xff1f;MyBatis框架搭建1.添加MyBatis框架2.设置MyBatis配置数据库的相关链接信息xml 保存路径和命名格式 根据MyBatis写法完成数据库的操作MyBatis插件MyBatis传递参数查询${} 和 #{} 有什么区别&#xff1f;SQL注入问题 MyBatis like查询MyBatis多表…...

深度学习训练营之DCGAN网络学习

深度学习训练营之DCGAN网络学习 原文链接环境介绍DCGAN简单介绍生成器&#xff08;Generator&#xff09;判别器&#xff08;Discriminator&#xff09;对抗训练 前置工作导入第三方库导入数据数据查看 定义模型初始化权重定义生成器generator定义判别器 模型训练定义参数模型训…...

自定义MVC增删改查

目录 mymvcdemo是自定义mvc框架的使用示例 1.1 实体类 1.2 dao方法 1.3 写Service / biz 三层架构 1.4 建action 相当于selvert 1.5 con连接MySQL 8.0 版本 1.6 配置文件 XML 1.7 主界面布局 1.8 增加界面布局 1.9 写tld配置文件 2.0 注意架包 我是已经打包好的 mymv…...

RabbitMQ 教程 | 第2章 RabbitMQ 入门

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…...

双网卡如何配置DNS?我是一个仅主机模式配置静态(static)IP、一个NET或桥接(dhcp获取)

目录 一、所有主机初始化 二、135、136服务器&#xff0c;部署DNS调度服务器 1、更改主机主从DNS服务器的主机名称 2、安装bind软件、修改主配置文件 3、修改区域配置文件 4、修改数据文件 5、启动named服务、修改网卡信息 6、解析 7、双网卡的话记得注释以下内容、注…...

Android10: 动态隐藏导航栏和状态栏总结

&#xff08;1&#xff09;全屏相关设置 //&#xff08;1&#xff09;主题添加 <item name"android:windowFullscreen">true</item>//&#xff08;2&#xff09;setContentView之前添加 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCRE…...

roop 视频换脸

roop: one click face swap. 只用一张人脸图片&#xff0c;就能完成视频换脸。 项目地址&#xff1a; https://github.com/s0md3v/roopColab 部署&#xff1a; https://github.com/dream80/roop_colab 本文是本地部署的实践记录。 环境基础 OS: Ubuntu 22.04.2 LTSKernel: 5…...

Java类集框架(一)

目录 1.Collection集合接口 2.List 接口 (常用子类 ArrayList ,LinkedList,Vector) 3.Set 集合 接口(常用子类 HashSet LinkedHashSet,TreeSet) 4.集合输出(iterator , Enumeration) 1.Collection集合接口 Collection是集合中最大父接口&#xff0c;在接口中定义了核心的…...

Jsp+Ssh+Mysql实现的简单的企业物资信息管理系统项目源码附带视频指导运行教程

由jspssh&#xff08;springstruts2mysql&#xff09;实现的企业物资信息管理系统&#xff0c;系统功能比较简单&#xff0c;实现了基本的管理员、操作员等用户管理、物品分类管理、物品管理、入库管理、出库管理、库存预警、客户管理、供应商管理等基本功能需要的可以联系我分…...

【Spring】深究SpringBoot自动装配原理

文章目录 前言1、main入口2、SpringBootApplication3、EnableAutoConfiguration4、AutoConfigurationImportSelector4.1、selectImports()4.2、getAutoConfigurationEntry()4.3、getCandidateConfigurations()4.4、loadFactoryNames() 5、META-INF/spring.factories6、总结 前言…...

阿里云负载均衡SLB网络型NLB负载均衡架构性能详解

阿里云网络型负载均衡NLB是阿里云推出的新一代四层负载均衡&#xff0c;支持超高性能和自动弹性能力&#xff0c;单实例可以达到1亿并发连接&#xff0c;帮您轻松应对高并发业务。网络型负载均衡NLB具有超强性能、自动弹性伸缩、高可用、TCPSSL卸载、多场景流量分发和丰富的高级…...

JavaScript学习 -- SM4算法应用实例

SM4算法&#xff0c;也被称为国密算法&#xff0c;是中国公布的一种高效且安全的对称加密算法。在JavaScript中&#xff0c;我们可以通过使用CryptoJS库来实现SM4算法的加密和解密。本篇博客将为您介绍如何在JavaScript中使用SM4算法&#xff0c;并提供一个实际的案例。 首先&…...

【JVM】什么是双亲委派机制

文章目录 1、类加载机制2、双亲委派模型2.1、介绍2.2、为什么需要双亲委派2.3、源码解析 3、破坏双亲委派3.1、介绍3.2、破坏实现3.3、破坏双亲委派的例子 4、线程上下文类加载器 1、类加载机制 类加载阶段分为加载、连接、初始化三个阶段&#xff0c;而加载阶段需要通过类的全…...

网络安全 Day24-select高级用法和多表连接

select高级用法和多表连接 1. select 多子句单表高级实践1.1 select 多子句高级语法1.2 聚合函数1.3 group by 实践1.4 having 筛选1.5 order by 排序1.6 limit 2. 多表连接 1. select 多子句单表高级实践 1.1 select 多子句高级语法 where 和 having 区别是后者是分组后进行…...

JUC并发编程之volatile详解

目录 1. volatile 1.1 volatile关键字的作用 1.1.1 变量可见性 1.1.2 禁止指令重排序 1.2 volatile可见性案例 1.3 volatile非原子性案例 1.4 volatile 禁止重排序 1.5 volatile 日常使用场景 送书活动 1. volatile 在并发编程中&#xff0c;多线程操作共享的变量时&a…...

swing布局详解

1. 布局管理器接口 &#xff08;1&#xff09;说明 布局管理器接口为LayoutManager和LayoutManager2&#xff0c;LayoutManager2是LayoutManager的子类。 &#xff08;2&#xff09;常用方法 方法描述LayoutManageraddLayoutComponent(String name, Component comp) removeL…...

el-table某一列嵌套使用el-popover,使用click触发,导致页面下拉框组件无法触发弹框关闭(解决办法)

在弹框触发的方法里加上document.body.click() 即可 尝试了很多其他的方法都没用&#xff0c;只有这个解决了 完整代码&#xff1a; <el-select change"sourceChange" clearable ><el-optionv-for"option in list1":key"option.code":…...

正泰电力携手图扑:VR 变电站事故追忆反演

VR(Virtual Reality&#xff0c;虚拟现实)技术作为近年来快速发展的一项新技术&#xff0c;具有广泛的应用前景&#xff0c;支持融合人工智能、机器学习、大数据等技术&#xff0c;实现更加智能化、个性化的应用。在电力能源领域&#xff0c;VR 技术在高性能计算机和专有设备支…...