mirror of
https://github.com/Hommy-master/capcut-mate.git
synced 2026-11-02 13:13:27 +08:00
添加视频导出的功能。
This commit is contained in:
@@ -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
@@ -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}"
|
||||
Reference in New Issue
Block a user