添加视频导出的功能。

This commit is contained in:
Hommy
2025-09-05 22:33:47 +08:00
parent 8d6a892a45
commit c5464d0bb4
2 changed files with 32 additions and 8 deletions
+20 -7
View File
@@ -5,6 +5,7 @@ import src.pyJianYingDraft as draft
from src.pyJianYingDraft import ExportResolution, ExportFramerate
import config
import os
from uiautomation import UIAutomationInitializerInThread
def gen_video(draft_url: str) -> (str, str):
@@ -21,15 +22,27 @@ def gen_video(draft_url: str) -> (str, str):
# 从URL中提取草稿ID
draft_id = helper.get_url_param(draft_url, "draft_id")
if (not draft_id) or (draft_id not in DRAFT_CACHE):
if not draft_id:
return "", "无效的草稿URL"
# 此前需要将剪映打开,并位于目录页
ctrl = draft.JianyingController()
# 生成输出文件路径
outfile = os.path.join(config.DRAFT_DIR, f"{helper.gen_unique_id()}.mp4")
# 然后即可导出指定名称的草稿, 注意导出结束后视频才会被剪切(重命名)至指定位置
ctrl.export_draft("draft_id", "C:\\workspace\\test.mp4")
try:
with UIAutomationInitializerInThread():
logger.info("begin to export draft: %s -> %s", draft_id, outfile)
logger.info(f"gen video success: %s", os.path.join(config.DRAFT_DIR, draft_id))
return draft_url, "视频生成成功"
# 此前需要将剪映打开,并位于目录页
ctrl = draft.JianyingController()
# 然后即可导出指定名称的草稿, 注意导出结束后视频才会被剪切(重命名)至指定位置
ctrl.export_draft(draft_id, outfile)
if not os.path.exists(outfile):
# 个别版本剪映不会抛异常,但文件未生成
raise RuntimeError("剪映导出结束但目标文件未生成,请检查磁盘空间或剪映版本")
except Exception as exc: # 捕获 COM/剪映/磁盘等所有异常
logger.exception("export draft failed: draft_id=%s, error=%s", draft_id, exc)
return "", f"导出草稿失败: {exc}"
logger.info(f"export draft success: %s", outfile)
return outfile, "视频生成成功"
+12 -1
View File
@@ -2,6 +2,8 @@ from urllib.parse import urlparse, parse_qs
import os
import requests
import mimetypes
import datetime
import uuid
def get_url_param(url: str, key: str, default=None):
@@ -84,4 +86,13 @@ def download(url, save_dir, filename, limit=30*1024*1024, timeout=300) -> str:
# 清理可能已部分下载的文件
if os.path.exists(save_path):
os.remove(save_path)
raise e
raise e
def gen_unique_id() -> str:
"""
生成唯一ID
"""
timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
unique_id = uuid.uuid4().hex[:8]
return f"{timestamp}{unique_id}"