从小说到视频:用 Flask + Vue 搭一个可编辑的文本转视频系统(入门实战)

零基础玩转IndexTTS2:5分钟搭建个人语音克隆工具(支持B站同款情感语音) 本文详细介绍了如何零基础使用IndexTTS2快速搭建个人语音克隆工具,支持B站同款情感语音。IndexTTS2作为自回归零样本TTS系统,突破传统技术限制,实现精准时长控制和丰富情感表达。通过HuggingFace在线演示,用户可轻松克隆音色并调节情感参数,适用于自媒体配音、有声书朗读等场景。 阅读详情

前言
很多人想把小说或长文本“可视化”,但常见痛点是:

模型输出是 JSON,普通用户难以编辑
视频生成是异步任务,提交后不知道怎么查结果
需要一套完整流程:录入 → 分析 → 编辑 → 提交 → 查询
本文用一个入门级的 Flask + Vue 小系统,把“小说转视频”流程跑通,同时保留编辑能力。

目标效果

输入章节文本
自动分析 人物 / 场景 / 分镜
结果支持表单编辑(可切换原始 JSON)
提交后得到 task_id
超时后可通过查询接口拿到结果

  1. 项目结构
    videoAgent/
    web_app.py
    templates/
    index.html
    services/
    video_service.py
    task_store.py
    agents/
    character_agent.py
    scene_agent.py
    storyboard_agent.py
    prompt/
    character_prompt.py
    scene_prompt.py
    storyboard_prompt.py

  2. 核心思路
    后端(Flask)

/api/analyze:调用三步 LLM 分析(人物/场景/分镜)
/api/submit:提交视频生成任务并记录 task_id
/api/tasks:列出任务
/api/task/<task_id>:查询任务结果
前端(Vue)

表单方式编辑人物/场景/分镜
“切换原始 JSON”给进阶用户
提交后展示任务列表并支持查询

  1. 后端实现
    3.1 任务存储(JSON 文件持久化)
# services/task_store.py
import json, os, threading, time

TASK_DB = os.path.join("memory", "tasks.json")
_lock = threading.Lock()

def _load():
    if not os.path.exists(TASK_DB):
        return {}
    with open(TASK_DB, "r", encoding="utf-8") as f:
        return json.load(f)

def _save(data):
    os.makedirs(os.path.dirname(TASK_DB), exist_ok=True)
    with open(TASK_DB, "w", encoding="utf-8") as f:
        json.dump(data, f, ensure_ascii=False, indent=2)

def create_task(task_id, payload):
    now = int(time.time())
    with _lock:
        data = _load()
        data[task_id] = {"task_id": task_id, "status": "PENDING", "created_at": now, "updated_at": now, **payload}
        _save(data)

3.2 视频任务提交 + 查询

# services/video_service.py
def submit_video_task(prompt, size="1920x1080", fps=30, quality="speed", with_audio=True, duration=10, max_retry=5):
    ...
    for i in range(max_retry):
        resp = requests.post(API_URL, headers=headers, json=data)
        if resp.status_code == 429:
            time.sleep(2 + i * 2)
            continue
        if resp.status_code >= 400:
            raise ValueError(...)
        result = resp.json()
        task_id = result.get("id")
        if task_id:
            return task_id
    raise ValueError("触发频率限制")

3.3 Flask 入口

# web_app.py
@app.post("/api/analyze")
def analyze():
    payload = request.get_json(force=True)
    chapter_text = (payload.get("chapter_text") or "").strip()
    characters = extract_characters(chapter_text)
    scenes = extract_scenes(chapter_text)
    storyboard = generate_storyboard(scenes)
    return jsonify({
        "characters": characters,
        "scenes": scenes,
        "storyboard": storyboard if isinstance(storyboard, list) else storyboard["scenes"]
    })

  1. 前端实现
    4.1 Vue 表单模式(可编辑)
<div v-for="(c, idx) in characters" :key="idx">
  <input v-model="c.name" placeholder="name" />
  <input v-model="c.gender" placeholder="gender" />
  <input v-model="c.abilitiesText" placeholder="abilities (逗号分隔)" />
</div>

4.2 切换原始 JSON

<button @click="toggleRaw('characters')">切换原始 JSON</button>
<textarea v-if="showRaw.characters" v-model="charactersJson"></textarea>

效果图
在这里插入图片描述
在这里插入图片描述

微信商家转账报错“当前使用用户过多,请稍后重新确认收款”解决方案 当前使用用户过多,请稍后重新确认收款”这个错误,其实就是典型的参数误处理导致的假报错。记住一句话就行👇JSAPI 场景下的package参数不要做 UrlEncode。如果你也遇到这个问题,希望这篇文章能帮你少踩一个坑。 阅读详情

相关推荐

开关电源补偿设计避坑手册:为什么你的Buck电路总在轻载时振荡?

本文深入剖析了Buck电路在轻载时发生振荡的根本原因,并提供了专业的补偿设计避坑指南。文章指出,轻载下输出滤波器Q值飙升、DCM模式切换导致的小信号模型剧变是主要诱因,并详细对比了Type II与Type III补偿网络在宽负载范围内的表现差异。通过结合LTspice仿真与工程实践,指导工程师如何优化补偿环路设计,确保电源从满载到空载的全程稳定。

hadoop5ranger的博客 675

基于Spark的小说推荐和可视化分析系统源码设计与文档

在网络文学平台用户个性化需求与运营数据分析需求升级的背景下,传统小说推荐存在 “效率低、精准度不足”,数据可视化 “维度单一、实时性差” 的痛点,基于 Spark 构建的小说推荐和可视化分析系统,适配网络文学平台运营、读者等多角色,实现高效精准的小说推荐与多维度数据可视化分析。 从技术架构层面,采用 Spark 作为核心计算框架,依托 Spark MLlib 实现协同过滤、基于内容的混合推荐算法,处理千万级用户阅读行为(点击、收藏、阅读时长、评分)与小说特征数据(题材、作者、字数、标签),解决传统单机推荐算

博主自己就是程序员、避免中介对接,从事软件开发多年,累计开发或辅导多名同学, 有丰富的项目开发和文档编写经验、同学们有任何项目问题都可以联系我~ 1060

Second-Order Cone Programming(SOCP) 二阶锥规划

个人博客Glooow,欢迎各位老师来踩踩 文章目录1. 二阶锥1.1 二阶锥定义1.2 二阶锥约束2. 优化问题建模3. 类似问题转化3.1 二次规划3.2 随机线性规划4. 问题求解 1. 二阶锥 1.1 二阶锥定义 在此之前,先给出二阶锥的定义。 在 kkk 维空间中二阶锥 (Second-order cone) 的定义为 Ck={[ut]∣u∈Rk−1,t∈R,∥u∥≤t} \mathc...

Glooow的博客 3万+

021-基于Python爬虫的网络小说数据分析系统的设计与实现

随着互联网技术的发展,网络小说数量爆炸式增长,用户面临信息过载问题。本研究旨在设计并实现一个基于Python爬虫的网络小说数据分析系统,以解决用户在海量小说资源中快速找到符合口味作品的难题。系统采用Python语言开发,结合Flask框架、MySQL数据库以及机器学习算法等技术,实现了数据的采集、存储、分析和可视化展示等功能。

2301_77541824的博客 1077

STM32F407 步进电机S形曲线加减速

步进电机

smallerlang的博客 1591

Linux下OpenFire+Spark即时通讯环境搭建全攻略(含证书错误解决方案)

本文提供了一份详尽的Linux环境下OpenFire服务器与Spark客户端即时通讯系统的搭建与配置全攻略。内容涵盖从环境规划、服务端部署、数据库配置到客户端连接的全流程,并重点解决了Spark连接时常见的证书验证错误问题,为企业构建私有化、高可用的XMPP通讯平台提供了实战指导。

weixin_29251131的博客 165

毕业设计论文-基于Python+Vue协同过滤算法的小说推荐系统(支持Django框架/Flask框架)

✌全网粉丝100W+,优快云特邀作者、博客专家、优快云新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、Python、PHP、小程序、大数据技术领域和毕业项目实战✌

weixin_bscoding 1020

STM32控制舵机SG-5010转动,HAL库

首先设置时钟为72Mhz,预分频系数为72-1,自动重装载计数器的值为5000-1,这样的话就可以得到一个5ms的脉冲宽度,5000的计数值可以让舵机的旋转角度变得更加易控且相对精准,计算旋转角度的时候也可以更加精确。所以我们5ms脉宽,period是5000脉宽-------------角度----------pulse0.5ms-------------0度----------500;1.0ms------------45度---------1000;

qq_73783264的博客 1293

基于python爬虫的网络小说数据分析系统

✌博主多年开发实战经验,曾被CDN特邀博客之星、技术开发领域专家,全网拥有百万粉丝,主要从事与Java、小程序、Python、PHP、大数据、爬虫、单片机等领域的开发工作,帮助过上万名同学开发程序系统✌

weixin_44952775的博客 876

半导体EAP系统入门指南:从零开始理解设备自动化程序(附实战案例)

本文深入浅出地介绍了半导体制造中EAP(设备自动化程序)系统的核心作用与工作原理。EAP作为连接MES与生产设备的桥梁,负责指令翻译、数据采集与实时控制,是实现晶圆厂全自动化的关键。文章通过对比手动与自动模式,阐述了EAP在提升效率、保障良率方面的价值,并提供了一个实战案例,帮助读者从零构建对半导体CIM体系中这一关键组件的理解。

weixin_29200741的博客 736

Simulink中Simscape—Fluids模块(原Simhydraulics)学习记录

学习来源:http://cn.mathworks.com/help/physmod/hydro/getting-started-with-simhydraulics.html 主要学习内容如下图: 详细内容: 1、组件来源 SIMULINK浏览器中的模块:Simscape_Foundation 和 Simscape_Fluids。 2、Simscape下包括多个子

1万+

【课程设计/毕业设计】基于python的电子书阅读系统的设计与实现基于Python的小说阅读系统的设计与实现【附源码、数据库、万字文档】

【课程设计/毕业设计】基于python的电子书阅读系统的设计与实现基于Python的小说阅读系统的设计与实现【附源码、数据库、万字文档】

1074

从矩阵理论角度理解偏最小二乘回归,以及在脑科学中(脑影像与行为、基因表达的关系)的应用举例

偏最小二乘法 (PLS) 是一种多元数据驱动的统计技术,旨在提取表示最大大脑行为关联的潜在变量(或潜在成分 latent components [LC])。

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 975

微软技术日报 2026-11-05:安装器变现链被拆开、OneLake 托管 MCP、Agent 365 进 Gartner 象限

把这几条放在一起看,共同点是把已经铺开的东西补上治理。安装器那条最直白。用户自己点开的程序,装完还会往回连,落地的东西藏在计划任务里、Program Files 里,用户不知道。微软给的检测思路也是往这个方向走的,看临时目录、看回调、看 SYSTEM 任务,而不是追域名。OneLake 那条是给 agent 补路标。以前每种 item 类型都要维护一份端点清单,现在让服务自己报出来。好处是 agent 不用猜,代价是判断责任转移到了客户端,技能要不要加载得自己决定,标签也不能当成授权。

海盗Sharp的博客 1421

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VsCode中搭建Python3.12+Flask3.1.3+Mysql5.7开发虚拟环境

在 VS Code 里搭这套环境,本质就三件事:用 venv 隔离解释器 → 让 VS Code 选中这个解释器 → 用纯 Python 驱动连上 MySQL。最容易翻车的不是装包,而是「终端激活了 venv,但 VS Code 还在用全局 Python」,以及 mysqlclient 在 Windows 上编译失败。下面按一次能跑通的顺序来。

duansamve的博客 384

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

flask服务端页面预防被爬措施

但我不推荐robots.txt,一是会暴露敏感路径,二是太麻烦,后续多个页面不好逐一添加.如果短时间一直访问,浏览量只会加一。

hhcgchpspk的博客 163

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

忘记密码只能找客服:Flask邮箱验证码重置密码加限流防爆破

答辩现场最尴尬的问题,排得上号的一个是:"你用户忘了密码怎么办?" 你要是回"后台能改"或"联系管理员",老师多半会追一句:"那系统上线了,管理员天天帮人改密码?" 找回密码看着小,实际踩在账号安全、邮件服务、限流、令牌管理四个点上。写好了加分,写糙了就是个筛子。 我这版改了三次,前两次都是被自己攻破的。下面按"把流程拆成环节,看每个环节能被怎么打"来讲,你拿清单对着自己的项目逐条过就行。

梅雅达编程笔记的博客 446

Flask 项目与Alembic数据库迁移

图片字段模型属性类型约束MO_NUMBERmo_numberString(50)唯一、非空、索引MODEL_NAMEmodel_name非空TARGET_QTYtarget_qty非空、默认 0INPUT_QTYinput_qty非空、默认 0OUTPUT_QTYoutput_qty非空、默认 0ROUTE_CODEroute_codeString(50)可空、索引CLOSE_FLAGclose_flagString(1)非空、默认 'N'String(50)可空。

一支黑色の铅笔博客 229

下单不付款库存被占?Flask定时任务自动取消超时订单+回滚库存

先还原一个事故现场。 你的商城里有一件爆款卫衣,库存30件。有人一口气点了3件下单,然后……不付款了。 订单挂在"待支付",库存照05篇讲的逻辑已经扣掉了。真正想买的人进来一看:库存不足。

梅雅达编程笔记的博客 863

退款之后钱货两空:Flask售后退款状态机加库存回滚加原路退回

我在自己项目里干过件蠢事:一个 199 元的订单,连点三次"申请退款"。 结果退了三次,598 块。 原因不复杂。我在订单表加了个 is_refund 字段,点一次改 1,接口里判断"已经是 1 就不给退"。可三次请求几乎是同时到的,三次都读到了 is_refund = 0。 这事让我想明白一句:退款不是订单的一个状态,它是一张独立的单子。 一笔订单可能退一次全款,也可能分两次退部分款——先退一件,再退另一件;还可能被驳回后重新申请。用一个布尔字段去表达这些,怎么都表达不完。

梅雅达编程笔记的博客 126

VsCode中搭建Python3.12+Flask3.1.3+PostgreSQL 18开发虚拟环境

已装 Python 3.12(终端 python --version 能看到 3.12.x)已装 PostgreSQL(本地或局域网,记住账号/库名/端口 5432)

duansamve的博客 194

路面裂缝宽度分布与走向参数提取系统:基于骨架提取的 Flask Web 实现

本系统是一套基于骨架提取技术的路面裂缝智能分析 Web 平台。上传路面图像后,系统自动执行"预处理—分割—骨架提取—宽度/走向分析—标定—可视化—导出"流水线,将裂缝形态量化为宽度分布与走向参数,为路面病害评估提供数据支撑。

weixin_49081159的博客 529

vueDiff算法

【代码】vueDiff算法。

qq_35359474的博客 91

vue 表格 vxe-table 如何让下拉筛选弹窗根据屏幕自动更新位置

vxe-table 通过 filterConfig.transfer: true 将筛选面板渲染至 document.body,解决因容器 overflow: hidden 导致的面板裁剪问题。面板基于视口自动定位,空间不足时向上翻转,滚动与窗口缩放时动态更新位置,确保始终可见且不被遮挡。生效前提:列需配置 filterRender,表格需有固定高度或处于可滚动容器中。该配置为表格级设置,适用于所有启用了筛选的列。

chocolate2s的博客 253

前端登录页面的书写与验证(后端)

如果有该用户就登录成功跳转至主页,如果没有用户和密码错误就登录失败不跳转。(3)写后端代码,接受前端请求并返回数据(新建目录houduan,在houduan/index.js写入)(2)前端配置路由地址,方便登录成功后页面的跳转(在routers.js写入)输入admin和123456,就可以实现登录并跳转至主页(内容暂时没有写)了。(4)后端操作数据库拿数据(在houduan/login_bs.js写入)(1)前端代码(在login2.vue文件写入)先启动后端:在terminal终端输入以下命令。

weixin_46452278的博客 210

Razor 视图 + JavaScript + Vue/iView 组件实现的表格自定义列

本文介绍了如何在 Razor 视图项目中,通过 JavaScript 初始化 Vue 实例,并利用 iView Table 实现表格自定义列。该方案的要点是:服务端输出列定义和行数据,前端将列配置转换为响应式数据,用户通过勾选或拖拽控制列的显隐与顺序。通过本地存储保存用户偏好后,表格自定义列还能在多次访问中保持一致,提升系统的易用性。

qq_59041750的博客 306
上一篇: AI舌诊实现思路分享
AI时代_hexiaoyu
博客等级 码龄9年 8粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值