PyQt5: QMediaplayer, QVideowidget воспроизводит видео
PyQt5: QMediaplayer, QVideowidget воспроизводит видео

PyQt5: воспроизведение видео

Предисловие

В последнее время я работаю над некоторыми проектами по управлению видео, а Python уже давно не обновляется, поэтому я сделал простой видеоплеер.

среда

Язык кода:javascript
копировать
IDE:VS2017
Python:py3.6,pyqt5.12
Система: Win10

Идеи

  • QVideoWidget: этот класс в основном используется для управления воспроизведением видео.
  • QMediaPlayer: класс, реализующий воспроизведение мультимедиа.
  • QMediPlayList: список воспроизведения мультимедиа, индивидуальное понимание, используется для контроля и управления порядком, методом и т. д. воспроизведения.

фрагмент кода

  • Элементы управления пользовательского интерфейса Используется только один виджет, а для отображения списка воспроизведения размещается ListWideget.
  • базовая структура Простой формат Qt
Язык кода:javascript
копировать
Область импорта библиотеки: из *** import ***
класс основной формы:class m_window():
Основная функция: функция входа, выход из программы

-класс основной формы(Реализация основной функции)

1. Конструктор (функция инициализации)

Функция входа класса записывает объявление и инициализацию QMediaPlayer. , инициализация списка, подключение некоторых слотов сигнала (воспроизведение, пауза, индикатор выполнения, переключение списка)

Язык кода:javascript
копировать
	def __init__(self):
		super(m_window,self).__init__()
		self.setupUi(self)
		#Инициализация кнопки
		self.PushButtonInit()
		#Инициализация индикатора выполнения
		self.ProgressBarInit()
		#Player, инициализация плейлиста
		self.mplayer = QMediaPlayer(self)	
		self.ListWidgetInit()
		self.mplayList.setCurrentIndex(0)
		#mVideoWidget Инициализация элемента управления
		self.mVideoWin = QVideoWidget(self)
		self.mVideoWin.setGeometry(5,5,640,480)
		#nplayerУстановить форму вывода видео (QVideoWideget)
		self.mplayer.setVideoOutput(self.mVideoWin)
		#Сигнал、канавка
		self.play.clicked.connect(self.PlayVideo)
		self.stop.clicked.connect(self.StopVideo)
		self.mplayer.positionChanged.connect(self.PlaySlide)
		self.mplayer.durationChanged.connect(self.MediaTime)
		self.listWidget.itemDoubleClicked.connect(self.GetItem)
		self.Index_Signle.connect(self.SetPlayMedia)

2. Функция инициализации кнопок, включая положение, размер, текст и другие настройки.

Язык кода:javascript
копировать
def PushButtonInit(self):
		self.play = QPushButton(self)
		self.play.setGeometry(5,495,50,20)
		self.play.setText("Play")
		self.play.show()
		self.stop = QPushButton(self)
		self.stop.setGeometry(65,495,50,20)
		self.stop.setText("stop")
		self.stop.show()

3. Инициализация индикатора выполнения: объявление, определение, тип, положение, размер, диапазон, отображение.

Язык кода:javascript
копировать
	def ProgressBarInit(self):
		self.Slider = QSlider(Qt.Horizontal,self)
		self.Slider.setGeometry(150,495,200,20)
		self.Slider.setRange(0,100)
		self.Slider.show()

4. Реализация функций слота для кнопок воспроизведения и паузы.

Язык кода:javascript
копировать
	def PlayVideo(self):
		self.mplayer.play()

	def StopVideo(self):
		self.mplayer.pause()

5. Установите исходное положение ползунка индикатора выполнения, продолжительность мультимедиа (мс/1000, преобразованную в S), установите диапазон индикатора выполнения в соответствии с продолжительностью мультимедиа и получите функцию слота сигнала для времени мультимедиа.

Язык кода:javascript
копировать
	def MediaTime(self,time):
		self.Slider.setValue(0)
		self.time = self.mplayer.duration() /1000
		self.Slider.setRange(0,int(self.time))

6. Функция слота сигнала изменения позиции воспроизведения мультимедиа (используется для реализации функции индикатора выполнения)

Язык кода:javascript
копировать
	def PlaySlide(self,val):
		self.Slider.setValue(int(val/1000))

7. Управление плейлистом, инициализация LIstWidget, инициализация playList (теперь список жестко запрограммирован)

Язык кода:javascript
копировать
	def ListWidgetInit(self):
		self.mplayList = QMediaPlaylist();
		self.mplayList.addMedia(QMediaContent(QUrl.fromLocalFile("https://vd1.bdstatic.com/mda-hg6uempmez9u6mqi/sc/mda-hg6uempmez9u6mqi.mp4?auth_key=1562172911-0-0-4c22196ad1d0fcc49402d91336c999c5&bcevod_channel=searchbox_feed&pd=bjh&abtest=all")))
		self.mplayList.addMedia(QMediaContent(QUrl.fromLocalFile("https://vd1.bdstatic.com/mda-hgdizw7w7fpc1pcr/sc/mda-hgdizw7w7fpc1pcr.mp4?auth_key=1562254279-0-0-703eb2eca1f7017eaa49b62a7ef56dda&bcevod_channel=searchbox_feed&pd=bjh&abtest=all")))
		self.mplayer.setPlaylist(self.mplayList)
		self.mplayList.setPlaybackMode(QMediaPlaylist.CurrentItemInLoop)
		self.listWidget.addItem("1")
		self.listWidget.addItem("2")

8. Функция переключения списка реализует функцию слота, а сигнал представляет собой пользовательский индексный сигнал позиции индекса (дважды щелкните, чтобы начать воспроизведение)

Сигнал

Язык кода:javascript
копировать
	Index_Signle = pyqtSignal(int)

функция слота

Язык кода:javascript
копировать
	def SetPlayMedia(self,Index):
		self.mplayer.stop()
		self.mplayList.setCurrentIndex(Index)
		self.mplayer.play()

9.ListWidgetдвойной щелчок Сигналфункция слота,Signle_IndexСигналфункция эмиссии

Язык кода:javascript
копировать
	def GetItem(self,Item):
		self.Index = self.listWidget.row(Item)
		self.Index_Signle.emit(self.Index)

Скриншот функции:

Скриншот из видео 1

Скриншот воспроизведения видео 2

недостаточный

это СМИигратьустройство,На самом деле, я представляю себе очень простой медиаплеер.,Пока воспроизведение возможно, все в порядке.,Позже добавлено,играть,пауза,индикатор выполнения,Декоративная функция, такая как список. Другие функции,Перетаскивание индикатора выполнения,Установить игровую позицию,перемотка вперед,Медленная перемотка вперед и другие функции,В этом разделе игрового списка,Приобретение местных СМИ,Приобретение онлайн-СМИ,Добавить медиа в список,списокItemРеализация некоторых функций, таких как автоматическое присвоение имен именам.。Поскольку я написал один раньшеQtмузыкаигратьустройство,Функция апелляции также в основном реализована,Поэтому я не стал писать дальше.,Выполняйте повторяющиеся задачи. Давайте поговорим об идеях:

Приобретение местных СМИ:Добавить элемент управления(кнопка),Использование QFile для реализации поля выбора файла,Добавьте фильтрацию для реализации выбора локальных медиа.

Приобретение онлайн-СМИ:добавить одинLineEidt,Используется для входа в сетьсуществоватьлиния пути к медиафайлам,присоединитьсяигратьсписок

Перетаскивание индикатора выполнения:использоватьSliderСигналvaluechangeждать,получатьиграть Расположение,использоватьsetPostionУстановить игровую позицию

перемотка вперед:Это тоже верноиграть Расположениеобработка,Установите равную разницу во времени,выполнитьиграть Расположениепрыгать

список список:Отрежьте весь путь местным СМИ,Используйте суффикс и «/» для выполнения вырезания и захвата.,Получить элемент списка,Интернет-СМИ вводятся вручную.

Список записей:использовать Конфигурационный файлjson、xmlждать,Запишите, когда вы в последний раз выходили,игратьсписок список、игратьсостояние、времясостояниеждать,В следующий раз, когда вы инициализируете,Сделайте настройки.

исходный код

Исходный код

/---------------------------------2019.11.19-------------------------------------*/

Реализованы вышеупомянутые функции адаптивного размера окна, быстрой перемотки вперед и замедленной перемотки вперед.

PyQt5: QMediaplayer, QVideowidget воспроизводит видео2

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose