当前位置: 首页 > news >正文

贵阳汽车网站建设ui界面设计作品模板

贵阳汽车网站建设,ui界面设计作品模板,WordPress作者信息框,iis发布网站乱码该软件用于切割视频,手动选取视频片段的起始帧和结束帧并保存为json文件。gui界面如下:包含快进、快退、暂停等功能, 代码如下: # codingUTF-8 """ theme: pyqt5实现动作起始帧和结束帧的定位,将定位到…

该软件用于切割视频,手动选取视频片段的起始帧和结束帧并保存为json文件。gui界面如下:包含快进、快退、暂停等功能,

代码如下:

# coding=UTF-8
"""
theme: pyqt5实现动作起始帧和结束帧的定位,将定位到的帧数保存json文件
time:  2024-6-27
author: cong
"""
import json
import re
import sys
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent, QMediaPlaylist
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *# 使用 QMediaPlayer 可以进行视频文件解码,视频播放必须将视频帧在某个界面组件上显示,
# 有 QVideoWidget 和 QGraphicsVideoItem 两种视频显示组件,也可以从这两个类继承,自定义视频显示组件。
# QMediaPlayer 也可以结合 QMediaPlaylist 实现视频文件列表播放。class VideoWin(QWidget):save_flag = 0save_start_count = 1save_end_count = 2def __init__(self):super(VideoWin, self).__init__()self.setWindowTitle("MediaPlayer")# 播放画面self.player = QMediaPlayer()self.video_widget = QVideoWidget(self)  # 定义视频显示的widget,界面组件self.video_widget.setFixedSize(1280,720)self.player.setVideoOutput(self.video_widget)  # 视频播放输出的widget,就是上面定义的# 当前播放的进度,显示调整视频进度条self.label_time = QLabel()self.timeSlider = QSlider()self.timeSlider.setOrientation(Qt.Horizontal)self.timeSlider.setValue(0)self.timeSlider.setMinimum(0)self.player.positionChanged.connect(self.get_time)self.timeSlider.sliderPressed.connect(self.player.pause)self.timeSlider.sliderMoved.connect(self.change_time)self.timeSlider.sliderReleased.connect(self.player.play)# 打开视频self.open_button = QPushButton('打开')self.open_button.clicked.connect(self.open_file)# 快进self.right_button = QPushButton('快进')self.right_button.clicked.connect(self.up_time)# playself.play_button = QPushButton('播放')self.play_button.clicked.connect(self.player.play)# pauseself.mid_button = QPushButton('暂停')self.mid_button.clicked.connect(self.player.pause)# 快退self.left_button = QPushButton('快退')self.left_button.clicked.connect(self.down_time)# 保存开始时间self.start_button = QPushButton('保存动作开始时间')self.start_button.clicked.connect(self.save_start_time)# 保存结束时间self.end_button = QPushButton('保存动作结束时间')self.end_button.clicked.connect(self.save_end_time)# 所有时间选定,最终保存按钮self.done_button = QPushButton('完成并保存')self.done_button.setFixedSize(100,40)self.done_button.clicked.connect(self.save_json)# 视频路径 entry 布局self.path_entry = QLineEdit()# 创建一个网格布局grid_layout = QGridLayout()self.entry_names = [f'entry_{i + 1}' for i in range(80)]for i in range(80):if (i+1) % 2 == 1:label = QLabel(f"start_frame_d{int((i+1)// 2 + 1)}:")else:label = QLabel(f"end_frame_d{int((i+1) / 2)}:")self.entry_names[i] = QLineEdit(self)grid_layout.addWidget(label, i // 2, (i % 2) * 2)grid_layout.addWidget(self.entry_names[i], i // 2, (i % 2) * 2 + 1)# 上述按钮布局button_layout = QHBoxLayout()button_layout.addWidget(self.open_button)button_layout.addWidget(self.right_button)button_layout.addWidget(self.play_button)button_layout.addWidget(self.mid_button)button_layout.addWidget(self.left_button)button_layout.addWidget(self.start_button)button_layout.addWidget(self.end_button)# 左侧布局left_layout = QVBoxLayout()left_layout.addWidget(self.video_widget)left_layout.addWidget(self.label_time, alignment=Qt.AlignRight)left_layout.addWidget(self.timeSlider)left_layout.addLayout(button_layout)left_layout.addSpacing(100)left_layout.addWidget(QLabel("视频路径:"))left_layout.addWidget(self.path_entry)# 中间布局middle_layout = QVBoxLayout()middle_layout.addLayout(grid_layout)# 右侧布局right_layout = QVBoxLayout()right_layout.addWidget(self.done_button)# 总布局all_layout = QHBoxLayout()all_layout.addLayout(left_layout)all_layout.addLayout(middle_layout)all_layout.addLayout(right_layout)self.setLayout(all_layout)self.showMaximized()# 打开视频def open_file(self):a = QFileDialog.getOpenFileUrl()[0]self.video_path = a.toString()self.player.setMedia(QMediaContent(a))  # 选取视频文件msg = QMessageBox.information(self, '提示', "已经打开视频文件")self.path_entry.setText(self.video_path)# 调节播放进度def change_time(self, num):self.player.setPosition(num)# 快进def up_time(self):# print(self.player.duration())# num = self.player.position() + int(self.player.duration() / 20)num = self.player.position() + 200self.player.setPosition(num)# 快退def down_time(self):# num = self.player.position() - int(self.player.duration() / 20)num = self.player.position() - 200self.player.setPosition(num)# 获取进度条进度def get_time(self, num):self.timeSlider.setMaximum(self.player.duration())self.timeSlider.setValue(num)frame_count = int(num / 1000 * 30)# d = QDateTime.fromMSecsSinceEpoch(num).toString("mm:ss")# print(d)all = self.player.duration()total_count = int(all / 1000 * 30)# all_d = QDateTime.fromMSecsSinceEpoch(all).toString("mm:ss")self.label_time.setText(str(frame_count) + '/' + str(total_count))def closeEvent(self, event):  # 关闭前需要self.player.pause()操作,否则报错self.player.pause()reply = QMessageBox.question(self, '提示',"是否退出",QMessageBox.Yes | QMessageBox.No,QMessageBox.No)if reply == QMessageBox.Yes:event.accept()else:event.ignore()def save_start_time(self):if self.save_flag == 0:self.save_flag = 1start_time = self.player.position()start_frame = int(start_time / 1000 * 30)self.entry_names[self.save_start_count-1].setText(str(start_frame))self.save_start_count += 2QMessageBox.information(self, "保存成功", f"已保存当前时间点:第{start_frame}帧 ")else:QMessageBox.information(self, "保存失败", f"请先保存动作结束时间 ")def save_end_time(self):if self.save_flag == 1:self.save_flag = 0end_time = self.player.position()end_frame = int(end_time / 1000 * 30)self.entry_names[self.save_end_count-1].setText(str(end_frame))self.save_end_count += 2QMessageBox.information(self, "保存成功", f"已保存当前时间点:第{end_frame}帧 ")else:QMessageBox.information(self, "保存失败", f"请先保存动作开始时间 ")def save_json(self):result = {}single_part = {}video_path = self.video_pathprint('当前保存结果来源于视频文件', video_path)result['video_path'] = video_pathresult['split_result'] = []# video_path: 'file:///D:/SplitVideo/dmh2.avi'file_path = re.split('/', video_path)[-1] + '.json'for i in range(len(self.entry_names)):if self.entry_names[i].text() != '':if (i + 1) % 2 == 1:label_key = f"start_frame_d{int((i + 1) // 2 + 1)}:"else:label_key = f"end_frame_d{int((i + 1) / 2)}:"single_part[label_key]= int(self.entry_names[i].text())# print(self.single_part)result['split_result'].append(single_part)with open(file_path, 'w') as f:json.dump(result, f)if __name__ == '__main__':app = QApplication(sys.argv)app.aboutToQuit.connect(app.deleteLater)win = VideoWin()win.show()sys.exit(app.exec())

http://www.yayakq.cn/news/621414/

相关文章:

  • 广安们内网站建设如何做好公司网站
  • 免费做网站app软件开发流程有哪些步骤
  • 小程序源码购买抖音seo优化系统招商
  • 网站文章来源seo投票制作网站
  • 深圳网站建设sz886网站开发维护合同
  • 龙华建设网站wordpress修改后台
  • 企业网站建设制作公司哪家好建设银行信用卡网站显示余额
  • 南京网站群建设公司温州专业微网站制作
  • 北京 广告 手机网站商业空间设计案例ppt
  • 网站建设系统下载购物车功能网站怎么做的
  • 上海做网站推广关键词唐山建设网站网站
  • 广东网站设计公司电话wordpress关闭发表评论
  • 游戏网站建设视频教程东莞市建设工程监督网站
  • ps做图 游戏下载网站wordpress多个网站
  • 电子商务网站建设与管理相关论文温州推广团队
  • 怎么做html5网站吗深圳易捷网站建设
  • 网站seo监测未注册过的好听的商标名
  • dwcc怎么做网站哪些网站可以做任务挣钱
  • 大学生服装网站建设策划书重庆建网站的公司集中在哪里
  • 怎么查网站的域名备案价格网站注册登录
  • 即墨做网站公司友情链接查询
  • 建设银行网站机构特点业务发展什么关键词能搜到资源
  • 辽宁省营商环境建设局网站wordpress文章阅读量修改
  • 福州+网站建设+医疗东莞阳光网直播平台
  • 网站的特征包括网站开发工具设备要求
  • 用tomcat做网站目录商务 服务类网站模板
  • 巨鹿建设银行网站首页谷歌sem推广
  • 邢台123网站模板wordpress在哪里下载地址
  • 深圳地区5g微波网站建设计划wordpress tint主题
  • 西安公司的网站建设做网站前期框架图