You've already forked my-video-workflow
避免异常,更换逻辑,删除B站投稿
This commit is contained in:
@ -6,18 +6,15 @@ from typing import Optional
|
||||
|
||||
from flask import Blueprint, jsonify, request, current_app
|
||||
|
||||
from config import BILILIVE_RECORDER_DIRECTORY, VIDEO_TITLE, XIGUALIVE_RECORDER_DIRECTORY, VIDEO_DESC, \
|
||||
VIDEO_TAGS, VIDEO_TID, VIDEO_ENABLED
|
||||
from config import BILILIVE_RECORDER_DIRECTORY, VIDEO_TITLE, XIGUALIVE_RECORDER_DIRECTORY
|
||||
from exception.danmaku import DanmakuException
|
||||
from model import db
|
||||
from model.DanmakuClip import DanmakuClip
|
||||
from model.VideoClip import VideoClip
|
||||
from model.Workflow import Workflow
|
||||
from workflow.bilibili import IS_LIVING, IS_UPLOADING, INSTANCE as bilibili_instance, IS_ENCODING
|
||||
from workflow.bilibili import VideoPart
|
||||
from workflow.bilibili import ENCODING_QUEUE, IS_LIVING
|
||||
from workflow.danmaku import get_file_start
|
||||
from workflow.video import get_video_real_duration, duration_str_to_float
|
||||
from workflow.worker import do_workflow
|
||||
|
||||
blueprint = Blueprint("api_bilirecorder", __name__, url_prefix="/api/bilirecorder")
|
||||
|
||||
@ -35,50 +32,13 @@ def auto_submit_task():
|
||||
if len(bili_record_workflow_item.video_clips) == 0:
|
||||
print("[!]Auto Submit Fail: No Video Clips")
|
||||
return
|
||||
if VIDEO_ENABLED:
|
||||
bilibili_instance.login()
|
||||
video_title = bili_record_workflow_item.name
|
||||
_future = None
|
||||
for video_clip in bili_record_workflow_item.video_clips:
|
||||
if len(video_clip.danmaku_clips) > 0:
|
||||
print("[+]Workflow:", bili_record_workflow_item.id, "; Video:", video_clip.full_path)
|
||||
_started = True
|
||||
IS_ENCODING.set()
|
||||
_future = pool.submit(
|
||||
do_workflow,
|
||||
video_clip.full_path,
|
||||
video_clip.danmaku_clips[0].full_path,
|
||||
*[clip.full_path for clip in video_clip.danmaku_clips[1:]]
|
||||
)
|
||||
ENCODING_QUEUE.put(bili_record_workflow_item)
|
||||
clear_item()
|
||||
def _clear_encode_flag_callback(_f: "Future"):
|
||||
IS_ENCODING.clear()
|
||||
_future.add_done_callback(_clear_encode_flag_callback)
|
||||
if VIDEO_ENABLED:
|
||||
def _encode_finish_callback(_f: "Future"):
|
||||
_result = _f.result()
|
||||
if _result:
|
||||
# start uploading
|
||||
bilibili_instance.pre_upload(
|
||||
parts=[VideoPart(os.path.join(_item['base_path'], _item['file']), _item['file'])
|
||||
for _item in _result],
|
||||
max_retry=10
|
||||
)
|
||||
|
||||
_future.add_done_callback(_encode_finish_callback)
|
||||
else:
|
||||
print("[-]Workflow:", bili_record_workflow_item.id, "; Video:", video_clip.full_path, "; No Danmaku")
|
||||
if VIDEO_ENABLED and _future is not None:
|
||||
def _on_upload_finish(_f: "Future"):
|
||||
if IS_UPLOADING.is_set() or IS_LIVING.is_set() or IS_ENCODING.is_set():
|
||||
return
|
||||
bilibili_instance.finish_upload(
|
||||
title=video_title,
|
||||
desc=VIDEO_DESC,
|
||||
tid=VIDEO_TID,
|
||||
tag=VIDEO_TAGS,
|
||||
no_reprint=0)
|
||||
_future.add_done_callback(_on_upload_finish)
|
||||
|
||||
|
||||
def clear_item():
|
||||
@ -109,6 +69,7 @@ def safe_create_item():
|
||||
commit_item()
|
||||
auto_submit_task()
|
||||
bili_record_workflow_item = Workflow()
|
||||
bili_record_workflow_item.name = VIDEO_TITLE.format(datetime.utcnow().strftime("%Y%m%d"))
|
||||
else:
|
||||
bili_record_workflow_item.name = VIDEO_TITLE.format(datetime.utcnow().strftime("%Y%m%d"))
|
||||
bili_record_workflow_item.automatic = True
|
||||
|
@ -2,23 +2,3 @@ from flask import Blueprint, jsonify
|
||||
from workflow.bilibili import INSTANCE as BILIBILI_INSTANCE
|
||||
|
||||
blueprint = Blueprint("api_biliuploader", __name__, url_prefix="/api/biliuploader")
|
||||
|
||||
|
||||
@blueprint.get("/")
|
||||
def get_login_info():
|
||||
return jsonify({
|
||||
"mid": BILIBILI_INSTANCE.user_id,
|
||||
"expires": BILIBILI_INSTANCE.expires,
|
||||
"login_at": BILIBILI_INSTANCE.login_time,
|
||||
})
|
||||
|
||||
|
||||
@blueprint.post("/")
|
||||
def do_login():
|
||||
BILIBILI_INSTANCE.login()
|
||||
return get_login_info()
|
||||
|
||||
|
||||
@blueprint.post("/finish")
|
||||
def finish_uploading():
|
||||
BILIBILI_INSTANCE.finish_upload()
|
||||
|
Reference in New Issue
Block a user