video_player.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. #!/usr/bin/env python3
  2. try:
  3. import cv2
  4. except:
  5. cv2 = None
  6. import pygame
  7. import pygame.font
  8. import time
  9. import os
  10. pygame.init()
  11. class Vopen():
  12. def __init__(self):
  13. self.fname = '/home/user/Downloads/video.mp4'
  14. self.fname = '/home/user/Downloads/video.ogv'
  15. self.fname = '/home/user/Downloads/bbb_sunflower_480x320.mp4'
  16. self.x = 0
  17. self.y = 0
  18. self.im = None
  19. self.pos = 0
  20. self.buffer = []
  21. self.init()
  22. def init(self):
  23. print(self,"init()",self.fname)
  24. if not os.path.isfile(self.fname):
  25. print()
  26. print("video file does not exits !! >",self.fname)
  27. print()
  28. exit()
  29. self.buffer = []
  30. if cv2:
  31. cap = cv2.VideoCapture(self.fname)
  32. self.cap = cap
  33. self.success, self.img = self.cap.read()
  34. try:
  35. self.img = cv2.cvtColor(self.img, cv2.COLOR_BGR2RGB)
  36. #self.buffer.append(self.img)
  37. self.pos = 0
  38. except:pass
  39. self.shape = self.img.shape[1::-1]
  40. def read(self):
  41. #print(self,"read()")
  42. self.success, self.img = self.cap.read()
  43. #print(self.success)
  44. try:
  45. self.img = cv2.cvtColor(self.img, cv2.COLOR_BGR2RGB)
  46. except Exception as e:
  47. print("exception 432",e)
  48. def prev(self):
  49. self.pos -= 1
  50. if self.pos < 0:
  51. self.pos = len(self.buffer)-1
  52. self.im = self.buffer[self.pos]
  53. def next(self):
  54. #print(self,"play",time.time())
  55. #print(dir(self.cap))
  56. #print(self.cap.set.__doc__)
  57. #print(self.cap.grab.__doc__)
  58. self.read()
  59. try:
  60. self.im = pygame.image.frombuffer(self.img.tobytes(), self.shape, "RGB")
  61. self.buffer.append(self.im)
  62. self.pos += 1
  63. # wn.blit(im, (self.x, self.y))
  64. except AttributeError as e:
  65. print("except",e)
  66. time.sleep(1)
  67. self.init()
  68. def draw(self,wn=None):
  69. if self.success and wn: # is not None:
  70. wn.blit(self.im, (self.x, self.y))
  71. def overlay(self,wn=None,mode="x"):
  72. # overlay
  73. font15 = pygame.font.SysFont("freemonobold",20)
  74. fr = font15.render(">:{}".format(mode) ,1, (0,0,0))
  75. wn.blit(fr,(10,10))
  76. font15 = pygame.font.SysFont("freemonobold",20)
  77. fr = font15.render("FRAME:{}".format(self.pos) ,1, (0,0,0))
  78. wn.blit(fr,(110,10))
  79. v = Vopen()
  80. shape = [300,300]
  81. if v.shape:
  82. shape = v.shape
  83. wn = pygame.display.set_mode(v.shape,pygame.RESIZABLE)
  84. window = wn
  85. clock = pygame.time.Clock()
  86. pygame.display.set_caption('LibreLight VIDEO PLAYER (BOUNCE-LOOP)')
  87. def grab(x=55,y=55,w=60,h=60):
  88. # usage
  89. # sub = grab()
  90. # window.blit(sub, (500,10))
  91. rect = pygame.Rect(x, y, w, h)
  92. sub = window.subsurface(rect)
  93. #pixArray = pygame.PixelArray(screen)
  94. crop = pygame.Surface((w,h))
  95. crop.blit(sub, (0,0))
  96. return crop
  97. class VideoDemo():
  98. def __init__(self):
  99. pass
  100. max_frame=0
  101. success=1
  102. loop = 1
  103. run = 1
  104. while v.success and success:
  105. for event in pygame.event.get():
  106. if event.type == pygame.QUIT:
  107. success = False
  108. _button = None
  109. if "button" in event.dict:
  110. _button = event.dict["button"]
  111. if event.type:
  112. print(_button, event.type,run)
  113. if _button == 1:
  114. if event.type == 5:
  115. print("----")
  116. if run:
  117. run = 0
  118. else:
  119. run = 1
  120. d = "PAUSE"
  121. if run:
  122. if loop:
  123. d = "PLAY"
  124. if max_frame < 100:
  125. v.next()
  126. max_frame+=1
  127. else:
  128. d = "REVERSE"
  129. #max_frame = 0
  130. #v.init()
  131. v.prev()
  132. if v.pos <= 0:
  133. max_frame = 0
  134. v.pos = len(v.buffer)-1
  135. else:
  136. v.next()
  137. #print(i)
  138. if wn:
  139. v.draw(wn) #,x=0,y=0)
  140. # overlay
  141. v.overlay(wn,d)
  142. sub = grab()
  143. wn.blit(sub, (500,10))
  144. pygame.display.update()
  145. clock.tick(420)
  146. #clock.tick(60)
  147. pygame.quit()