[PyQT5] Opencv를 이용하여 Pyqt5 Youtube view 만들기 (How to watch youtube in pyqt5 - 2) [6]
2021. 6. 28. 08:34ㆍGUI Programming/PyQT5 (GUI Programming)
반응형
[ 우선 따라해보는 Python ]
https://github.com/Mr-DooSun/pyqt5-gui/tree/master/ex4_youtube/ex2_opencv_youtube
Pyqt5 에서 youtube 시청하는 방법 2번째를 가르쳐드리겠습니다
이번에는 opencv를 이용하여 실시간으로 프레임을 가져온뒤 pyqt5 label에 띄우는 형식으로 진행하겠습니다
※ 시작하기에 앞서 이 방법은 소리 재생이 안됩니다.
우선 pafy라는 모듈과 opencv를 설치해줍니다
pip install pafy
pip install opencv-python
그리고 아래와 같은 모듈들을 import 해줍니다
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QPixmap, QImage
import pafy
import cv2
from time import sleep
import threading
그리곤 video_viewer_label 이라는 이름으로 label을 추가해준뒤
아래 함수를 이용할 경우 youtube video를 볼 수 있습니다.
def Video_to_frame(self, MainWindow):
url = "https://www.youtube.com/watch?v=t67_zAg5vvI" #youtube video url
vPafy = pafy.new(url)
video_length=vPafy.length/60
print(video_length/60)
play = vPafy.getbest(preftype="mp4")
cap = cv2.VideoCapture(play.url)
while True:
self.ret, self.frame = cap.read()
if self.ret:
self.rgbImage = cv2.cvtColor(self.frame, cv2.COLOR_BGR2RGB)
self.convertToQtFormat = QImage(self.rgbImage.data, self.rgbImage.shape[1], self.rgbImage.shape[0], QImage.Format_RGB888)
self.pixmap = QPixmap(self.convertToQtFormat)
self.p = self.pixmap.scaled(400, 225, QtCore.Qt.IgnoreAspectRatio)
self.video_viewer_label.setPixmap(self.p)
self.video_viewer_label.update()
sleep(0.03) #Youtube 영상 1프레임당 0.03초
else :
break
cap.release()
cv2.destroyAllWindows()
[ 결과 ]
이상 포스팅을 마치도록하겠습니다
[ 완성된 코드 ]
https://github.com/Mr-DooSun/pyqt5-gui/tree/master/ex4_youtube/ex2_opencv_youtube
반응형
'GUI Programming > PyQT5 (GUI Programming)' 카테고리의 다른 글
[Pyqt5] QMessageBox 이용하여 알림창 띄우기 (How to use QMessageBox?) [8] (0) | 2021.06.28 |
---|---|
[Pyqt5] 드래그를 하여, 윈도우창 이동하기 (How to move window when dragging frame) [7] (0) | 2021.06.28 |
[PyQT5] Pyqt5 QWebView를 이용하여 Youtube view 만들기 (How to watch youtube in pyqt5 - 1) [5] (0) | 2021.06.28 |
[PyQT5] Button clicked 사용해보기 [4] (2) | 2021.06.28 |
[PyQT5] Pixmap 이용하여 Picture,Image (사진, 이미지 출력하기) [3] (6) | 2021.06.28 |