diff --git a/app/services/llm.py b/app/services/llm.py index c5b70dd..0fe4950 100644 --- a/app/services/llm.py +++ b/app/services/llm.py @@ -7,6 +7,7 @@ from typing import List from loguru import logger from openai import OpenAI from openai import AzureOpenAI +from moviepy.editor import VideoFileClip from openai.types.chat import ChatCompletion import google.generativeai as gemini from googleapiclient.errors import ResumableUploadError @@ -406,17 +407,19 @@ def compress_video(input_path: str, output_path: str): return try: - command = [ - ffmpeg_path, - "-i", input_path, - "-c:v", "h264", - "-b:v", "500k", - "-c:a", "aac", - "-b:a", "128k", - output_path - ] - logger.info(f"执行命令: {' '.join(command)}") - subprocess.run(command, check=True) + clip = VideoFileClip(input_path) + clip.write_videofile(output_path, codec='libx264', audio_codec='aac', bitrate="500k", audio_bitrate="128k") + # command = [ + # ffmpeg_path, + # "-i", input_path, + # "-c:v", "h264", + # "-b:v", "500k", + # "-c:a", "aac", + # "-b:a", "128k", + # output_path + # ] + # logger.info(f"执行命令: {' '.join(command)}") + # subprocess.run(command, check=True) except subprocess.CalledProcessError as e: logger.error(f"视频压缩失败: {e}") raise @@ -814,7 +817,8 @@ if __name__ == "__main__": # gemini_video_transcription(video_subject, video_path, language) # 2. 解说文案 - video_path = "/Users/apple/Desktop/home/NarratoAI/resource/videos/1.mp4" + # video_path = "/Users/apple/Desktop/home/NarratoAI/resource/videos/1.mp4" + video_path = "E:\\projects\\NarratoAI\\resource\\videos\\1.mp4" video_plot = """ 李自忠拿着儿子李牧名下的存折,去银行取钱给儿子救命,却被要求证明"你儿子是你儿子"。 走投无路时碰到银行被抢劫,劫匪给了他两沓钱救命,李自忠却因此被银行以抢劫罪起诉,并顶格判处20年有期徒刑。 diff --git a/app/services/task.py b/app/services/task.py index 43e9b27..2e3ff30 100644 --- a/app/services/task.py +++ b/app/services/task.py @@ -476,24 +476,17 @@ def start_subclip(task_id: str, params: VideoClipParams, subclip_path_videos): if __name__ == "__main__": task_id = "test123456" - subclip_path_videos = {'01:17-01:37': './storage/cache_videos/vid-01_17-01_37.mp4', - '00:00-00:06': './storage/cache_videos/vid-00_00-00_06.mp4', - '00:06-00:09': './storage/cache_videos/vid-00_06-00_09.mp4', - '01:03-01:10': './storage/cache_videos/vid-01_03-01_10.mp4', - '01:10-01:17': './storage/cache_videos/vid-01_10-01_17.mp4', - '00:24-00:27': './storage/cache_videos/vid-00_24-00_27.mp4', - '01:28-01:36': './storage/cache_videos/vid-01_28-01_36.mp4', - '00:32-00:41': './storage/cache_videos/vid-00_32-00_41.mp4', - '01:36-01:58': './storage/cache_videos/vid-01_36-01_58.mp4', - '00:12-00:15': './storage/cache_videos/vid-00_12-00_15.mp4', - '00:09-00:12': './storage/cache_videos/vid-00_09-00_12.mp4', - '02:12-02:25': './storage/cache_videos/vid-02_12-02_25.mp4', - '02:03-02:12': './storage/cache_videos/vid-02_03-02_12.mp4', - '01:58-02:03': './storage/cache_videos/vid-01_58-02_03.mp4', - '03:14-03:18': './storage/cache_videos/vid-03_14-03_18.mp4', - '03:18-03:20': './storage/cache_videos/vid-03_18-03_20.mp4'} + subclip_path_videos = {'00:41-01:58': 'E:\\projects\\NarratoAI\\storage\\cache_videos/vid-00_41-01_58.mp4', + '00:06-00:15': 'E:\\projects\\NarratoAI\\storage\\cache_videos/vid-00_06-00_15.mp4', + '01:10-01:17': 'E:\\projects\\NarratoAI\\storage\\cache_videos/vid-01_10-01_17.mp4', + '00:47-01:03': 'E:\\projects\\NarratoAI\\storage\\cache_videos/vid-00_47-01_03.mp4', + '01:03-01:10': 'E:\\projects\\NarratoAI\\storage\\cache_videos/vid-01_03-01_10.mp4', + '02:40-03:08': 'E:\\projects\\NarratoAI\\storage\\cache_videos/vid-02_40-03_08.mp4', + '03:02-03:20': 'E:\\projects\\NarratoAI\\storage\\cache_videos/vid-03_02-03_20.mp4', + '03:18-03:20': 'E:\\projects\\NarratoAI\\storage\\cache_videos/vid-03_18-03_20.mp4'} + params = VideoClipParams( - video_clip_json_path="/Users/apple/Desktop/home/NarratoAI/resource/scripts/test003.json", - video_origin_path="/Users/apple/Desktop/home/NarratoAI/resource/videos/1.mp4", + video_clip_json_path="E:\\projects\\NarratoAI\\resource/scripts/test003.json", + video_origin_path="E:\\projects\\NarratoAI\\resource/videos/1.mp4", ) start_subclip(task_id, params, subclip_path_videos=subclip_path_videos) diff --git a/app/services/video.py b/app/services/video.py index 2adcfc5..864634c 100644 --- a/app/services/video.py +++ b/app/services/video.py @@ -300,7 +300,8 @@ def generate_video( ) video_clip.close() del video_clip - logger.success("completed") + logger.success("" + "completed") def generate_video_v2( @@ -310,6 +311,18 @@ def generate_video_v2( output_file: str, params: Union[VideoParams, VideoClipParams], ): + """ + 合并所有素材 + Args: + video_path: + audio_paths: + subtitle_path: + output_file: + params: + + Returns: + + """ aspect = VideoAspect(params.video_aspect) video_width, video_height = aspect.to_resolution() @@ -546,13 +559,11 @@ def combine_clip_videos(combined_video_path: str, # 一遍又一遍地添加下载的剪辑,直到达到音频的持续时间 (max_duration) # while video_duration < audio_duration: for video_path, video_ost in zip(video_paths, video_ost_list): - print(video_path) - print(video_ost) cache_video_path = utils.root_dir() clip = VideoFileClip(os.path.join(cache_video_path, video_path)) - # # 通过 ost 字段判断是否播放原声 - # if not video_ost: - # clip = clip.without_audio() + # 通过 ost 字段判断是否播放原声 + if not video_ost: + clip = clip.without_audio() # # 检查剪辑是否比剩余音频长 # if (audio_duration - video_duration) < clip.duration: # clip = clip.subclip(0, (audio_duration - video_duration)) diff --git a/webui.bat b/webui.bat index 111e1d3..f56d6ef 100644 --- a/webui.bat +++ b/webui.bat @@ -3,6 +3,12 @@ set CURRENT_DIR=%CD% echo ***** Current directory: %CURRENT_DIR% ***** set PYTHONPATH=%CURRENT_DIR% +set "vpn_proxy_url=%http://127.0.0.1:7890%" + +:: 使用VPN代理进行一些操作,例如通过代理下载文件 +set "http_proxy=%vpn_proxy_url%" +set "https_proxy=%vpn_proxy_url%" + @echo off setlocal enabledelayedexpansion @@ -40,4 +46,4 @@ pause rem set HF_ENDPOINT=https://hf-mirror.com -streamlit run webui.py --browser.gatherUsageStats=False --server.enableCORS=True +streamlit run webui.py --browser.serverAddress="127.0.0.1" --server.enableCORS=True --server.maxUploadSize=2048 --browser.gatherUsageStats=False