新增上传视频功能;优化系统bug

This commit is contained in:
linyqh 2024-08-12 23:44:28 +08:00
parent e874999bd1
commit f0dee9a8e2
4 changed files with 53 additions and 21 deletions

View File

@ -2,7 +2,7 @@ requests~=2.31.0
moviepy~=2.0.0.dev2 moviepy~=2.0.0.dev2
openai~=1.13.3 openai~=1.13.3
faster-whisper~=1.0.1 faster-whisper~=1.0.1
edge_tts~=6.1.10 edge_tts~=6.1.12
uvicorn~=0.27.1 uvicorn~=0.27.1
fastapi~=0.110.0 fastapi~=0.110.0
tomli~=2.0.1 tomli~=2.0.1

View File

@ -41,15 +41,13 @@ for url in "${!urls_paths[@]}"; do
# 提取文件名 # 提取文件名
filename=$(basename "$url") filename=$(basename "$url")
# 检查文件是否已经存在 # 下载文件,避免重复下载
if [ -f "$output_dir/$filename" ]; then wget -P "$output_dir" -nc "$url" &> /dev/null || {
echo "文件 $filename 已经存在,跳过下载" echo "下载失败: $url" >&2
else }
wget -P "$output_dir" "$url" &
fi
done done
# 等待所有下载完成 # 等待所有后台任务完成
wait wait
echo "所有文件已成功下载到指定目录" echo "所有文件已成功下载到指定目录"

View File

@ -2,6 +2,7 @@ import sys
import os import os
import glob import glob
import json import json
import time
import datetime 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.services import task as tm, llm, voice, material
from app.utils import utils from app.utils import utils
os.environ["HTTP_PROXY"] = config.proxy.get("http", "") or os.getenv("VPN_PROXY_URL", "") proxy_url_http = 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_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 = """ hide_streamlit_style = """
<style>#root > div:nth-child(1) > div > div > div > div > section > div {padding-top: 6px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px;}</style> <style>#root > div:nth-child(1) > div > div > div > div > section > div {padding-top: 6px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px;}</style>
@ -50,11 +53,7 @@ support_locales = [
"zh-CN", "zh-CN",
"zh-HK", "zh-HK",
"zh-TW", "zh-TW",
"de-DE",
"en-US", "en-US",
"fr-FR",
"vi-VN",
"th-TH",
] ]
font_dir = os.path.join(root_dir, "resource", "fonts") font_dir = os.path.join(root_dir, "resource", "fonts")
song_dir = os.path.join(root_dir, "resource", "songs") 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 st.session_state['ui_language'] = code
config.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: with middle_config_panel:
# openai # openai
# moonshot (月之暗面) # moonshot (月之暗面)
@ -192,7 +194,8 @@ with st.expander(tr("Basic Settings"), expanded=False):
# qwen (通义千问) # qwen (通义千问)
# gemini # gemini
# ollama # 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 = config.app.get("llm_provider", "OpenAI").lower()
saved_llm_provider_index = 0 saved_llm_provider_index = 0
for i, provider in enumerate(llm_providers): for i, provider in enumerate(llm_providers):
@ -283,10 +286,12 @@ with left_panel:
params.video_clip_json = script_path[selected_json2][1] params.video_clip_json = script_path[selected_json2][1]
video_json_file = params.video_clip_json video_json_file = params.video_clip_json
# 视频文件 # 视频文件处理
suffix = "*.mp4" files = []
song_dir = utils.video_dir() for suffix in ["*.mp4", "*.mov", "*.avi", "*.mkv"]:
files = glob.glob(os.path.join(song_dir, suffix)) files.extend(glob.glob(os.path.join(utils.video_dir(), suffix)))
files = files[::-1]
video_list = [] video_list = []
for file in files: for file in files:
video_list.append({ video_list.append({
@ -295,7 +300,7 @@ with left_panel:
"file": file, "file": file,
}) })
video_path = [(tr("None"), ""), ] video_path = [("None", ""), (tr("Upload Local Files"), "local")]
for code in [file['file'] for file in video_list]: for code in [file['file'] for file in video_list]:
video_path.append((code, code)) video_path.append((code, code))
@ -305,6 +310,33 @@ with left_panel:
format_func=lambda x: video_path[x][0] # 显示给用户的是标签 format_func=lambda x: video_path[x][0] # 显示给用户的是标签
) )
params.video_origin_path = video_path[selected_index2][1] 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( video_plot = st.text_area(

View File

@ -83,6 +83,8 @@
"Voice Example": "这是一段测试语音合成的示例文本", "Voice Example": "这是一段测试语音合成的示例文本",
"Synthesizing Voice": "语音合成中,请稍候...", "Synthesizing Voice": "语音合成中,请稍候...",
"TTS Provider": "语音合成提供商", "TTS Provider": "语音合成提供商",
"Hide Log": "隐藏日志" "Hide Log": "隐藏日志",
"Upload Local Files": "上传本地文件",
"File Uploaded Successfully": "文件上传成功"
} }
} }