Files
my-video-workflow/workflow/bilibili.py

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()