zh / zh.py
chaowenguoback's picture
Update zh.py
16dabba verified
import aiohttp.web, asyncio, urllib.parse, pathlib, builtins, numpy, io, sys, math, os, uvloop, bs4, lxml, PIL.Image, re, json, av, itertools, fake_useragent, huggingface_hub, time, traceback
# use chatgpt to create narration say limit to 40 to 45 chinese characters
scripts = [
# Chapter 1
{
"narration": "清晨的华盛顿街头,成千上万的民众从四面八方汇聚而来,高举旗帜与标语,怒声呼喊着“还我民主”,他们的声音在钢铁与石墙间回荡,震荡整座城市的上空。",
"prompt": "日出,晴天光,柔光,低角度拍摄,中全景,暖色调,中心构图。阳光从建筑缝隙间照射,映出人群轮廓。上万抗议者高举横幅与旗帜,高声呐喊。前排一名白人青年戴红帽,口中喊出标语。国会大厦穹顶映在湛蓝天空下,街道扬起尘土与光影。"
},
{
"narration": "防暴警察在街头列队,他们身穿黑色防弹盔甲,手持盾牌与警棍,反光刺目。队列整齐如铁墙,街角闪烁的蓝灯让气氛更加紧绷,空气中弥漫着不安与肃杀的压迫感。",
"prompt": "白天,硬光,日光,侧光,冷色调,中景,右侧重构图,低角度拍摄。几十名防暴警察站成整齐方阵,手中盾牌反射刺眼光。阳光从左上方射下,照亮盔甲与头盔。街道后方隐约可见群众与警车灯光交错,尘埃漂浮在空气中。"
},
{
"narration": "一名年轻女子站在人群中央,手中紧握着写有“自由”字样的标语。泪水滑过她的脸颊,她的嗓音嘶哑却仍在高喊口号,背后是一片挥动的旗帜与呼喊的群众,她的身影在阳光下格外坚定。",
"prompt": "白天,柔光,日光,中近景,暖色调,中心构图,侧光。画面聚焦一名二十多岁的白人女子,双手高举白底黑字标语“FREEDOM”。她眼角泪光闪烁,嘴唇轻颤,头发随风飘扬。人群在背后呼喊,阳光从她的侧脸滑过,旗帜在风中展开。"
},
{
"narration": "街角的报摊被推翻,成堆的报纸撒落在地,印着总统头像的头版在无数脚步下被踩得皱折破碎。街面上飞舞的纸片与尘土交织,仿佛在诉说着民众心中燃烧的愤怒与绝望。",
"prompt": "白天,晴天光,硬光,中景,低角度拍摄,冷色调,平衡构图。蓝色报摊翻倒,报纸堆散落街头。印有总统头像的纸张被脚步碾皱,部分被风卷起飞舞。阳光从右侧照射,映出报纸阴影与折痕,背景人群继续向前移动。"
},
{
"narration": "高楼的玻璃幕墙在阳光下闪烁反光,镜面映出密集的人潮、红蓝的标语和飘扬的旗帜。整座城市的钢铁表面仿佛成为一面镜子,静静地注视着这场蔓延的抗议浪潮。",
"prompt": "白天,柔光,晴天光,中全景,俯视角度拍摄,混合色调,中心构图。高楼玻璃幕墙反射街头密集人潮与旗帜的景象。阳光折射在玻璃上,蓝天与标语的颜色交织。镜头轻微上移,捕捉倒影与真实人群重叠的动态光影。"
},
{
"narration": "数十名抗议者席地而坐,围成防线相互挽手,警察队伍在前方缓慢推进。空气中回荡着口号与呼喊,地上的横幅被风吹起,他们的神情坚毅,拒绝后退一步。",
"prompt": "白天,日光,柔光,中景,侧光,暖色调,右侧重构图。几十名抗议者盘坐地面,双手相连形成防线。警察在前方缓步推进,防暴盾牌反光闪动。镜头缓慢平移,捕捉人们紧咬牙关的表情与旗帜轻摆。"
},
{
"narration": "远处的国会山在淡淡烟雾中若隐若现,街道上闪烁的蓝红警灯与呼啸的警笛声此起彼伏。人群仍在聚集,空气弥漫着焦灼的紧张感,如同暴雨前的静默。",
"prompt": "白天,阴天光,柔光,全景,航拍,冷色调,对称构图。航拍镜头俯视国会山,浅灰烟雾弥漫街区。道路两旁挤满抗议人群与警车,蓝红警灯闪烁交替。风吹动旗帜与烟雾,远处天空呈淡蓝色。"
},
{
"narration": "摄影记者趴在地上,紧贴地面举起相机,镜头反光中倒映出燃烧的旗帜与摇曳的火焰。他的额头满是汗水,手臂微微颤抖,记录下这场城市动荡的每一刻。",
"prompt": "白天,日光,硬光,低角度拍摄,中近景,冷色调,左侧重构图。记者身穿灰马甲,伏地举起黑色相机。镜头玻璃反射出燃烧的旗帜与橙红火焰。阳光从右上照射,地面散落纸屑与烟迹,空气中漂浮热浪。"
},
{
"narration": "一名中年男子站在路灯下激烈辩论,双手挥舞,面部涨红。他的声音嘶哑却仍不退让,围观的人群目光聚焦于他,闪烁的街灯照亮他汗湿的脸庞。",
"prompt": "傍晚,实用光,柔光,侧光,暖色调,中近景,中心构图。街灯光从右侧照亮男子的半张脸,他穿蓝色夹克,双手剧烈摆动。人群环绕倾听,镜头轻微跟随动作。地面有水迹反光,背景中灯光微闪。"
},
{
"narration": "黄昏降临,广场上数千人肃立静默,齐声低头默哀三分钟。落日余晖照在他们的脸庞上,金红的光影交错闪烁,旗帜与人影融为一体,整个画面庄严而悲壮。",
"prompt": "黄昏,日光,顶光,柔光,暖色调,中全景,对称构图。镜头正面拍摄,上千民众静立低头。落日从背后洒下金红色光线,旗帜与人影融合。风轻拂旗面,镜头缓缓拉远,整个广场被金色光辉覆盖。"
},
# chapter 2
{
"narration": "傍晚时分,抗议现场的气氛骤然紧张,防线两侧的人群开始推搡,口号声与警告声交织成混乱的噪音。街道被照亮,红蓝警灯闪烁,仿佛警告着即将到来的风暴。",
"prompt": "傍晚,实用光,冷色调,硬光,侧光,中全景,平衡构图。画面中防暴警察与抗议人群隔街相对,灯光照亮湿润的地面。红蓝警灯在反光中闪烁,镜头轻轻摇动捕捉推搡的瞬间,路灯从右上方洒下白色光线。"
},
{
"narration": "第一枚催泪弹被抛出,白色烟雾瞬间在人群中弥散。人们惊呼、咳嗽、四散奔逃,旗帜倒在地上,空气中充满刺鼻气味。现场陷入一片混乱,呼喊声震耳欲聋。",
"prompt": "夜晚,人工光,冷色调,柔光,底光,全景,倾斜角度拍摄。催泪烟雾在街头弥漫,人群惊慌逃散。画面左侧几人捂着口鼻奔跑,旗帜倒地。街灯光线穿透烟雾形成光束,远处红蓝警灯交织闪烁。"
},
{
"narration": "一名年轻男子被警察制服在地,手臂被扭到背后。他的脸贴在冰冷的地砖上,嘴角流出血丝,镜头捕捉到他眼中的愤怒与不屈。周围群众的呼喊让夜色更加沉重。",
"prompt": "夜晚,实用光,硬光,低角度拍摄,中近景,冷色调,右侧重构图。地面湿滑反光,一名青年被警察压制,手臂反扭。警察黑色手套紧扣他的手腕,青年脸颊贴地,鲜血沿唇角流出。街灯光从上方照射,反射在地砖上。"
},
{
"narration": "警察的盾牌被砸出裂痕,碎片飞溅,一名抗议者举着木棍继续挥打。怒火在人群中蔓延,防线被不断冲击。地面满是散落的瓶罐与破碎的标语牌。",
"prompt": "夜晚,火光与人工光混合,硬光,侧光,中景,暖色调,低角度拍摄。警察盾牌上出现裂纹,木棍挥动瞬间被捕捉,碎片在空中飞散。背景旗帜倒下,街灯闪烁,火光从远处映红人脸与烟雾。"
},
{
"narration": "一辆警车被推翻,轮胎仍在旋转,车身玻璃破裂。火焰从车底升起,橙红的光照亮街角的混乱,几名抗议者站在火前,脸被光映得通红。",
"prompt": "夜晚,火光,底光,硬光,中景,暖色调,中心构图。画面中央一辆倒扣的警车正在燃烧,火焰从底部喷出。三名抗议者站在火前,身体被橙光照亮。空气中漂浮烟尘与纸屑,镜头轻微后退捕捉燃烧细节。"
},
{
"narration": "医护志愿者在混乱中奔跑,背着红十字标志的包,试图将伤者拖离现场。她的手臂满是擦伤,额头上汗珠闪光,背景是混乱的人流与警灯。",
"prompt": "夜晚,实用光,柔光,侧光,中近景,混合色调,左侧重构图。医护志愿者身穿白色夹克,背红十字标志包,弯腰拖动伤者。街灯从左上照射,光线打在她满是汗水的额头上。警灯反射在地面,后方人群模糊。"
},
{
"narration": "数名抗议者被困在街角,举起双手高喊“不要开枪”。他们背靠墙壁,脸上带着惊恐与倔强,远处传来扩音器的警告声,空气中仍弥漫着催泪烟雾。",
"prompt": "夜晚,人工光与烟雾,冷色调,柔光,中景,俯视角度拍摄,平衡构图。几名抗议者背靠墙壁举起双手,灰白烟雾环绕。路灯照出他们的轮廓,墙上留下阴影。远处扩音器闪光,空气中漂浮灰尘。"
},
{
"narration": "记者镜头中,燃烧的横幅在风中扭曲,一面印有“自由”的旗帜被火焰吞噬,背景是警车闪烁的光与人群的剪影,历史被定格在这一帧之中。",
"prompt": "夜晚,火光与警灯交错,底光,暖色调,近景,右侧重构图。燃烧的旗帜在风中扭动,黑色烟雾向上翻滚。背景中警灯闪烁,人影穿行。镜头微微抖动,火焰反光映在镜头玻璃上。"
},
{
"narration": "老者拄着拐杖站在街头,他的背影在闪烁的蓝光中显得孤单而坚定。他目视前方混乱的场景,嘴角紧抿,手中旗帜缓缓下垂,仿佛在默默祈祷。",
"prompt": "夜晚,蓝色警灯光,冷色调,柔光,中近景,左侧重构图。老者身穿灰色外套,拄着木拐杖站在街边。光从左侧打在他背影上,旗帜微微下垂。背景是模糊的烟雾与红光闪烁。"
},
{
"narration": "午夜,街道上仅剩少数人影。地上散落的标语、破碎的玻璃与残留的烟雾在路灯下反光。风吹动旗角,火星从远处仍在冒起,城市的夜恢复了压抑的静默。",
"prompt": "午夜,实用光,柔光,顶光,全景,冷色调,对称构图。空旷街道被路灯照亮,纸屑与碎玻璃反光。旗帜在风中轻晃,远处残火闪烁橙光。镜头缓缓上移,捕捉灰烟与湛蓝夜空。"
},
#chapter 3
{
"narration": "抗议浪潮迅速蔓延到纽约、洛杉矶和芝加哥等大城市,街头出现大批手举标语的人群,他们沿街游行,呼喊口号,城市交通陷入瘫痪,公共设施被迫关闭,民众情绪高涨而紧张。",
"prompt": "白天,日光,柔光,中全景,暖色调,低角度拍摄,中心构图。纽约街头密集抗议人群举旗呐喊,车辆缓慢移动,街道两侧商店紧闭。镜头从下方拍摄,阳光照亮人群和标语,风吹动旗帜,建筑反射光线。"
},
{
"narration": "在洛杉矶市中心,抗议者聚集在市政大楼前,高举横幅,挥舞旗帜。警察在入口列队形成防线,人群随着步伐前进,旗帜在风中翻飞,街道上的纸屑被风吹起,阳光洒在抗议者的面庞上,整个场面充满动感。",
"prompt": "白天,日光,硬光,中景,暖色调,侧光,中心构图。镜头捕捉市政大楼前数百名抗议者举起横幅,旗帜随风摇摆。警察在入口列队,盾牌反光刺眼。地面纸屑随风飞舞,阳光从右侧照亮人群面庞。"
},
{
"narration": "芝加哥河边的桥梁上,成千上万的抗议者排列整齐,沿河游行,高举标语。河水映出人群和旗帜的倒影,晚霞映照城市天际线,建筑轮廓在余晖中清晰可见,整个场面壮观而充满动感。",
"prompt": "黄昏,日光,柔光,中全景,俯视角度拍摄,混合色调,中心构图。桥上抗议人群整齐排列,高举横幅。河水反射旗帜和人影,晚霞映照城市天际线,建筑轮廓清晰可见,旗帜随风飘动。"
},
{
"narration": "在费城街头,年轻人与老年人并肩站立,高举抗议标语。街道上警车与救护车穿梭,远处建筑映出橙色火光,形成强烈的光影对比,整个场景充满紧张气氛。",
"prompt": "白天,日光,硬光,中近景,暖色调,左侧重构图。镜头捕捉街头抗议者各年龄段齐聚,高举横幅。蹲拍角度呈现人群细节,远处建筑反射火光,救护车与警车穿行,光影形成鲜明对比。"
},
{
"narration": "波士顿市中心,街道两侧店铺关门,商标牌随风摇晃。抗议队伍沿街游行,口号声和呐喊声震耳欲聋,行进过程中有旗帜被风吹起,纸屑在空中旋转,街景动感十足。",
"prompt": "白天,日光,柔光,中全景,暖色调,低角度拍摄,平衡构图。街道抗议队伍沿街前进,旗帜随风摇摆。地面纸屑飘动,商铺招牌随风晃动。镜头捕捉人群步伐与口号高喊的瞬间,街道光影交错。"
},
{
"narration": "在迈阿密海滨大道,抗议者举着彩色标语沿着滨海道路前行,阳光照在海面上波光粼粼,风吹动旗帜和海边棕榈树的叶子,形成鲜明的视觉动感。",
"prompt": "白天,日光,柔光,中全景,暖色调,侧光,中心构图。海滨大道上抗议人群举旗前行,海面闪烁阳光反光,棕榈树叶随风摇曳。镜头捕捉旗帜和人群动作,阳光映照出人群轮廓与街道细节。"
},
{
"narration": "在西雅图市中心,抗议者围绕市政广场静坐,手拉手形成防线。警察列队在外,天空湛蓝,旗帜和标语随风摇摆,人群动作与神情充满张力。",
"prompt": "白天,日光,柔光,中全景,低角度拍摄,混合色调,中心构图。市政广场上抗议者手拉手形成防线,警察在外列队。旗帜随风飘动,镜头缓慢跟随捕捉人群动作,天空呈湛蓝色,光线均匀照亮人群。"
},
{
"narration": "明尼阿波利斯街道上,抗议人群沿着高速路延伸,车辆缓慢行驶,手举横幅的人们紧随其后,远处高楼映出夕阳余晖,街道上纸屑和旗帜随风飞扬。",
"prompt": "黄昏,日光,柔光,中全景,俯视角度拍摄,暖色调,对称构图。抗议人群沿高速路延伸,车辆缓慢通行。夕阳映照高楼轮廓,旗帜随风摆动,地面纸屑在风中飘动,镜头捕捉整条街景。"
},
{
"narration": "在亚特兰大街头,抗议者和警察形成对峙,标语高举,喊声此起彼伏,街道上车辆与人群交错,摄影记者在前方记录每一个动作,光线映照在湿润的地面上。",
"prompt": "白天,日光,硬光,中全景,低角度拍摄,冷色调,中心构图。抗议者举旗与警察对峙,地面湿润反光,车辆穿行其中。摄影记者蹲拍动作瞬间,镜头捕捉挥舞旗帜与人群表情。"
},
{
"narration": "全国各地抗议蔓延的画面被现场直播,电视屏幕上显示不同城市的街头,人们举着标语、挥舞旗帜,街道被封锁,交通混乱,历史性的画面被定格在屏幕上。",
"prompt": "白天,日光,柔光,中全景,航拍,混合色调,中心构图。航拍全国各大城市街头抗议场景,屏幕显示实时画面。人群举旗呐喊,街道封锁,车辆停滞,镜头捕捉城市建筑和旗帜随风飘动。"
},
#chapter 4
{
"narration": "总统办公室内,助理们焦急翻阅文件,电话铃声不断,窗外风雨交加,街道上抗议人群的火光映入室内,整个办公室弥漫紧张气息,会议桌上文件散乱堆放,气氛压抑而紧迫。",
"prompt": "夜晚,人工光,柔光,中近景,暖色调,中心构图,侧光。办公室桌面堆满文件和手机,助理低头忙碌,窗外风雨拍打玻璃,街头火光映入室内,镜头捕捉人物动作与紧张神情,桌面反光清晰。"
},
{
"narration": "国会大厅内,议员激烈辩论,手中文件翻动发出声响,面色紧绷,投影屏幕显示全国抗议实时画面,议事厅充满紧迫感,议员间交头接耳,声音此起彼伏,气氛紧张。",
"prompt": "白天,日光,硬光,中景,高角度拍摄,冷色调,中心构图。议员站立或坐下翻阅文件,投影屏幕显示街头抗议画面,光线从顶部射入,透过长窗户照亮桌面和面部,镜头捕捉动作与表情。"
},
{
"narration": "新闻直播间内,主播紧握资料播报,背景大屏显示街头抗议的混乱场景。主播神情凝重,嘴唇微动,手指翻动资料,光线映照桌面与脸庞,整个画面充满紧张氛围。",
"prompt": "白天,荧光光,柔光,中近景,暖色调,中心构图。主播坐在桌前,手握资料,镜头缓慢拉近。背景大屏播放街头抗议实时画面,光线均匀映照主播脸部与桌面,手部动作清晰可见。"
},
{
"narration": "高级顾问团队夜间开会,笔记本和文件散落桌上,快速交换意见,讨论如何应对全国性抗议,咖啡杯蒸汽升起,空气中弥漫紧张与焦虑交织的感觉。",
"prompt": "夜晚,日光与人工光混合,柔光,中景,侧光,暖色调,平衡构图。顾问围坐桌旁翻阅笔记本和文件,手指敲击桌面。窗外光线透入,镜头捕捉手势与表情,咖啡蒸汽轻轻升起。"
},
{
"narration": "总统在讲台上发表紧急声明,强调国家团结与秩序,举手强调重点。背后国旗随风微动,新闻直播连线全国,各地屏幕同步播放,总统表情坚定,现场氛围庄重紧张。",
"prompt": "白天,日光,硬光,中近景,低角度拍摄,暖色调,中心构图。总统身着深色西装,手握讲稿,低角度镜头捕捉表情与姿态,国旗随风轻扬,阳光映照讲台和轮廓,背景大屏播放实时画面。"
},
{
"narration": "社交媒体上,抗议视频疯狂传播,用户评论激烈,手机屏幕光映在使用者脸上,手指滑动屏幕,虚拟空间的热议与现实街头的抗议形成呼应,光影映照用户表情。",
"prompt": "夜晚,荧光光,柔光,中近景,冷色调,右侧重构图。房间昏暗,用户手持手机,屏幕光映照脸部。手指滑动屏幕浏览抗议视频,背景虚化,光线反射桌面与墙面,捕捉动作细节。"
},
{
"narration": "州长在新闻发布会上宣布调动国民警卫队以维持秩序,记者争相提问。人群紧张,官员表情严肃,警卫站立,背景大屏显示街头抗议画面,整个场面庄重而紧张。",
"prompt": "白天,日光,硬光,中全景,高角度拍摄,冷色调,中心构图。州长站在讲台上,深色西装,记者举手提问。镜头捕捉人群与警卫姿态,旗帜轻微摇动。背景大屏显示街头抗议。"
},
{
"narration": "外交官闭门会议紧张协商,手指敲击桌面,笔记本显示地图和数据,窗外城市夜景与远处抗议火光映照室内,屏幕反光映在纸张与面孔上,光线交错复杂。",
"prompt": "夜晚,人工光,柔光,中近景,侧光,混合色调,中心构图。外交官围坐会议桌前,笔记本显示街区数据。窗外城市夜景与抗议火光映入室内,镜头捕捉手势和面部表情,纸张轻微晃动。"
},
{
"narration": "街头抗议蔓延至全国各大城市,交通瘫痪,市民绕行,警车与救护车鸣笛穿行,远处火焰映红夜空,城市夜景被动荡染色,摄影机缓缓俯视捕捉街头全景。",
"prompt": "夜晚,火光与街灯混合,硬光,中全景,航拍,暖色调,对称构图。航拍城市中心,街道红橙火光映照,车辆穿行,人群密集。高楼玻璃反射火光,旗帜随风飘动,镜头缓慢俯瞰捕捉全景。"
},
{
"narration": "街头抗议蔓延至全国各大城市,交通瘫痪,市民绕行,警车与救护车鸣笛穿行。远处火焰映红夜空,城市夜景被动荡染色,街道上人群密集,场面紧张而充满动感。",
"prompt": "夜晚,火光与街灯混合,硬光,中全景,航拍,暖色调,对称构图。航拍城市中心,街道红橙火光映照,车辆穿行,人群密集。高楼玻璃反射火光,旗帜随风飘动,镜头缓慢俯瞰捕捉全景。"
},
#chapter 5
{
"narration": "全国各地媒体密集报道抗议活动,电视屏幕显示街头实时画面,人群举旗呐喊,交通中断,新闻主播分析事件进展,舆论迅速发酵,社会各界关注抗议动向和政府应对措施。",
"prompt": "白天,日光,柔光,中全景,低角度拍摄,混合色调,中心构图。电视屏幕显示街头抗议实况,主播坐在桌前播报,摄像机捕捉屏幕和主播动作。光线均匀照亮新闻室,人群和旗帜在屏幕上清晰可见。"
},
{
"narration": "社交网络上抗议视频广泛传播,用户纷纷评论和转发,手机屏幕光映照脸庞,人们手指滑动屏幕,虚拟空间与现实街头画面形成呼应,舆论的热度不断上升。",
"prompt": "夜晚,荧光光,柔光,中近景,冷色调,右侧重构图。房间昏暗,用户手持手机浏览抗议视频,屏幕光映照面部,手指滑动动作被捕捉。背景虚化,光线反射桌面和墙面,画面动态清晰。"
},
{
"narration": "总统发表公开讲话,呼吁全国民众保持冷静,强调国家团结,摄像机从低角度捕捉他的坚定表情,背景国旗随风轻扬,新闻直播同步播出,舆论场再次聚焦最高领导层的言辞。",
"prompt": "白天,日光,硬光,中近景,低角度拍摄,暖色调,中心构图。总统身着深色西装站在讲台前,手握讲稿。国旗随风轻扬,摄像机捕捉面部神情和手势,阳光从侧面照亮讲台和人物轮廓。"
},
{
"narration": "媒体采访抗议者,他们描述亲历现场的情景,手中举着标语,口中高喊口号,摄像机捕捉表情和动作,旗帜随风摆动,背景城市建筑在阳光下显露轮廓。",
"prompt": "白天,日光,柔光,中近景,侧光,暖色调,平衡构图。抗议者举旗喊口号,摄影记者举机拍摄。旗帜随风飘动,背景建筑在阳光下清晰可见,镜头捕捉人脸表情和手部动作。"
},
{
"narration": "社交媒体上,网民对政府应对抗议措施进行热烈讨论,评论区刷屏,手机屏幕光映照使用者面部,他们手指快速滑动屏幕,虚拟空间的互动与现实事件形成映射。",
"prompt": "夜晚,荧光光,柔光,中近景,冷色调,左侧重构图。房间昏暗,用户手持手机浏览评论。屏幕光映照面部,手指快速滑动屏幕,光线反射桌面和墙面,背景虚化,动作细节清晰。"
},
{
"narration": "各大城市街头的抗议活动逐渐平息,部分街道恢复交通,残留标语和纸屑随风飘落,远处建筑灯光闪烁,城市夜色下的街头呈现动静交织的景象。",
"prompt": "夜晚,日光与人工光混合,中全景,柔光,暖色调,航拍,中心构图。航拍视角俯瞰街道,残留标语和纸屑随风飞舞。远处高楼灯光闪烁,街道车辆缓慢行驶,镜头捕捉动静结合的景象。"
},
{
"narration": "新闻分析节目中,评论员回顾抗议事件全过程,多地街头画面在背景大屏展示。光线从侧面和顶部照亮场景,画面清晰而完整,主持人讲解动作自然,场景富有信息感。",
"prompt": "白天,荧光光,柔光,中近景,混合色调,侧光,中心构图。主持人坐在桌前讲解抗议事件,背景大屏显示街头画面。镜头切换捕捉主持人手势和屏幕内容,光线均匀照亮面部与桌面。"
},
{
"narration": "总统办公室内,核心团队评估抗议后续影响,讨论政策调整,桌上笔记本和文件堆叠,窗外阳光透入,镜头捕捉每个人专注表情与手部动作,办公室紧张而有条不紊。",
"prompt": "白天,日光,柔光,中近景,暖色调,侧光,平衡构图。办公室桌面堆放笔记本和文件,核心团队专注讨论,手指翻动文件。阳光透过窗户照亮桌面与人物,镜头捕捉表情与动作。"
},
{
"narration": "媒体发布的街头抗议视频被剪辑成多段短片,在社交平台上传播,手机屏幕显示播放界面,人们观看并评论,屏幕光映照面部,形成虚拟世界与现实事件的互动画面。",
"prompt": "夜晚,荧光光,柔光,中近景,冷色调,右侧重构图。房间昏暗,用户手持手机观看抗议短片。屏幕光映照面部,手指滑动屏幕,光线反射桌面和墙面,虚拟内容和现实光影互动清晰。"
},
{
"narration": "抗议事件逐渐收尾,街道清理人员开始工作,旗帜被收起,纸屑被扫除。远处建筑灯光亮起,城市夜景恢复平静,整座城市呈现恢弘景象。",
"prompt": "夜晚,人工光与火光混合,中全景,柔光,暖色调,航拍,中心构图。航拍视角拉远,街道清理人员工作,旗帜收起,纸屑被扫除。远处高楼灯光亮起,城市夜景恢弘,镜头捕捉整体景观。"
}
]
negative = 'Bright tones, overexposed, static, blurry details, subtitles, style, work, painting, picture, still, overall grayish, worst quality, low quality, JPEG compression residue, ugly, incomplete, redundant fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, deformed limbs, finger fusion, still picture A messy background, three legs, a lot of people in the background, walking backwards'
speak = lxml.etree.Element('speak', nsmap={None:'http://www.w3.org/2001/10/synthesis', 'mstts':'http://www.w3.org/2001/mstts'}, attrib={'{http://www.w3.org/XML/1998/namespace}lang':'zh-CN', 'version':'1.0'})
voice = lxml.etree.SubElement(speak, 'voice', attrib={'name':'zh-CN-XiaoxiaoNeural'})
async def bing(prompt):
voice.text = prompt
async with aiohttp.ClientSession(headers={'user-agent':fake_useragent.UserAgent().chrome}) as session:
async with session.get('https://www.bing.com/translator', params={'from':'zh-Hans'}) as translator:
html = bs4.BeautifulSoup(await translator.text(), 'lxml')
params_AbusePreventionHelper = json.loads(builtins.next(_ for _ in builtins.str(html.find('script', string=re.compile('var params_AbusePreventionHelper =')).string).split(';') if _.startswith(' var params_AbusePreventionHelper =')).split(' = ')[1])
async with session.post('https://www.bing.com/tfettts', params={'isVertical':1, 'IG':builtins.next(_ for _ in builtins.str(html.find('script', string=re.compile('IG:')).string).split(',') if _.startswith('IG:')).split('"')[1], 'IID':html.find('div', attrs={'data-iid':True}).get('data-iid') + '.1'}, data={'ssml':lxml.etree.tostring(speak, encoding='UTF-8').decode(), 'token':params_AbusePreventionHelper[1], 'key':params_AbusePreventionHelper[0]}) as tfettts: return await tfettts.content.read()
async def google(prompt):
async with aiohttp.ClientSession(headers={'user-agent':fake_useragent.UserAgent().chrome}) as session:
async with session.get('https://translate.google.com/translate_tts', params={'ie':'UTF-8', 'q':prompt, 'tl':'zh-CN', 'client':'tw-ob'}) as translate_tts: return await translate_tts.content.read()
async def main():
app = aiohttp.web.Application()
app.add_routes([aiohttp.web.static('/', pathlib.Path(__file__).resolve().parent, show_index=True)])
runner = aiohttp.web.AppRunner(app)
await runner.setup()
site = aiohttp.web.TCPSite(runner, port=7860)
await site.start()
async with aiohttp.ClientSession(headers={'authorization':'Bearer ' + os.getenv('modelscope')}, timeout=aiohttp.ClientTimeout()) as client:
async with client.post('https://chaowenguo-qwen.ms.show/start', json={'prompt':scripts[0].get('prompt'), 'height':720, 'width':1280}) as _:pass
while True:
async with client.get('https://chaowenguo-qwen.ms.show/get') as qwen:
print(qwen.status)
if qwen.status == 404: await asyncio.sleep(60)
else:
buffer = io.BytesIO(await qwen.content.read())
image = PIL.Image.open(buffer)
with av.open('output.mp4', mode='w') as writer:
video = writer.add_stream('h264', rate=8)
video.height = image.size[1]
video.width = image.size[0]
video.pix_fmt = 'yuv420p'
videoPts = 0
audioPts = 0
audio = None
for script in scripts:
outer = False
while True:
with aiohttp.MultipartWriter('form-data') as mpwriter:
mpwriter.append(script.get('prompt')).set_content_disposition('form-data', name='prompt')
mpwriter.append(negative).set_content_disposition('form-data', name='negative')
mpwriter.append(buffer.getvalue(), {'Content-Type':'image/png'}).set_content_disposition('form-data', name='image', filename='image.png')
tail = 'https://chaowenguo-zh.ms.show/'
async with client.post(urllib.parse.urljoin(tail, 'start'), data=mpwriter) as _: pass
while True:
try:
async with client.get(urllib.parse.urljoin(tail, 'get')) as get:
print(get.status)
match get.status:
case 404: await asyncio.sleep(60)
case 500 | 429: break
case 200:
reader = numpy.load(io.BytesIO(await get.content.read())).get('arr_0')
buffer.seek(0)
buffer.truncate(0)
PIL.Image.fromarray(reader[-1]).save(buffer, format='png')
with av.open(io.BytesIO(await sys.modules.get(__name__).google(script.get('narration'))), format='mp3') as container:
if not audio: audio = writer.add_stream('aac', rate=container.streams.audio[0].rate)
speed = builtins.float(container.streams.audio[0].duration * container.streams.audio[0].time_base) / 10
print(speed)
graph = av.filter.Graph()
graph.link_nodes(graph.add_abuffer(template=container.streams.audio[0]), graph.add('atempo', builtins.str(speed)), graph.add('apad', 'whole_dur=10'), graph.add('atrim', '0:10'), graph.add('abuffersink')).configure()
for frame in container.decode():
frame.pts = audioPts
audioPts += frame.samples
graph.push(frame)
while True:
try: writer.mux(audio.encode(graph.pull()))
except (av.BlockingIOError, av.EOFError): break
graph = av.filter.Graph()
pathlib.Path(__file__).resolve().parent.joinpath('subtitle.ass').write_text(pathlib.Path(__file__).resolve().parent.joinpath('subtitle').read_text().replace('prompt', script.get('narration').replace(',', ', ')))
graph.link_nodes(graph.add_buffer(height=video.height, width=video.width, format='rgb24', time_base=video.time_base), graph.add('subtitles', 'subtitle.ass'), graph.add('buffersink')).configure()
for _ in itertools.islice(reader, reader.shape[0] - 1):
frame = av.VideoFrame.from_ndarray(_)
frame.pts = videoPts
videoPts += video.time_base.denominator // video.average_rate
graph.push(frame)
while True:
try: writer.mux(video.encode(graph.pull()))
except (av.BlockingIOError, av.EOFError):break
graph.push(None)
while True:
try: writer.mux(video.encode(graph.pull()))
except (av.BlockingIOError, av.EOFError):break
outer = True
break
except (aiohttp.ClientConnectionError, aiohttp.ClientPayloadError): break
if outer: break
writer.mux(video.encode())
writer.mux(audio.encode())
break
huggingface_hub.upload_file(path_or_fileobj='output.mp4', path_in_repo='zh.mp4', repo_id='chaowenguoback/wan', repo_type='dataset', token=os.getenv('huggingface'))
await asyncio.sleep(math.inf)
try:
uvloop.run(main())
except:
pathlib.Path(__file__).resolve().parent.joinpath('zh.txt').write_text(traceback.format_exc())
huggingface_hub.upload_file(path_or_fileobj='zh.txt', path_in_repo='zh.txt', repo_id='chaowenguoback/wan', repo_type='dataset', token=os.getenv('huggingface'))
time.sleep(math.inf)