文字小说读者可以通过自己的想象力构建故事的视觉和人物对话。但目前多数小说推文的短视频都是同一个人物配音,直接朗读小说内容,用ai绘图构成小说画面。还是不够丰富。但用ai生成视频目前还是比较难应用。效果也不是很好。只能通过ai绘图(midjunery,stablediffusion)。再实现多角色配音,以及把小说中的旁白、人物对话区分出来。区分角色,旁白,人物对话可以通过chatgpt实现。
具体实现思路:
1. 文本处理与剧本生成
项目的第一步是将小说内容保存为txt格式,然后通过ChatGPT进行分析,生成一个结构化的剧本。
这个剧本不仅区分了角色、旁白和对话,还包括了角色的性别等信息,为后续的配音和绘图提供了基础。
[ { "role": "陆程文", "content": "“这就是人的弱点,我是最擅长利用别人的弱点欺负人的人了。对不对?”", "type": "说话内容", "gender": "male" }, { "role": "徐雪娇", "content": "狂点头:“是的呢,是的呢。”", "type": "说话内容", "gender": "female" }, { "role": "陆程文", "content": "“但是!”陆程文道:“现在如果出现一个人,给她拿出跟我一样的薪水给她,每个月十几万就好,就可以救她脱出苦海 。”", "type": "说话内容", "gender": "male" }, { "role": "徐雪娇", "content": "“这样哦!”", "type": "说话内容", "gender": "female" }, { "role": "陆程文", "content": "得意地道:“雪娇妹妹,你说,这个人,在哪儿呢?”", "type": "说话内容", "gender": "male" }]
2.为了让视频中的每个角色都拥有独特而适合的声音,我们预先训练了多个具有不同风格、年龄特征的万能配音角色。通过ChatGPT的分析,为剧本中的每个角色匹配合适的配音,这一步骤使用了GPT-SoVITS-beta克隆技术来实现声音的多样性。
{ "males":[ {'name':'迪卢克','style':'霸道总裁','age':23}, {'name':'流浪者','style':'阴险反派','age':24}, {'name':'米卡','style':'害羞小男孩','age':20}, {'name':'行秋','style':'热情阳光','age':22}, {'name':'许光汉','style':'深情低沉帅气','age':27}, {'name':'提纳里','style':'直率热忱','age':27}, {'name':'大鱼海棠',"style":"狠心毒辣","age":64}, {'name':'阿喆',"style":"恭敬礼貌","age":30}, {'name':'朋克',"style":"平平无奇","age":28}, ], 'females':[ {'name':'甘雨','style':'清纯善良','age':20}, {'name':'纳西妲','style':'可爱','age':18}, {'name':'罗莎莉亚','style':'成熟御姐','age':31}, {'name':'莫娜','style':'正直善良','age':16}, {'name':'菲谢尔','style':'反派阴险','age':25}, {'name':'阿贝多','style':'高冷平坦','age':23}, {'name':'香菱','style':'可爱小巧','age':18}, {'name':'琴','style':'成熟阿姨','age':36}, {'name':'江脍','style':'豁达开朗','age':24}, {'name':'老奶奶',"style":"慈祥善良","age":68} ] }
3.最后会生成一个配音表,剧本
4.绘图+语音合成
选择了通过AI绘图技术(如MidJourney和StableDiffusion)来创造小说的视觉画面。能够根据剧本中的描述生成高质量的图像,为每个场景和角色提供视觉支持。
prompt提前优化好,再遍历剧本,为每段台词生成图片。
非说话内容属于旁白(旁白配音固定一个)
说话内容再根据配音表选择不同角色的配音合成音频。
5.ffmpeg将图片生成为跟语音时长匹配的视频,再加入简单的转场动画。合成一个完整的视频。
最后再用funasr 识别 带时间戳的文本生成ass字幕文件。
一个小说推文的短视频就这样完成了。
大概看下效果:
该项目主要用python实现。
1.chatgpt:
用于分析小说内容生成剧本和匹配配音角色
2.MidJourney||StableDiffusion
MidJourney可以通过调用discord实现,但是速度比较慢,效果比stablediffusion好。
这一步的prompt也需要用到chatgpt生成
参考chatgpt的prompt:
这是小说的某一章节内容:{prompt_excaple}; 根据上下文来写midjourney的prompt。 1.我将会把每一条生成promt提交给midjourney绘画,因为ai没有办法理解上下文,所以每一段都要详细,但尽量不要用自然语言,简单的单词形容,但不要遗漏重要的细节。并且拆分为一个个关键词。尽可能让ai理解。 2.每个prompt需要包含:几个男人,几个女人,在什么场景下,他们各自在干嘛,每个人的基本外貌,身材,发色,发型,穿着等。镜头,画面风格(武侠,古代,穿越,现代)。 3.不需要出现角色名称,因为ai不认识角色是谁,你需要用文字来描述。 4.为场景增加一些合适的描述词。增加特效。 类似:Surrealism, lightning, flames, summoning dragons, awakening and exploding, surrounded by flames. 5.例如:一个男子身材高挑,留着一头深棕色的头发。那么prompt可以简化为: 1boy&slender&tall&Dark brown hair. 6.并不是词越多越好,而是越精准越好。 返回一个json,json的key值是prompt,prompt必须是 英文,只需要返回json,不要有其他内容
3.GPT-SoVITS-beta
用于提前训练好多个角色的配音以及语音合成部分。
4.ffmpeg
消除音频静音部分
图片转视频
多视频合成
多音频合成
音频视频合成
可以用gradio分成多个步骤。比较方便操作调整。
整体实现比我预想的要困难些。
难点在于chatgpt的训练和文本的处理上。
该文章主要提供一些实现思路,并且还不够完美。
有想法可以评论留言交流下。