瀏覽代碼

add api file

ming 3 年之前
父節點
當前提交
2a4add922e
共有 1 個文件被更改,包括 149 次插入0 次删除
  1. 149 0
      api/main.py

+ 149 - 0
api/main.py

@@ -0,0 +1,149 @@
+from typing import Optional
+from fastapi.staticfiles import StaticFiles
+from fastapi import FastAPI,File, UploadFile,Request,Response
+import util,os, math, time
+import openshot
+from pydantic import BaseModel
+from fastapi.templating import Jinja2Templates
+
+templates = Jinja2Templates(directory="static")
+app = FastAPI()
+
+app.mount("/static", StaticFiles(directory="static"), name="static")
+
+rootPath = '/app/components/'
+
+@app.get("/")
+def read_root(request: Request, response: Response):
+    return templates.TemplateResponse("uploadmp3.html", {"request": request, "response": response})
+
+@app.get("/modifyScript")
+def read_root(request: Request, response: Response):
+    return templates.TemplateResponse("modifyScript.html", {"request": request, "response": response})
+
+@app.get("/items/{item_id}")
+def read_item(item_id: int, q: Optional[str] = None):
+    return {"item_id": item_id, "q": q}
+
+
+class updateScriptModel(BaseModel):
+    name_hash:str
+    scriptStr:str
+    
+@app.post("/updateScript")
+def read_item(info : updateScriptModel):
+    lines = info.scriptStr.split(',')
+    cPath = rootPath+info.name_hash+'/'
+    
+    util.rewriteScript(cPath,lines)
+
+    sub_dict,img_dict=filePrepare(info.name_hash)
+    genVideo(info.name_hash,sub_dict,img_dict)
+
+    return 'ok'
+
+@app.post("/uploadmp3/")
+async def uploadmp3(file: UploadFile = File(...)):
+    name_hash = str(time.time()).replace('.','')
+    cPath = rootPath+name_hash+'/'
+    try:
+        os.mkdir(cPath)
+    except FileExistsError:
+        pass
+
+    with open(cPath+'speech.mp3', "wb+") as file_object:
+        file_object.write(file.file.read())
+    
+    util.transScript(cPath)
+    scripts = util.get_script(cPath)
+   
+    return name_hash, scripts
+
+
+def filePrepare(name_hash):
+    cPath = rootPath+name_hash+'/'
+    try:
+        os.mkdir(cPath)
+    except FileExistsError:
+        pass
+    sub_dict,img_dict = util.parse_script("script.txt")
+    util.generate_subtitle_image_from_dict(cPath, sub_dict)
+
+    for imgd in img_dict:
+        print(imgd)
+        util.downloadFromDrive(cPath,imgd['imgid'],imgd['index'])
+    
+    util.call_anchor(cPath+'speech.mp3',7)
+    return sub_dict,img_dict
+
+def genVideo(name_hash,sub_dict,img_dict):
+    basicPath = rootPath+'basic/'
+    cPath = rootPath+name_hash+'/'
+    ck=util.cKey(0,254,0,270)
+    ck_anchor=util.cKey(0,255,1,320)
+    t = openshot.Timeline(1280, 720, openshot.Fraction(30000, 1000), 44100, 2, openshot.LAYOUT_STEREO)
+    t.Open()
+
+    main_timer = 0
+    LOGO_OP = openshot.FFmpegReader(basicPath+"LOGO_OP_4.mp4")
+    LOGO_OP.Open()         # Open the reader
+    head_duration = LOGO_OP.info.duration
+    LOGO_OP_clip = util.video_photo_clip(vid=LOGO_OP,layer=4,position=0,end=head_duration)
+    t.AddClip(LOGO_OP_clip)
+    main_timer+=head_duration
+
+    anchor = openshot.FFmpegReader(cPath+"/speaker.mp4")
+    anchor.Open()
+    anchor_clip = util.video_photo_clip(vid=anchor,layer=4,scale_x=0.65,scale_y=0.65,
+            location_x=0.35,location_y=0.25,position=main_timer, end=anchor.info.duration,ck=ck_anchor,audio=False)
+    t.AddClip(anchor_clip)
+
+    speech = openshot.FFmpegReader(cPath+"/speech.mp3")
+    speech.Open()
+    speech_clip = openshot.Clip(speech)
+    speech_clip.Position(main_timer)
+    speech_clip.End(anchor.info.duration)
+    t.AddClip(speech_clip)
+    main_timer += anchor.info.duration
+    anchor.Close()
+    speech.Close()
+
+
+    sub_img_list = [None] * len(sub_dict)
+    sub_clip_list = [None] * len(sub_dict)
+    for sub_obj in sub_dict:
+        idx = int(sub_obj['index'])
+        sub_img_list[idx] = openshot.QtImageReader(cPath +str(idx)+'.png')
+        sub_img_list[idx].Open()
+
+        sub_clip_list[idx] = util.video_photo_clip(vid=sub_img_list[idx], layer=5,location_x=0.069, location_y=0.89
+        ,position=head_duration+sub_obj['start'],end=sub_obj['duration'])
+        t.AddClip(sub_clip_list[idx])
+        sub_img_list[idx].Close()
+    
+    img_list = [None] * len(img_dict)
+    img_clip_list = [None] * len(img_dict)
+    for img_d in img_dict:
+        idx = int(img_d['index'])
+        print(cPath +str(idx) +'img.jpg')
+        try:
+            img_list[idx] = openshot.QtImageReader(cPath +str(idx) +'img.jpg')
+            img_list[idx].Open()
+        except:
+            img_list[idx] = openshot.QtImageReader(cPath +str(idx) +'img.png')
+            img_list[idx].Open()
+
+        img_clip_list[idx] = util.video_photo_clip(vid=img_list[idx], layer=3
+        ,position=head_duration+img_d['start'],end=img_d['duration'])
+        t.AddClip(img_clip_list[idx])
+        img_list[idx].Close()
+
+
+    w = util.video_writer_init("myraw.mp4")
+    w.Open()
+    frames = int(t.info.fps)*int(main_timer)
+    for n in range(frames):
+        f=t.GetFrame(n)
+        w.WriteFrame(f)
+    t.Close()
+    w.Close()