1:文件夹有N多视频,如何按照比例进行分类,筛选我们要的比例的视频单独的存放文件夹。
迫不及待的先给出代码。哈哈
demo实例:我只想要文件夹中的720*1280的视频单独存放。
import os
import cv2
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit, QPushButton, QMessageBox, QVBoxLayout, QWidget, QFileDialog
class VideoRatioChecker(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('视频宽高比率检测工具')
self.setGeometry(100, 100, 400, 200)
self.input_path_label = QLabel('输入文件夹路径:')
self.input_path_text = QLineEdit()
self.button_browse = QPushButton('浏览')
self.button_execute = QPushButton('确认执行')
layout = QVBoxLayout()
layout.addWidget(self.input_path_label)
layout.addWidget(self.input_path_text)
layout.addWidget(self.button_browse)
layout.addWidget(self.button_execute)
self.widget = QWidget()
self.widget.setLayout(layout)
self.setCentralWidget(self.widget)
self.button_browse.clicked.connect(self.browse_folder)
self.button_execute.clicked.connect(self.execute_check)
def browse_folder(self):
folder_path = QFileDialog.getExistingDirectory(self, "选择文件夹")
self.input_path_text.setText(folder_path)
def execute_check(self):
input_folder_path = self.input_path_text.text()
output_folder = os.path.join(input_folder_path, '72010')
os.makedirs(output_folder, exist_ok=True)
video_files = [f for f in os.listdir(input_folder_path) if os.path.isfile(os.path.join(input_folder_path, f))]
for video_file in video_files:
video_path = os.path.join(input_folder_path, video_file)
cap = cv2.VideoCapture(video_path)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
cap.release()
if width >= 720 and height >= 1280:
output_path = os.path.join(output_folder, video_file)
os.replace(video_path, output_path)
QMessageBox.information(self, '执行完毕', '视频宽高比率检测完毧')
if __name__ == '__main__':
app = QApplication([])
window = VideoRatioChecker()
window.show()
app.exec_()
这里我做个简单的说明:
这段代码是一个基于PyQt5的GUI应用程序,它实现了一个简单的视频宽高比检查器。其功能描述如下:
初始化VideoRatioChecker类,继承自QMainWindow,并设置了窗口的基本属性如标题、位置和大小。
在窗口中创建了一系列UI组件,包括一个用于显示提示文本的QLabel(输入文件夹路径)、一个用于输入文件夹路径的QLineEdit、以及两个QPushButton(浏览和确认执行)。
当用户点击“浏览”按钮时,触发browse_folder方法,通过QFileDialog.getExistingDirectory获取用户选择的文件夹路径,并将其显示在输入框中。
当用户点击“确认执行”按钮时,触发execute_check方法。在这个方法中:
首先读取用户输入的文件夹路径。
然后,在该路径下创建一个名为'72010'的子文件夹,如果已经存在则不报错。
接下来,遍历输入文件夹中的所有文件,筛选出视频文件。
对每个视频文件,使用OpenCV的cv2.VideoCapture打开并获取视频帧的宽度和高度。
如果视频的宽度大于等于720且高度大于等于1280,则将该视频文件移动至'72010'子文件夹内。
执行完所有视频文件的检查后,弹出一个QMessageBox通知用户视频宽高比检测已完成。
最后,若脚本作为主程序运行,则创建一个QApplication实例,构建VideoRatioChecker类的实例并显示窗口,随后进入消息循环以监听和处理用户的操作。
2:文件夹有N多视频,如何按照播放时长进行分类,筛选我们要的10秒以上的视频单独存放。
先给出代码。
import os
import moviepy.editor as mp
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit, QMessageBox, QVBoxLayout, QWidget, QFileDialog
class VideoDurationChecker(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('Video Duration Checker')
self.setGeometry(100, 100, 300, 200)
self.input_path_input = QLineEdit(self)
self.input_path_input.setPlaceholderText('Input Path')
self.import_button = QPushButton('Import Folder', self)
self.import_button.clicked.connect(self.import_folder)
self.execute_button = QPushButton('Execute', self)
self.execute_button.clicked.connect(self.execute_check)
layout = QVBoxLayout()
layout.addWidget(self.input_path_input)
layout.addWidget(self.import_button)
layout.addWidget(self.execute_button)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
def import_folder(self):
options = QFileDialog.Options()
folder_path = QFileDialog.getExistingDirectory(self, "Select Folder")
self.input_path_input.setText(folder_path)
def execute_check(self):
input_folder = self.input_path_input.text()
output_folder = os.path.join(input_folder, '72010')
os.makedirs(output_folder, exist_ok=True)
for file in os.listdir(input_folder):
if file.endswith('.mp4') or file.endswith('.avi') or file.endswith('.mov'):
video_path = os.path.join(input_folder, file)
clip = mp.VideoFileClip(video_path)
duration = clip.duration
clip.close()
if duration >= 10:
output_path = os.path.join(output_folder, file)
os.rename(video_path, output_path)
QMessageBox.information(self, 'Execution Complete', 'Video duration check has been executed.')
if __name__ == "__main__":
app = QApplication([])
window = VideoDurationChecker()
window.show()
app.exec_()
基于PyQt5的GUI应用程序,主要用于检查视频文件的时长。其功能描述如下:
定义一个名为VideoDurationChecker的类,继承自QMainWindow。初始化时设置了窗口的标题、位置和大小,并在窗口中添加了以下组件:
一个QLineEdit输入框,用于输入视频文件所在的文件夹路径。
一个名为“Import Folder”的QPushButton,点击后触发import_folder方法,打开文件对话框供用户选择文件夹,并将选定的文件夹路径显示在输入框中。
一个名为“Execute”的QPushButton,点击后触发execute_check方法,执行视频时长检查操作。
import_folder方法中使用QFileDialog.getExistingDirectory获取用户选择的文件夹路径,并将其赋值给输入框。
execute_check方法中:
获取用户在输入框中输入的文件夹路径。
在该路径下创建一个名为'72010'的子文件夹,如果已存在则不会报错。
遍历输入文件夹下的所有文件,筛选出.mp4、.avi和.mov格式的视频文件。
对于每一个符合条件的视频文件,使用moviepy库加载视频并获取其时长。
若视频时长大于或等于10秒,将该视频文件移动至'72010'子文件夹内。
检查完成后,弹出一个QMessageBox告知用户视频时长检查操作已完成。
最后,程序入口处创建QApplication对象、VideoDurationChecker类的实例,并显示窗口,进入事件循环等待用户操作。
下面是窗口截图: