Python - Interacción de Videos Con Python

 
Vista:

Interacción de Videos Con Python

Publicado por Juan (1 intervención) el 16/02/2024 17:51:56
Hola amigos, les comento que estoy realizando un proyecto de botonera interactiva con un arduino ESP32 y python, donde la idea es reproducir videos constantes, y activar otros videos mediante el uso de botones a través de los sensores capacitivos. Tengo armado el script de python pero me surge un problema con la transición de los videos que quiero mostrar al recibir la señal del arduino, ya que la idea es tocar el botón y que se reproduzca el video asociado de manera casi inmediata, pero en su defecto, solo se reproduce una vez que termina el video que está mostrando en el momento. En general me funciona bien solo tengo ese detalle para ver si me podrían ayudar. Adjunto código en uso:

import serial
from moviepy.editor import VideoFileClip
import time

# Configurar la comunicación serial
ser = serial.Serial('COM7', 115200) # Reemplaza 'COMX' con el puerto COM correcto
ser.flushInput()

# Definir la ruta de los videos
video_generico = "video_generico.mp4"
video1 = "video1.mp4"
video2 = "video2.mp4"


def play_video(video_file):
try:
video = VideoFileClip(video_file)
video.preview()
except Exception as e:
print(f"Error al reproducir el video '{video_file}': {e}")


# Reproducir el video genérico en un bucle infinito
while True:
play_video(video_generico)

# Leer datos del puerto serial
if ser.in_waiting > 0:
line = ser.readline().decode('utf-8').rstrip()
print("Datos recibidos:", line)

# Llamar a la función para reproducir el video correspondiente
if line == "1":
play_video(video1)
elif line == "2":
play_video(video2)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Interacción de Videos Con Python

Publicado por Costero (92 intervenciones) el 17/02/2024 16:38:09
Interesante libreria de video. He estado investigando tu problema en la internet y parece que no tiene solucion. Por lo menos como lo quieres hacer.

El problema esta que "video.preview()" bloquea y no deja que el programa continue a tu puerto serial.

Yo hackquee algo que no es perfecto pero funciona.

Consiste en dos python code files. Un file corre el video, el otro llama el file que corre el video para correr y parar el video.
No tengo aduirno, asi que mimique con input().

Nota:
Si usas windows tienes que cambiar este codigo, al equivalent de windows. Yo no tengo windows asi que no se:
1
2
# killing current process first ...
    subprocess.check_output(f"kill -9 {process.pid}", shell=True)

Segun ChatGpt seria algo asi:
1
subprocess.check_output(f"taskkill /PID {process.pid} /F", shell=True)


Este es movie_run.py
1
2
3
4
5
6
7
8
9
10
11
12
13
import sys
from moviepy.editor import VideoFileClip
 
 
def play_video(video_file):
    with VideoFileClip(video_file) as video:
        video.set_pos('center')
        video.preview()
 
 
if __name__ == "__main__":
    video_file = sys.argv[1]
    play_video(video_file)



Y este es movie_main.py que llama a movie_run.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import subprocess
from time import sleep
from os import system, name
 
 
def clear_screen():
    if name == 'nt':
        _ = system('cls')
    else:
        _ = system('clear')
 
 
def read_from_port():
    value = int(input("Value 1 or 2\n"))
    return value
 
 
# filename and path to run the video file ....
filename = 'movie_run.py'
file_path = 'general/' + filename
 
# Definir la ruta de los videos
videos = ["videos/sample_1.mp4", "videos/sample_2.mp4"]
 
# init ...
value = 0
 
while (True):
 
    clear_screen()
 
    # calling the video file (standalone process ....)
    process = subprocess.Popen(
        ["python", file_path, videos[value]], shell=False)
 
    # simulate aduirno call ...
    value = read_from_port() - 1
 
    # killing current process first ...
    subprocess.check_output(f"kill -9 {process.pid}", shell=True)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar