diff --git a/app/models/schema.py b/app/models/schema.py index 251a72e..94a9859 100644 --- a/app/models/schema.py +++ b/app/models/schema.py @@ -98,6 +98,7 @@ class VideoParams: video_language: Optional[str] = "" # auto detect voice_name: Optional[str] = "" + voice_volume: Optional[float] = 1.0 bgm_type: Optional[str] = "random" bgm_file: Optional[str] = "" bgm_volume: Optional[float] = 0.2 @@ -231,18 +232,18 @@ class VideoTermsResponse(BaseResponse): } -class BgmListResponse(BaseResponse): +class BgmRetrieveResponse(BaseResponse): class Config: json_schema_extra = { "example": { "status": 200, "message": "success", "data": { - "bgm_list": [ + "files": [ { - "filename": "output000.mp3", - "size": 2249517, - "filepath": "C:\\Users\\cathy\\Desktop\\MoneyPrinterTurbo\\resource\\songs\\output000.mp3" + "name": "output013.mp3", + "size": 1891269, + "file": "/MoneyPrinterTurbo/resource/songs/output013.mp3" } ] } @@ -257,7 +258,7 @@ class BgmUploadResponse(BaseResponse): "status": 200, "message": "success", "data": { - "uploaded_path": "/root/home/MoneyPrinterTurbo/resource/songs/example.mp3" + "file": "/MoneyPrinterTurbo/resource/songs/example.mp3" } }, } diff --git a/app/services/video.py b/app/services/video.py index 1ebc9ae..3d08e11 100644 --- a/app/services/video.py +++ b/app/services/video.py @@ -229,6 +229,11 @@ def generate_video(video_path: str, result = CompositeVideoClip(clips) audio = AudioFileClip(audio_path) + try: + audio = audio.volumex(params.voice_volume) + except Exception as e: + logger.warning(f"failed to set audio volume: {e}") + result = result.set_audio(audio) temp_output_file = f"{output_file}.temp.mp4" @@ -302,6 +307,8 @@ if __name__ == "__main__": cfg.n_threads = 2 cfg.paragraph_number = 1 + cfg.voice_volume = 3.0 + generate_video(video_path=video_file, audio_path=audio_file, subtitle_path=subtitle_file, diff --git a/webui/Main.py b/webui/Main.py index 4d8483f..6a11499 100644 --- a/webui/Main.py +++ b/webui/Main.py @@ -224,7 +224,7 @@ with left_panel: params.video_script = st.text_area( tr("Video Script"), value=st.session_state['video_script'], - height=180 + height=280 ) if st.button(tr("Generate Video Keywords"), key="auto_generate_terms"): if not params.video_script: @@ -295,6 +295,8 @@ with middle_panel: cfg['voice_name'] = voice_name save_config() + params.voice_volume = st.selectbox(tr("Speech Volume"), + options=[0.6, 0.8, 1.0, 1.2, 1.5, 2.0, 3.0, 4.0, 5.0], index=2) bgm_options = [ (tr("No Background Music"), ""), (tr("Random Background Music"), "random"), @@ -373,6 +375,19 @@ if start_button: logger.info(utils.to_json(params)) scroll_to_bottom() - tm.start(task_id=task_id, params=params) + result = tm.start(task_id=task_id, params=params) + + video_files = result.get("videos", []) + st.success(tr("Video Generation Completed")) + try: + if video_files: + # center the video player + player_cols = st.columns(len(video_files) * 2 + 1) + for i, url in enumerate(video_files): + player_cols[i * 2 + 1].video(url) + except Exception as e: + pass + open_task_folder(task_id) logger.info(tr("Video Generation Completed")) + scroll_to_bottom() diff --git a/webui/i18n/de.json b/webui/i18n/de.json index a7d7994..a2023da 100644 --- a/webui/i18n/de.json +++ b/webui/i18n/de.json @@ -23,6 +23,7 @@ "Number of Videos Generated Simultaneously": "Anzahl der parallel generierten Videos", "Audio Settings": "**Audio Einstellungen**", "Speech Synthesis": "Sprachausgabe", + "Speech Volume": "Lautstärke der Sprachausgabe", "Male": "Männlich", "Female": "Weiblich", "Background Music": "Hintergrundmusik", @@ -46,6 +47,7 @@ "Video Script and Subject Cannot Both Be Empty": "Das Video-Thema und Drehbuch dürfen nicht beide leer sein", "Generating Video": "Video wird erstellt, bitte warten...", "Start Generating Video": "Beginne mit der Generierung", - "Video Generation Completed": "Video erfolgreich generiert" + "Video Generation Completed": "Video erfolgreich generiert", + "You can download the generated video from the following links": "Sie können das generierte Video über die folgenden Links herunterladen" } } \ No newline at end of file diff --git a/webui/i18n/en.json b/webui/i18n/en.json index 964f316..f4de6d1 100644 --- a/webui/i18n/en.json +++ b/webui/i18n/en.json @@ -23,6 +23,7 @@ "Number of Videos Generated Simultaneously": "Number of Videos Generated Simultaneously", "Audio Settings": "**Audio Settings**", "Speech Synthesis": "Speech Synthesis Voice", + "Speech Volume": "Speech Volume (1.0 represents 100%)", "Male": "Male", "Female": "Female", "Background Music": "Background Music", @@ -46,6 +47,7 @@ "Video Script and Subject Cannot Both Be Empty": "Video Subject and Video Script cannot both be empty", "Generating Video": "Generating video, please wait...", "Start Generating Video": "Start Generating Video", - "Video Generation Completed": "Video Generation Completed" + "Video Generation Completed": "Video Generation Completed", + "You can download the generated video from the following links": "You can download the generated video from the following links" } } \ No newline at end of file diff --git a/webui/i18n/zh.json b/webui/i18n/zh.json index 269c725..ed7bc67 100644 --- a/webui/i18n/zh.json +++ b/webui/i18n/zh.json @@ -22,7 +22,8 @@ "Clip Duration": "视频片段最大时长(秒)", "Number of Videos Generated Simultaneously": "同时生成视频数量", "Audio Settings": "**音频设置**", - "Speech Synthesis": "朗读声音", + "Speech Synthesis": "朗读声音(:red[尽量与文案语言保持一致])", + "Speech Volume": "朗读音量(1.0表示100%)", "Male": "男性", "Female": "女性", "Background Music": "背景音乐", @@ -46,6 +47,7 @@ "Video Script and Subject Cannot Both Be Empty": "视频主题 和 视频文案,不能同时为空", "Generating Video": "正在生成视频,请稍候...", "Start Generating Video": "开始生成视频", - "Video Generation Completed": "视频生成完成" + "Video Generation Completed": "视频生成完成", + "You can download the generated video from the following links": "你可以从以下链接下载生成的视频" } } \ No newline at end of file