From f0dee9a8e2b62f4e906e0498bfe818f18e35b07e Mon Sep 17 00:00:00 2001 From: linyqh Date: Mon, 12 Aug 2024 23:44:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=B8=8A=E4=BC=A0=E8=A7=86?= =?UTF-8?q?=E9=A2=91=E5=8A=9F=E8=83=BD=EF=BC=9B=E4=BC=98=E5=8C=96=E7=B3=BB?= =?UTF-8?q?=E7=BB=9Fbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements.txt | 2 +- webui.sh | 12 +++++----- webui/Main.py | 56 ++++++++++++++++++++++++++++++++++++---------- webui/i18n/zh.json | 4 +++- 4 files changed, 53 insertions(+), 21 deletions(-) diff --git a/requirements.txt b/requirements.txt index 65fca39..cfe7295 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ requests~=2.31.0 moviepy~=2.0.0.dev2 openai~=1.13.3 faster-whisper~=1.0.1 -edge_tts~=6.1.10 +edge_tts~=6.1.12 uvicorn~=0.27.1 fastapi~=0.110.0 tomli~=2.0.1 diff --git a/webui.sh b/webui.sh index 5a723ae..bc77421 100644 --- a/webui.sh +++ b/webui.sh @@ -41,15 +41,13 @@ for url in "${!urls_paths[@]}"; do # 提取文件名 filename=$(basename "$url") - # 检查文件是否已经存在 - if [ -f "$output_dir/$filename" ]; then - echo "文件 $filename 已经存在,跳过下载" - else - wget -P "$output_dir" "$url" & - fi + # 下载文件,避免重复下载 + wget -P "$output_dir" -nc "$url" &> /dev/null || { + echo "下载失败: $url" >&2 + } done -# 等待所有下载完成 +# 等待所有后台任务完成 wait echo "所有文件已成功下载到指定目录" diff --git a/webui/Main.py b/webui/Main.py index bc9feeb..52be6a1 100644 --- a/webui/Main.py +++ b/webui/Main.py @@ -2,6 +2,7 @@ import sys import os import glob import json +import time import datetime # 将项目的根目录添加到系统路径中,以允许从项目导入模块 @@ -38,8 +39,10 @@ from app.models.schema import VideoClipParams, VideoAspect, VideoConcatMode from app.services import task as tm, llm, voice, material from app.utils import utils -os.environ["HTTP_PROXY"] = config.proxy.get("http", "") or os.getenv("VPN_PROXY_URL", "") -os.environ["HTTPS_PROXY"] = config.proxy.get("https", "") or os.getenv("VPN_PROXY_URL", "") +proxy_url_http = config.proxy.get("http", "") or os.getenv("VPN_PROXY_URL", "") +proxy_url_https = config.proxy.get("https", "") or os.getenv("VPN_PROXY_URL", "") +os.environ["HTTP_PROXY"] = proxy_url_http +os.environ["HTTPS_PROXY"] = proxy_url_https hide_streamlit_style = """ @@ -50,11 +53,7 @@ support_locales = [ "zh-CN", "zh-HK", "zh-TW", - "de-DE", "en-US", - "fr-FR", - "vi-VN", - "th-TH", ] font_dir = os.path.join(root_dir, "resource", "fonts") song_dir = os.path.join(root_dir, "resource", "songs") @@ -183,6 +182,9 @@ with st.expander(tr("Basic Settings"), expanded=False): st.session_state['ui_language'] = code config.ui['language'] = code + HTTP_PROXY = st.text_input(tr("HTTP_PROXY"), value=proxy_url_http) + HTTPs_PROXY = st.text_input(tr("HTTPs_PROXY"), value=proxy_url_https) + with middle_config_panel: # openai # moonshot (月之暗面) @@ -192,7 +194,8 @@ with st.expander(tr("Basic Settings"), expanded=False): # qwen (通义千问) # gemini # ollama - llm_providers = ['OpenAI', 'Moonshot', 'Azure', 'Qwen', 'Gemini', 'Ollama', 'G4f', 'OneAPI', "Cloudflare"] + # llm_providers = ['Gemini', 'OpenAI', 'Moonshot', 'Azure', 'Qwen', 'Ollama', 'G4f', 'OneAPI', "Cloudflare"] + llm_providers = ['Gemini'] saved_llm_provider = config.app.get("llm_provider", "OpenAI").lower() saved_llm_provider_index = 0 for i, provider in enumerate(llm_providers): @@ -283,10 +286,12 @@ with left_panel: params.video_clip_json = script_path[selected_json2][1] video_json_file = params.video_clip_json - # 视频文件 - suffix = "*.mp4" - song_dir = utils.video_dir() - files = glob.glob(os.path.join(song_dir, suffix)) + # 视频文件处理 + files = [] + for suffix in ["*.mp4", "*.mov", "*.avi", "*.mkv"]: + files.extend(glob.glob(os.path.join(utils.video_dir(), suffix))) + files = files[::-1] + video_list = [] for file in files: video_list.append({ @@ -295,7 +300,7 @@ with left_panel: "file": file, }) - video_path = [(tr("None"), ""), ] + video_path = [("None", ""), (tr("Upload Local Files"), "local")] for code in [file['file'] for file in video_list]: video_path.append((code, code)) @@ -305,6 +310,33 @@ with left_panel: format_func=lambda x: video_path[x][0] # 显示给用户的是标签 ) params.video_origin_path = video_path[selected_index2][1] + config.app["video_origin_path"] = params.video_origin_path + + # 从本地上传 mp4 文件 + if params.video_origin_path == "local": + _supported_types = FILE_TYPE_VIDEOS + uploaded_file = st.file_uploader( + tr("Upload Local Files"), + type=["mp4", "mov", "avi", "flv", "mkv"], + accept_multiple_files=False, + ) + if uploaded_file is not None: + # 构造保存路径 + video_file_path = os.path.join(utils.video_dir(), uploaded_file.name) + file_name, file_extension = os.path.splitext(uploaded_file.name) + # 检查文件是否存在,如果存在则添加时间戳 + if os.path.exists(video_file_path): + timestamp = time.strftime("%Y%m%d%H%M%S") + file_name_with_timestamp = f"{file_name}_{timestamp}" + video_file_path = os.path.join(utils.video_dir(), file_name_with_timestamp + file_extension) + # 将文件保存到指定目录 + with open(video_file_path, "wb") as f: + f.write(uploaded_file.read()) + st.success(tr("File Uploaded Successfully")) + time.sleep(1) + st.rerun() + # params.video_origin_path = video_path[selected_index2][1] + # config.app["video_origin_path"] = params.video_origin_path # 剧情内容 video_plot = st.text_area( diff --git a/webui/i18n/zh.json b/webui/i18n/zh.json index e344987..82b3d72 100644 --- a/webui/i18n/zh.json +++ b/webui/i18n/zh.json @@ -83,6 +83,8 @@ "Voice Example": "这是一段测试语音合成的示例文本", "Synthesizing Voice": "语音合成中,请稍候...", "TTS Provider": "语音合成提供商", - "Hide Log": "隐藏日志" + "Hide Log": "隐藏日志", + "Upload Local Files": "上传本地文件", + "File Uploaded Successfully": "文件上传成功" } } \ No newline at end of file