V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
atomshadows

一个人搞了两个月,聊聊用 AI 做短视频自动生成的技术方案和踩坑

  •  
  •   atomshadows · 5 天前 · 865 次点击

    最近半年一直在折腾一个项目——用 AI 自动生成短视频。起因是身边做小生意的朋友总问我能不能帮忙剪视频发抖音,我想这事儿应该能自动化,就开始做了。

    分享一下技术方案和踩过的坑,希望对有类似想法的朋友有参考价值。


    整体架构

    用户上传素材 + 输入文案
        ↓
    TTS 语音合成( MiniMax / 火山引擎)
        ↓
    根据语音时长自动分配素材时间轴
        ↓
    云端渲染(转场、字幕、BGM )
        ↓
    成品视频
    

    后端 FastAPI + MySQL ,前端 Vue 3 ,视频渲染走云端 API ,手机端用 Capacitor 套了个壳。一个人全栈,没有团队。


    几个有意思的技术点

    1. TTS 选型

    试了一圈,最后主力用 MiniMax speech-2.8-hd ,中文多音字准确率目前最好。火山引擎作为补充,主要是剪映生态的独有音色(奶气萌娃、广告解说这种)。Azure 的中文效果一般,Fish Audio 没深入测。

    踩坑:TTS 返回的音频时长和文字长度不是线性关系,语气词、停顿都会影响。批量生成时如果对时长有严格要求,需要做重试机制。

    2. 素材自动分配

    这块逻辑最复杂。用户上传 N 个素材(视频+图片混合),系统要自动决定每个素材展示多久、从视频的哪个位置截取。

    几个关键决策:

    • 视频从中间 70% 区域截取(跳过开头 20% 和结尾 10%),因为大部分手机拍的视频开头都是晃动的
    • 图片展示时长根据总时长动态计算,保证每张都出现,最少 1 秒/张
    • 批量生成时用发牌算法分配素材,保证每条视频的封面帧不同

    3. 批量生成去重

    做矩阵号的核心需求是"一组素材生成几十条不重复的视频"。去重策略:

    • AI 扩写多组文案时分配不同的切入角度(预定义了 30 个角度)
    • 每条视频的素材起始偏移不同
    • 视频截取位置随机化
    • 第一个 clip 强制用不同素材保证封面不同

    4. 浮点精度问题

    这个坑最隐蔽。视频时间轴用浮点数计算,多个 clip 拼接时 accumulated 会漂移,导致素材重叠或出现缝隙。解决方案是每次用 round 后的值更新 accumulated:

    cs = round(clip_start, 1)
    ce = round(clip_end, 1)
    accumulated += (ce - cs)  # 不是 accumulated += clip_dur
    

    5. 实时语音输入

    加了个语音输入功能,用户对着手机说文案直接转文字。技术上是浏览器 AudioContext 采集 PCM → WebSocket 传到后端 → 转发到阿里云 paraformer-realtime-v2 。

    踩坑:中间结果和最终结果的拼接如果处理不好会闪烁,最后用了"快照 + 增量"的方案解决。


    技术栈汇总

    技术
    前端 Vue 3 + Vite + Capacitor
    后端 Python 3.13 + FastAPI + SQLAlchemy
    数据库 MySQL 8
    存储 阿里云 OSS + CDN
    AI 文案 通义千问
    TTS 火山引擎
    语音识别 阿里云 paraformer-realtime-v2

    目前自己和几个朋友在用,做餐饮和服装的,反馈还行。有兴趣的可以体验一下 ios 可以直接用 PWA: https://zj.xinghepay.com ,Android 也有 APK

    技术上有什么想聊的欢迎评论区交流,特别是视频处理和 TTS 这块,踩的坑比较多,能聊的也多

    8 条回复    2026-04-20 19:49:48 +08:00
    tool2dx
        1
    tool2dx  
       5 天前
    不能邮箱登陆吗? 上来就要手机号, 现在都是实名的, 不想给.
    atomshadows
        2
    atomshadows  
    OP
       5 天前 via iPhone
    @tool2dx 目前登录方式主要考虑到手机号验证更便捷,但完全理解您对隐私的顾虑。
    邮箱登录的功能已在计划中,后续版本会加入
    shoaly
        3
    shoaly  
       5 天前
    阿里云的语音识别 和 豆包 老哥对比过没, 我目前用豆包接口已经非常爽了, 不知道还有没有提升空间.
    atomshadows
        4
    atomshadows  
    OP
       5 天前
    @shoaly 试试 MiniMax speech-2.8-hd
    shoaly
        5
    shoaly  
       5 天前
    @atomshadows #4 方向反啦, 是语音转文字 不是生成语音
    atomshadows
        6
    atomshadows  
    OP
       4 天前
    @shoaly #5 哈哈哈 是我一眼看错了

    豆包 Seed-ASR 在专业词汇、上下文推理这块确实比 paraformer 强, 还支持多模态识别,整体能力更新

    不过我这个场景用户说的都是普通话为主,paraformer 准确率够用,加上阿里云生态打通方便(账单也方便管),暂时就没动力换

    你主要用豆包 STT 做什么场景?如果是专业词汇多或者有方言,豆包确实值得优先考虑
    shoaly
        7
    shoaly  
       4 天前
    @atomshadows #6 我就自己 vibe 用, 平替很贵的那个 typeless, 但是我发现豆包 2.0 流式接口中, 热词不生效, 发过工单了, 他们承认有问题, 但是说要等下一个大版本发布才能解决.
    frayesshi1
        8
    frayesshi1  
    PRO
       3 天前
    感觉这一套走下来很复杂啊,抖音上面比如《你是否在雪山上救过一只狐狸》这种,有很多变种
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   4071 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 05:25 · PVG 13:25 · LAX 22:25 · JFK 01:25
    ♥ Do have faith in what you're doing.