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

毕业设计做网站怎样的工作量算达标男女做暧昧试看网站

毕业设计做网站怎样的工作量算达标,男女做暧昧试看网站,大连市建设厅网站,文稿写作网站该软件用于切割视频,手动选取视频片段的起始帧和结束帧并保存为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/932122/

相关文章:

  • 做视频网站为什么费钱品牌网络营销推广
  • 网站排名优化平台怎么在建筑网站做翻译兼职
  • 织梦做的网站如何去掉indexwordpress显示pdf
  • Myeclipse怎么做网站专业团队图片高清
  • 怎么做百度搜到的网站免费的wordpress投稿收费
  • 郑州网站顾问月夜影院
  • 网站模板源码下载网wordpress粉丝主题
  • 阜南网站建设广西最新消息今天公布
  • 响应式网站开发案例西安建设工程诚信平台
  • 如何做网站方案什么网站做一件代发
  • 江苏省 建设 注册中心网站首页网站制作企业对比
  • 腾讯云怎么备案网站吗和一起做网店差不多的网站
  • 飞翔时代网站建设泉州程序员做网站网站维护
  • 校园网站制度建设网站设计原理
  • 东莞设计制作网站制作wordpress 查询 分页
  • 营销网站seo推广费用织梦系统网站首页upcache=1
  • 网站开发亿玛酷出名5php自适应网站
  • 如何用wordpress建站室内设计学校专业
  • 学网站建设去什么学校网站开发文档下载
  • 商务网站建设实训心得体会注册城乡规划师教材
  • 优惠券网站做代理怎么样网站自动seo
  • 网站推广的策略有哪些怎么做网站注册系统
  • 百度小程序对网站seo怎么查网站的外链
  • 点击最多的网站辽宁响应式网站建设推荐
  • 京伦网站建设ui设计主要做什么
  • 福建省网站备案seo是什么意思啊视频教程
  • 微信网站怎么做的好名字论坛式网站建设
  • 湖南网站建设网站制作wordpress访问有的目录500
  • 黑龙江建设厅网站做网站前台需要什么技能
  • 方便做简笔画的网站或软件网站建设 主要学是么