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

我用AI一周做了个口播视频平台,现在开源了

做独立开发这两年我一直在想一个问题一个人到底能做到什么程度上周我给出了自己的答案——我用 DeepSeek 定义需求 CodeBuddy 辅助编码一个人从零搞了一个 AI 口播视频生成平台取名智播坊。输入文案选形象和声音一键生成带字幕的口播视频。现在它开源了https://gitee.com/zhang-dongtao/zhibofang在线体验https://zhibofang.zhishujuzhen.com/演示视频输入文案选形象和声音30秒生成一条口播视频为什么做这个我之前做表单工具的时候想拍几个产品演示视频发抖音。结果发现• 真人出镜社恐而且拍摄剪辑要一整天• 用数字人平台月费几百起步生成一条视频还要排队• 自己用 FFmpeg 拼技术上可行但每次手动操作太麻烦我就想能不能把写文案→配音→合成视频这一整套流程自动化于是智播坊就诞生了。核心流程一条全自动的视频流水线整个视频生成过程拆成了 9 步用户只需要输入文案和选择形象剩下的全自动输入文案 → TTS语音合成 → 获取音频时长 → 生成字幕时间轴→ SRT字幕文件 → FFmpeg视频合成 → WebVTT字幕 → 上传COS → 清理临时文件核心代码都在video-pipeline.service.ts里大概 1600 行我挑几个关键的环节讲讲。第一个坎怎么把文案变成带时间轴的语音这步是整条流水线的起点也是最容易出问题的地方。短文案还好直接调 TTS 就完事。但长文案就麻烦了——火山方舟的 TTS 单次有字数限制超过就生成失败。我的方案是长文案自动拆分逐段生成再用 FFmpeg 拼接。// TTS 结果里带 segments每段都有 start 和 duration export interface TTSSegment { text: string start: number // 秒 duration: number } // 合并时在分句间插入静音间隔听起来更自然 async function concatenateAudioWithFFmpeg( segmentFiles: string[], silenceDuration: number, outputPath: string ): PromiseBuffer { // 用 FFmpeg concat demuxer 合并-c copy 直接复制不重新编码 const concatCmd ffmpeg -y -f concat -safe 0 -i ${concatListPath} -c copy ${outputPath} await execAsync(concatCmd) }segments 数据是关键——它不仅用于拼接音频后面生成字幕时间轴也全靠它。一次 TTS 调用音频和字幕数据同时拿到不用再做什么语音识别对齐。第二个坎FFmpeg 合成视频的滤镜链视频合成的核心逻辑形象图 背景 音频 字幕 最终视频。听起来简单FFmpeg 的 filter_complex 写起来能让人崩溃。async function generateVideoOneCommand( avatarPath: string, audioPath: string, subtitles: SubtitleLine[], audioDuration: number, hasNoBg: boolean, // 形象是否已抠图 config: { ... }, outputPath: string, srtPath?: string ): Promisevoid { // 构建滤镜链 const filterParts: string[] [] if (effectiveBackgroundType image) { // 背景图铺满 形象居中叠加 filterParts.push( [0:v]scale${VIDEO_WIDTH}:${VIDEO_HEIGHT}:force_original_aspect_ratiodecrease[scaled]; [1:v]scale${VIDEO_WIDTH}:${VIDEO_HEIGHT}:force_original_aspect_ratioincrease,crop${VIDEO_WIDTH}:${VIDEO_HEIGHT}[bg_img]; [bg_img][scaled]overlay(W-w)/2:(H-h)/2[body_base] ) } else { // 纯色/渐变背景 形象居中 filterParts.push( colorc${bgColor}:size${VIDEO_WIDTH}x${VIDEO_HEIGHT}:r25[bg]; [0:v]scale${VIDEO_WIDTH}:${VIDEO_HEIGHT}:force_original_aspect_ratiodecrease[scaled]; [bg][scaled]overlay(W-w)/2:(H-h)/2[body_base] ) } // 字幕烧录用 FFmpeg subtitles 滤镜比 drawtext 靠谱 if (srtPath) { filterParts.push( [body_base]subtitles${escapedSrtPath}:force_styleFontSize${config.subtitleFontSize},PrimaryColour${primaryColor},Outline2,Alignment2,MarginV20[outv] ) } }踩坑提醒字幕方案我前后换过三次。1. 第一次用drawtext滤镜——中文字符转义是个噩梦冒号、引号、反斜杠全是坑2. 第二次用ass格式——比 drawtext 好点但时间轴对齐容易偏移3. 最后用了subtitles滤镜 SRT 文件——最稳的方案SRT 格式简单不易出错force_style 参数还能控制字号颜色描边第三个坎中文字体跨平台这个坑我踩了整整一天。本地开发用 macOS 没问题部署到 Linux 服务器上字幕全是方框。原因很简单FFmpeg 渲染字幕需要指定字体文件路径不同系统的字体路径完全不一样。function getChineseFontPath(): string { const platform os.platform() // 优先用项目内的字体包最可靠 const projectFont path.join(process.cwd(), src, assets, fonts, HiraginoSansGB.ttc) if (fs.existsSync(projectFont)) return projectFont if (platform darwin) { // macOS: Hiragino Sans GB / STHeiti const macFonts [ /System/Library/Fonts/Hiragino Sans GB.ttc, /System/Library/Fonts/STHeiti Light.ttc, ] for (const font of macFonts) { if (fs.existsSync(font)) return font } } else if (platform win32) { return C:\\Windows\\Fonts\\msyh.ttc // 微软雅黑 } else { // Linux: 各种发行版路径都不一样... const linuxFonts [ /usr/share/fonts/truetype/wqy/wqy-microhei.ttc, /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc, /usr/share/fonts/noto-cjk/NotoSansCJK-Regular.ttc, ] for (const font of linuxFonts) { if (fs.existsSync(font)) return font } } }最终方案把字体文件打包进项目里运行时优先读项目内字体找不到再按系统路径找。部署再也没出过问题。第四个坎形象抠图 透明背景叠加用户上传的形象图背景五花八门直接放到视频里很违和。我的处理流程上传形象 → 上传COS → 调用抠图API → 下载抠图结果 → 透明背景PNG叠加到视频// getAvatarPath 的核心流程 async function getAvatarPath(avatarId: number, userId: number) { // 1. 下载远程图片到本地 // 2. 上传到 COS获取 CDN URL // 3. 调用抠图 API传入 CDN URL const bgResult await removeBackground(cosCdnUrl) // 4. 下载抠图结果 if (bgResult.success bgResult.imageUrl) { const noBgLocalPath path.join(tempDir, avatar_nobg_${avatarId}.png) await execWithTimeout(curl -s -o ${noBgLocalPath} ${bgResult.imageUrl}) return { path: noBgLocalPath, hasNoBg: true } } }抠图成功后FFmpeg 合成时用 overlay 滤镜把透明背景的 PNG 叠到背景上效果自然很多。还有个加分项声音克隆除了 5 种预设音色智播坊还接入了火山引擎的声音克隆。用户上传一段音频样本就能用克隆的声音生成口播视频。// 克隆音色检测clone_ 或 S_ 开头的音色 ID const isClonedVoice voiceType (voiceType.startsWith(clone_) || voiceType.startsWith(S_)) if (isClonedVoice) { // 用声音复刻专用 TTS 接口 const resourceId seed-icl-2.0 // 不同于普通 TTS 的 seed-tts-2.0 // speaker 直接用原始音色 ID }普通音色用seed-tts-2.0克隆音色用seed-icl-2.0两个 resource ID 不能混用这个坑也踩了好久。技术栈一览层技术前端Vue 3 Vite TypeScript TailwindCSS Element Plus后端Express.js TypeScript SQLite JWTAI 服务火山方舟TTS 文案生成 Seedream 图片生成视频合成FFmpeg图片 TTS 字幕 → 口播视频存储腾讯云 COS实时通信WebSocket视频生成进度推送整个项目前后端加起来不到 1600 行核心代码一个人完全能 hold 住。为什么要开源说实话我本来是想靠卖源码赚钱的。但做了两个月发现个人开发者卖源码获客成本比开发成本还高。与其让代码在硬盘里吃灰不如开源出来• 让更多人能低成本搭建自己的口播视频工具• 收集社区反馈把产品做得更好• 用内容和技术实力吸引真正需要商业授权的客户开源版包含核心视频生成功能MIT 协议随便用。商业版多了套餐订阅、在线支付、订单管理这些运营模块适合想直接商业化部署的团队。怎么跑起来// bash # 克隆 git clone https://gitee.com/zhang-dongtao/zhibofang.git cd zhibofang # 安装依赖 cd frontend npm install cd ../backend npm install # 配置环境变量 cp .env.example .env # 填入你的火山方舟 API Key、腾讯云 COS 配置等 # 初始化数据库 npm run db:init # 启动 # 后端 npm run dev # 前端 cd ../frontend npm run dev详细的部署文档和一键部署脚本都在仓库 README 里支持 Nginx SSL PM2 全自动配置。写在最后做这个项目最大的感受AI 时代一个人的生产力真的可以被无限放大。我用 DeepSeek 定义需求和梳理逻辑CodeBuddy 帮我写代码我主要做架构决策和踩坑调试。整个项目从 v1.0 到 v2.5核心开发时间加起来也就两周左右。当然不是所有事都能靠 AI比如 FFmpeg 滤镜链的调试、跨平台字体的坑、TTS 流式响应的解析——这些还是得自己硬啃。但 AI 帮我省掉了大量重复性编码时间让我能把精力放在真正需要思考的地方。智播坊 Gitee 仓库https://gitee.com/zhang-dongtao/zhibofang如果觉得有用给个 Star ⭐ 就行这是对独立开发者最大的鼓励。你们做口播视频目前用的什么方案我是 FFmpeg TTS 的路子有人试过直接用数字人 API 吗效果和成本对比怎么样评论区聊聊

相关文章:

我用AI一周做了个口播视频平台,现在开源了

做独立开发这两年,我一直在想一个问题:一个人到底能做到什么程度? 上周我给出了自己的答案——我用 DeepSeek 定义需求 CodeBuddy 辅助编码,一个人从零搞了一个 AI 口播视频生成平台,取名智播坊。输入文案&#xff0…...

Java类与对象:编程核心解密

好的,我们来详细解释一下Java中的类和对象这两个核心概念。1. 类 (Class)定义:类是一个模板或蓝图。它定义了某一类“事物”的共同特征(属性)和行为(方法)。作用:类描述了该种“事物”具有哪些信…...

git reset 怎么用?2026年最完整操作指南,撤销提交不再手足无措

代码提交了才发现写错了,或者本地 commit 堆了一堆想整理——你是直接新建一个"撤回"commit,还是对着搜索结果一脸茫然不敢乱动? 如果你还没搞清楚 git reset 的三种模式,随时可能把代码撤没了。学完本文,你…...

easyPoi使用

一、核心定位区别 EasyPoi:全能型,支持 Excel、Word、PDF 导出,注解极简,适合小数据、快速开发EasyExcel:高性能型,只专注 Excel,主打低内存、大数据量,适合海量数据导出 二、Easy…...

My-TODOs:跨平台桌面待办清单,解放您的生产力

My-TODOs:跨平台桌面待办清单,解放您的生产力 【免费下载链接】My-TODOs A cross-platform desktop To-Do list. 跨平台桌面待办小工具 项目地址: https://gitcode.com/gh_mirrors/my/My-TODOs 在信息过载的今天,如何高效管理日常任务…...

2026 年 AI 工具聚合站:从模型入口到开发基础设施的进化之路

在 2026 年的 AI 开发生态中,开发者正面临一个矛盾的现状:一方面是 GPT-5.5、Claude 4.7、Gemini 3.1 等大模型的能力持续突破,带来了前所未有的技术红利;另一方面,模型碎片化、接口异构化、成本高企等问题&#xff0c…...

咖啡一杯,Token 无限,Real-Time Cafe 深圳站来了!新增「硬件晒晒桌」与「AI 桌游试玩桌」

咖啡一杯,Token 无限——「Real-Time Cafe」是一个让开发者聚在一起实时 coding、实时 debug、实时互动的咖啡馆快闪计划。 Real-Time Cafe 深圳站来了!就在本周日 5 月 24 日下午。 本站特设「硬件晒晒桌」与「AI 桌游试玩桌」——带上你的电子宠物、…...

3分钟掌握R3nzSkin:英雄联盟国服免费全皮肤终极方案

3分钟掌握R3nzSkin:英雄联盟国服免费全皮肤终极方案 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 想在英雄联盟国服免费体验所有皮肤吗&a…...

3个关键技术方案:如何系统化解决Navicat Premium试用期限制

3个关键技术方案:如何系统化解决Navicat Premium试用期限制 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 本文旨…...

终极KMS激活解决方案:Windows与Office一体化智能激活工具

终极KMS激活解决方案:Windows与Office一体化智能激活工具 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO KMS_VL_ALL_AIO是一款功能强大的Windows系统和Microsoft Office套件的智能激…...

历史性突破,OpenAI模型搞定人类科学家80年未破难题,能发顶刊了

OpenAI 7个月前曾因虚假数学突破被同行嘲笑。 智东西5月21日报道,今日,OpenAI宣布,其一款未对外发布的内部通用推理模型,独立完成了一份原创数学证明。该证明推翻了匈牙利数学家保罗埃尔德什(Paul Erdős)…...

显卡驱动清理终极指南:Display Driver Uninstaller专业使用教程

显卡驱动清理终极指南:Display Driver Uninstaller专业使用教程 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-uni…...

锂电 / 光伏工业相机选型:5 大品牌核心参数与适用场景解析

2026 年锂电与光伏行业工业相机选型,早已不再是单纯比拼分辨率数值。行业竞争焦点已转向高速传输下的运行稳定性、与 AI 智能检测的融合深度,以及复杂生产场景下的专属定制能力。像锂电极片高速涂布、光伏硅片隐裂筛查这类核心生产环节,对工业…...

NoFences:免费开源的Windows桌面整理终极方案,告别杂乱桌面

NoFences:免费开源的Windows桌面整理终极方案,告别杂乱桌面 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 还在为Windows桌面上杂乱无章的图标而烦恼…...

STM32F407 + RT-Thread 实战:从工程结构到多线程 LED 闪烁

一、工程简介最近看了一个基于 STM32F407 的 RT-Thread 工程,整体结构比较标准,功能上也比较适合作为入门练手项目。这个工程的核心功能并不复杂,主要是通过 RT-Thread 创建多个线程,分别控制不同的 LED 引脚按不同节奏闪烁。虽然…...

抖音批量下载完整指南:3步实现无水印视频高效获取

抖音批量下载完整指南:3步实现无水印视频高效获取 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. …...

NoFences:免费开源桌面整理神器,让Windows桌面焕然一新

NoFences:免费开源桌面整理神器,让Windows桌面焕然一新 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 还在为Windows桌面上杂乱无章的图标而烦恼吗&a…...

内网规划练习

本文基于172.16.0.0/16 内网规划,实现双核心交换机互为备份,整合 VLAN、MSTP、VRRP、Eth-Trunk、DHCP 中继、NAT outbound 等技术,满足 PC 自动获取 IP、内网互通、访问公网及 ISP 环回的全业务需求。一、网络需求与规划内网地址:…...

乒乓球教程资源合集

【课程教程资料】乒乓球入门必看,全方位发球技巧教学 文件大小: 3.9GB内容特色: 慢镜拆解12种发球,旋转弧线肉眼可见适用人群: 想靠发球直接拿分的业余玩家核心价值: 一周练成对手接不住的“魔鬼发”下载链接: https://pan.quark.cn/s/8d67c2d65358 乒…...

安全自动化工具:自动化安全检测和响应

安全自动化工具:自动化安全检测和响应 一、安全自动化工具概述 1.1 安全自动化工具的定义 安全自动化工具是指用于自动化执行安全检测、响应和管理任务的软件工具。它通过自动化脚本和智能算法,提高安全运营效率,降低人为错误风险。 1.2 安全…...

如何用Python快速接入Taotoken并调用多模型API完成数据清洗任务

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 如何用Python快速接入Taotoken并调用多模型API完成数据清洗任务 对于需要处理客户数据的开发者而言,数据清洗与结构化是…...

安装 KubeSphere

安装 KubeSphere KubeSphere Core (ks-core) 是 KubeSphere 的核心组件,为扩展组件提供基础的运行环境。KubeSphere Core 安装完成后,即可访问 KubeSphere Web 控制台。 1. 安装 KubeSphere Core 在集群节点上,执行以下命令安装 KubeSpher…...

可观测性告警:及时发现和响应系统异常

可观测性告警:及时发现和响应系统异常 一、可观测性告警概述 1.1 可观测性告警的定义 可观测性告警是指基于系统的指标、日志和追踪数据,通过预设的规则和阈值,自动检测系统异常并发送通知的机制。它帮助运维人员及时发现问题,快速…...

期刊论文重复率多少才算合格?

没有一个“全国统一合格线”。很多人想要一个标准答案,比如“10%以下就稳”“15%以下就能投”。现实是:看你投什么期刊、什么学科、什么系统。大致可以这么看:1. 普通国内期刊:通常 10%–30% 区间常见 有些普刊要求比较宽&#xf…...

终极指南:如何利用Py Eddy Tracker实现海洋中尺度涡旋高效识别与追踪

终极指南:如何利用Py Eddy Tracker实现海洋中尺度涡旋高效识别与追踪 【免费下载链接】py-eddy-tracker Eddy identification and tracking 项目地址: https://gitcode.com/gh_mirrors/py/py-eddy-tracker 海洋涡旋识别与中尺度涡旋追踪是海洋科学研究中的核…...

OpenClaw 换 “大脑”!DeepSeek V4 默认集成,离线私有 AI 自由

OpenClaw 接入 DeepSeek 模型完整配置教程 一、前置准备 已安装并正常运行 OpenClaw Windows 客户端;OpenClaw 顶部 Gateway 状态保持在线;电脑网络正常,可稳定访问 DeepSeek 开放平台;准备可接收验证码的手机号或微信账号&…...

DazToBlender:3D创作工作流的无缝桥梁

DazToBlender:3D创作工作流的无缝桥梁 【免费下载链接】DazToBlender Daz to Blender Bridge 项目地址: https://gitcode.com/gh_mirrors/da/DazToBlender 在3D数字创作的世界里,艺术家们常常面临一个现实困境:如何在不同的专业软件之…...

免费在线法线贴图生成器终极指南:3分钟为你的3D模型添加逼真细节

免费在线法线贴图生成器终极指南:3分钟为你的3D模型添加逼真细节 【免费下载链接】NormalMap-Online NormalMap Generator Online 项目地址: https://gitcode.com/gh_mirrors/no/NormalMap-Online 还在为3D模型表面过于平滑、缺乏真实感而烦恼吗?…...

Chrome二维码插件:跨设备链接传输的智能解决方案

Chrome二维码插件:跨设备链接传输的智能解决方案 【免费下载链接】chrome-qrcode :zap: A Chrome plugin to Genrate QRCode of URL / Text, or Decode the QRcode in website. 一个Chrome浏览器插件,用于生成当前URL或者选中内容的二维码,同…...

QTTabBar终极指南:5分钟掌握Windows文件管理标签页神器

QTTabBar终极指南:5分钟掌握Windows文件管理标签页神器 【免费下载链接】qttabbar QTTabBar is a small tool that allows you to use tab multi label function in Windows Explorer. https://www.yuque.com/indiff/qttabbar 项目地址: https://gitcode.com/gh_m…...