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
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода