59 lines
2.0 KiB
Python
59 lines
2.0 KiB
Python
import threading
|
||
from queue import SimpleQueue as Queue
|
||
from time import sleep
|
||
|
||
from model.Workflow import Workflow
|
||
from workflow.video import quick_split_video
|
||
from workflow.worker import do_workflow
|
||
|
||
from . import LOGGER
|
||
|
||
|
||
IS_LIVING = threading.Event()
|
||
IS_ENCODING = threading.Event()
|
||
IS_UPLOADING = threading.Event()
|
||
ENCODING_QUEUE: "Queue[Workflow]" = Queue()
|
||
|
||
|
||
class Bilibili(threading.Thread):
|
||
|
||
def __init__(self) -> None:
|
||
super().__init__()
|
||
self.parts = []
|
||
|
||
def run(self) -> None:
|
||
while True:
|
||
if ENCODING_QUEUE.empty():
|
||
sleep(5)
|
||
if len(self.parts) > 0 and not IS_UPLOADING.is_set():
|
||
self.do_upload()
|
||
else:
|
||
workflow_item = ENCODING_QUEUE.get()
|
||
LOGGER.info("收到工作流请求:ID:【{}】".format(workflow_item.id))
|
||
for video_clip in workflow_item.video_clips:
|
||
IS_ENCODING.set()
|
||
try:
|
||
LOGGER.info("工作流视频:ID:【{}】,路径:【{}】".format(video_clip.id, video_clip.full_path))
|
||
if len(video_clip.danmaku_clips) < 1:
|
||
_parts = quick_split_video(video_clip.full_path)
|
||
else:
|
||
_parts = do_workflow(video_clip.full_path, video_clip.danmaku_clips[0].full_path)
|
||
LOGGER.info("工作流视频压制完成:结果:【{}】".format(_parts))
|
||
for _part in _parts:
|
||
self.parts.append(_part)
|
||
except:
|
||
LOGGER.error("压制异常!工作流视频:ID:【{}】,路径:【{}】".format(video_clip.id, video_clip.full_path))
|
||
finally:
|
||
IS_ENCODING.clear()
|
||
|
||
def do_upload(self):
|
||
LOGGER.info("尝试投稿:内容【{}】".format(self.parts))
|
||
self.clear()
|
||
|
||
def clear(self):
|
||
self.parts = []
|
||
|
||
|
||
|
||
INSTANCE = Bilibili()
|