creapaint
Posts: 7
Joined: Thu Nov 14, 2019 1:42 pm

problème avec subprocess pour lire une vidéo

Fri Nov 22, 2019 2:22 pm

Bonjour,

J'ai créer un menu en python et pygame ou je navigue avec une manette pour pouvoir lancer des vidéos

Pour lancer la vidéo j'utilise subprocess.popen('omxplayer'). Le problème, impossible de quitter la vidéo avec la manette et de pouvoir retourner sur le menu.

Voici le code:

Code: Select all

import pygame
import os
from subprocess import*
from pygame import*
import time
#from moviepy.editor import*
#import moviepy.video.fx.all as vfx
#import RPI.GPIO as GPIO

pygame.init()  



ecran = pygame.display.set_mode((1920, 1080))
pygame.display.set_caption("Hololine")

manette = pygame.joystick.Joystick(0)

mouse.set_visible(False)
manette.init()


video_goku = Popen(['omxplayer','/home/pi/Desktop/Goku_hologramme.mkv'])

menu_principal = True

while menu_principal:
    for event in pygame.event.get():
        pygame.display.flip()
        if event.type == JOYBUTTONDOWN and event.button == 0:
            video_goku.kill()
        
pygame.display.flip()


pygame.quit()
quit()

danjperron
Posts: 3419
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: problème avec subprocess pour lire une vidéo

Fri Nov 22, 2019 3:49 pm

Bonjour Creapaint,

Le meilleur moyen est de faire un tuyau(pipe) pour les entrées/sorties.


Regarde ma version avec une carte RFID pour changer les vidéos.

https://github.com/danjperron/rc522_rea ... rOnRFID.py

creapaint
Posts: 7
Joined: Thu Nov 14, 2019 1:42 pm

Re: problème avec subprocess pour lire une vidéo

Fri Nov 22, 2019 4:11 pm

Désolé mais c'est la seule solution ?
Car je n'ai pas l'habitude de travailler sous linux et python, et pour moi ton exemple est beaucoup
trop complexe. C'est le seule moyen pour arreter une vidéo ?

Car avec pygame quand je me sert de videoFileClip() avec moviePy, les vidéo rame.

J'ai essayé de me servir du framework AppGameKit qui marche très bien sur PC mais nimpossible de lire
une vidéo sur raspberry avec.

Il n'y a qu'avec subprocess.open ou j'arrive a lire une vidéo mais pas à la quitter tant qu'elle n'es pas terminé.

Je suis complètement bloqué avec cette carte Raspberry pour pouvoir lire des vidéos.

danjperron
Posts: 3419
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: problème avec subprocess pour lire une vidéo

Fri Nov 22, 2019 4:28 pm

Code: Select all

import pygame
import os
from subprocess import*
from pygame import*
import time
#from moviepy.editor import*
#import moviepy.video.fx.all as vfx
#import RPI.GPIO as GPIO

pygame.init()



ecran = pygame.display.set_mode((1920, 1080))
pygame.display.set_caption("Hololine")

manette = pygame.joystick.Joystick(0)

mouse.set_visible(False)
manette.init()


video_goku = Popen(['omxplayer','/home/pi/Desktop/Goku_hologramme.mkv'],stdout=PIPE, stdin=PIPE)

menu_principal = True

while menu_principal:
    for event in pygame.event.get():
        pygame.display.flip()
        if event.type == JOYBUTTONDOWN and event.button == 0:
           if video_goku != 0:
              video_goku.stdin.write(b'q')
              video_goku.stdin.flush()
              video_goku=0

pygame.display.flip()
pygame.quit()
quit()
Je ne peux pas vérifier mais cela devrait fonctionner

*** update remove subprocess
Last edited by danjperron on Fri Nov 22, 2019 6:25 pm, edited 1 time in total.

creapaint
Posts: 7
Joined: Thu Nov 14, 2019 1:42 pm

Re: problème avec subprocess pour lire une vidéo

Fri Nov 22, 2019 4:29 pm

C'est gentil à toi !

Je testerais ça quand je pourrais et je reveindrais te dire si tout ça à fonctionner.

Merci

creapaint
Posts: 7
Joined: Thu Nov 14, 2019 1:42 pm

Re: problème avec subprocess pour lire une vidéo

Fri Nov 22, 2019 4:50 pm

Bon après avoir tester ça ne marche toujours pas, ça me lance bien la vidéo mais impossible de la stopper.

danjperron
Posts: 3419
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: problème avec subprocess pour lire une vidéo

Fri Nov 22, 2019 6:34 pm

Ok j'ai corrigé les paramètres pour les pipes et j'ai vérifié en utilisant un GPIO.


Ce soir je vais utiliser un manette de jeu .


Selon ton code tu ne sors pas du programme mais tu veux fermer le vidéo. Est-ce exactement ce que tu veux?


Voici mon code qui utilise seulement le GPIO21 . Si le GPIO 21 tombe à GND le vidéo ce ferme.
Pour quitter le programme il faut faire CTRL-C.

Code: Select all

import pygame
import os
from subprocess import*
from pygame import*
import time
import RPi.GPIO as GPIO

pygame.init()


ecran = pygame.display.set_mode((1440,900))
pygame.display.set_caption("Hololine")

mouse.set_visible(False)

GPIO.setmode(GPIO.BCM)
GPIO.setup(21,GPIO.IN,pull_up_down=GPIO.PUD_UP)

video_goku = Popen(['omxplayer','/home/pi/Pond_2013_03_19.mp4'],stdout=PIPE, std                                                                                                                                                             in=PIPE)

menu_principal = True

try:
 while menu_principal:
    if GPIO.input(21)==0:
        if video_goku != 0:
           video_goku.stdin.write(b'q')
           video_goku.stdin.flush()
           video_goku=0


except KeyboardInterrupt:
    pass

pygame.display.flip()
pygame.quit()
mouse.set_visible(True)
quit()

danjperron
Posts: 3419
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: problème avec subprocess pour lire une vidéo

Sat Nov 23, 2019 5:03 am

Salut creapaint,


J'ai essayer l'exemple corrigé avec un gamepad et ça fonctionne sauf que la façon que ton script est fait le vidéo s'éteint lorsque tu appuies sur le gamepad mais il reste dans la boucle.


Daniel

creapaint
Posts: 7
Joined: Thu Nov 14, 2019 1:42 pm

Re: problème avec subprocess pour lire une vidéo

Sat Nov 23, 2019 2:45 pm

Non c'est bon tout fonctionne correctement j'avais fait une erreur, j'ai écrit video.stdin.white(b'q') au lieu de video.stdin.write(b'q'), je te remercie
beaucoup pour ton coup de pouce.

Par contre autre soucis, mes animations de sprite sont lentes, je n'arrive pas à comprendre :

Code: Select all

import pygame
import subprocess
import os
from pygame import*
import time
#import RPI.GPIO as GPIO

pygame.init()

anim_boutonA = pygame.image.load("Images/animation_bouton_a.png")
frame_anim_boutonA = 0
WIDTH_ANIM_BOUTON_A = 93 # 930X93
frame_rect_anim_bouton_a = pygame.Rect(frame_anim_boutonA * WIDTH_ANIM_BOUTON_A, 0, 93, 93)
time_next_frame = 75
clock = pygame.time.Clock()


# BOUCLE PRINCIPALE
while menu_principal:
    placement_goku = False
    placement_goku_ssj3 = False
    placement_vegeta = False
    placement_verre = False
    for event in pygame.event.get():           
        if event.type == JOYBUTTONDOWN and event.button == 1:
            son_boutonA.play()
            menu_model()
    
    dt = clock.tick(30)
    time_next_frame = time_next_frame - dt
    if time_next_frame < 0:
        time_next_frame = time_next_frame + 75
        frame_anim_boutonA = (frame_anim_boutonA + 1) % 10
        frame_rect_anim_bouton_a = pygame.Rect(frame_anim_boutonA * WIDTH_ANIM_BOUTON_A, 0, 93, 93)
    
    pygame.display.update()
    ecran.fill( (0,0,0) )
    ecran.blit(fond, (0,0))
    ecran.blit(anim_boutonA, dest=(914, 494), area=frame_rect_anim_bouton_a)
        
    pygame.display.flip()
    
pygame.quit()
quit()
Es-ce normal ¿

Return to “Français”