Spaces:
Build error
Build error
| import os | |
| from PySide6.QtWidgets import (QWidget, QVBoxLayout, QLabel, QLineEdit, | |
| QScrollArea, QCheckBox, QPushButton, QMessageBox) | |
| from ui_components import (FloatSlider, CustomSlider, RadioButtonGroup, | |
| AudioSelector, VideoPlayer) | |
| # 尝试导入实际的功能模块 | |
| try: | |
| from tools.step050_synthesize_video import synthesize_all_video_under_folder | |
| except ImportError: | |
| pass | |
| class SynthesizeVideoTab(QWidget): | |
| def __init__(self, parent=None): | |
| super().__init__(parent) | |
| self.layout = QVBoxLayout(self) | |
| # 创建一个滚动区域 | |
| self.scroll_area = QScrollArea() | |
| self.scroll_area.setWidgetResizable(True) | |
| self.scroll_widget = QWidget() | |
| self.scroll_layout = QVBoxLayout(self.scroll_widget) | |
| # 视频文件夹 | |
| self.video_folder = QLineEdit("videos") | |
| self.scroll_layout.addWidget(QLabel("视频文件夹")) | |
| self.scroll_layout.addWidget(self.video_folder) | |
| # 添加字幕 | |
| self.add_subtitles = QCheckBox("添加字幕") | |
| self.add_subtitles.setChecked(True) | |
| self.scroll_layout.addWidget(self.add_subtitles) | |
| # 加速倍数 | |
| self.speed_factor = FloatSlider(0.5, 2, 0.05, "加速倍数", 1.00) | |
| self.scroll_layout.addWidget(self.speed_factor) | |
| # 帧率 | |
| self.frame_rate = CustomSlider(1, 60, 1, "帧率", 30) | |
| self.scroll_layout.addWidget(self.frame_rate) | |
| # 背景音乐 | |
| self.background_music = AudioSelector("背景音乐") | |
| self.scroll_layout.addWidget(self.background_music) | |
| # 背景音乐音量 | |
| self.bg_music_volume = FloatSlider(0, 1, 0.05, "背景音乐音量", 0.5) | |
| self.scroll_layout.addWidget(self.bg_music_volume) | |
| # 视频音量 | |
| self.video_volume = FloatSlider(0, 1, 0.05, "视频音量", 1.0) | |
| self.scroll_layout.addWidget(self.video_volume) | |
| # 分辨率 | |
| self.resolution = RadioButtonGroup( | |
| ['4320p', '2160p', '1440p', '1080p', '720p', '480p', '360p', '240p', '144p'], | |
| "分辨率", | |
| '1080p' | |
| ) | |
| self.scroll_layout.addWidget(self.resolution) | |
| # 执行按钮 | |
| self.run_button = QPushButton("开始合成视频") | |
| self.run_button.clicked.connect(self.run_synthesis) | |
| self.scroll_layout.addWidget(self.run_button) | |
| # 状态显示 | |
| self.status_label = QLabel("准备就绪") | |
| self.scroll_layout.addWidget(QLabel("合成状态:")) | |
| self.scroll_layout.addWidget(self.status_label) | |
| # 视频播放器 | |
| self.video_player = VideoPlayer("合成视频") | |
| self.scroll_layout.addWidget(self.video_player) | |
| # 设置滚动区域 | |
| self.scroll_area.setWidget(self.scroll_widget) | |
| self.layout.addWidget(self.scroll_area) | |
| self.setLayout(self.layout) | |
| def run_synthesis(self): | |
| # 这里应该调用原始的synthesize_all_video_under_folder函数 | |
| # 临时实现,实际应用中需要替换为真实的调用 | |
| self.status_label.setText("合成中...") | |
| QMessageBox.information(self, "功能提示", "视频合成功能正在实现中...") | |
| # 实际应用中解除以下注释 | |
| try: | |
| status, video_path = synthesize_all_video_under_folder( | |
| self.video_folder.text(), | |
| self.add_subtitles.isChecked(), | |
| self.speed_factor.value(), | |
| self.frame_rate.value(), | |
| self.background_music.value(), | |
| self.bg_music_volume.value(), | |
| self.video_volume.value(), | |
| self.resolution.value() | |
| ) | |
| self.status_label.setText(status) | |
| if video_path and os.path.exists(video_path): | |
| self.video_player.set_video(video_path) | |
| except Exception as e: | |
| self.status_label.setText(f"合成失败: {str(e)}") | |