BosonAI_Hackathon / tabs /video_tab.py
github-actions[bot]
Deploy snapshot for HF Space (LFS pointers, heavy tests removed)
09eaf7c
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)}")