Python ruta no encontrada

lilian_d57 -  
Phil_1857 Mensajes publicados 1883 Fecha de registro   Estado Miembro Última intervención   -

Hola a todos, recibí un código Python que le pedí a un amigo. Este permite modificar ligeramente un vídeo en una carpeta INPUT y sacarlo cambiado en una carpeta OUTPUT después. En su PC funciona, pero en el mío tengo un problema con la ruta de los archivos.

Aquí está el código Python =>

import cv2 import numpy as np import random from moviepy.editor import VideoFileClip def get_exposure_preset_parameters(preset): exposure_presets = { "Sutil": (0.9, 1.1), "Ligero": (0.8, 1.2), "Moderado": (0.7, 1.3), "Fuerte": (0.5, 1.5), } return exposure_presets.get(preset, (0.8, 1.2)) def get_brightness_preset_parameters(preset): brightness_presets = { "Sutil": (-5, 5), "Ligero": (-10, 10), "Moderado": (-15, 15), "Fuerte": (-30, 30), } return brightness_presets.get(preset, (-10, 10)) def get_contrast_preset_parameters(preset): contrast_presets = { "Sutil": (0.9, 1.1), "Ligero": (0.8, 1.2), "Moderado": (0.7, 1.3), "Fuerte": (0.5, 1.5), } return contrast_presets.get(preset, (0.8, 1.2)) def get_saturation_preset_parameters(preset): saturation_presets = { "Sutil": (0.8, 1.2), "Ligero": (0.7, 1.3), "Moderado": (0.5, 1.5), "Fuerte": (0.4, 1.6), } return saturation_presets.get(preset, (0.7, 1.3)) def print_video_parameters( video_index, exposure_factor, brightness_factor, contrast_factor, saturation_factor, mirror_effect, noise_level, rotation_angle ): print( f"Vídeo {video_index + 1} generado con éxito, " "metadatos eliminados, protección anti-sombra activada." ) print(f"Parámetros utilizados :") print(f"Exposición : {exposure_factor}") print(f"Luminosidad : {brightness_factor}") print(f"Contraste : {contrast_factor}") print(f"Saturación : {saturation_factor}") print(f"Efecto espejo : {'Activado' if mirror_effect else 'Desactivado'}") print(f"Nivel de ruido : {noise_level}") print(f"Ángulo de rotación : {rotation_angle}\n") def add_noise(frame, level): h, w, c = frame.shape noise = np.random.normal(0, level, (h, w, c)) noisy_frame = np.clip(frame + noise, 0, 255) return noisy_frame.astype(np.uint8) def rotate_video(frame, angle): h, w, _ = frame.shape center = (w // 2, h // 2) rotation_matrix = cv2.getRotationMatrix2D(center, angle, 1.0) rotated_frame = cv2.warpAffine(frame, rotation_matrix, (w, h)) return rotated_frame def adjust_video_parameters_with_presets( input_video_path, output_video_path, exposure_preset, brightness_preset, contrast_preset, saturation_preset, mirror_effect=False, noise_level=None, rotation_angle=0 ): exposure_range = get_exposure_preset_parameters(exposure_preset) brightness_range = get_brightness_preset_parameters(brightness_preset) contrast_range = get_contrast_preset_parameters(contrast_preset) saturation_range = get_saturation_preset_parameters(saturation_preset) NUMBER_OF_VIDEOS = 5 cap = cv2.VideoCapture(input_video_path) width = int(cap.get(3)) height = int(cap.get(4)) fps = cap.get(5) fourcc = cv2.VideoWriter_fourcc(*'XVID') print(f"Ruta del vídeo de entrada : {input_video_path}") print(f"Ruta de salida : {output_video_path}") print(f"Ancho del vídeo : {width}") print(f"Alto del vídeo : {height}") print(f"FPS del vídeo : {fps}") print(f"Efecto espejo : {'Activado' if mirror_effect else 'Desactivado'}") print(f"Nivel de ruido : {noise_level}\n") for i in range(NUMBER_OF_VIDEOS): exposure_factor = random.uniform(*exposure_range) brightness_factor = random.uniform(*brightness_range) contrast_factor = random.uniform(*contrast_range) saturation_factor = random.uniform(*saturation_range) out = cv2.VideoWriter( f"{output_video_path}_{i}.mp4", fourcc, fps, (width, height) ) while True: ret, frame = cap.read() if not ret: break frame = cv2.convertScaleAbs( frame, alpha=contrast_factor, beta=brightness_factor ) hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) hsv[:, :, 1] = hsv[:, :, 1] * saturation_factor frame = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR) if mirror_effect: frame = cv2.flip(frame, 1) if noise_level is not None: frame = add_noise(frame, noise_level) frame = rotate_video(frame, rotation_angle) out.write(frame) out.release() print_video_parameters( i, exposure_factor, brightness_factor, contrast_factor, saturation_factor, mirror_effect, noise_level, rotation_angle ) cap.set(cv2.CAP_PROP_POS_FRAMES, 0) cap.release() cv2.destroyAllWindows() def remove_metadata(input_video_path, output_video_path): video_clip = VideoFileClip(input_video_path) video_clip.write_videofile( output_video_path, codec="libx264", audio_codec="aac", remove_temp=True, logger=None ) # Ejemplo de uso con efectos espejo, # ruido y rotación elegidos manualmente input_video_path = 'c:/Users/Eleve/Desktop/BOT_Tiktok/Tiktok_INPUT/Fichero_entrada.mp4' output_video_path = 'c:/Users/Eleve/Desktop/BOT_Tiktok/Tiktok_OUTPUT/Fichero_salida.mp4' exposure_preset = "Sutil" brightness_preset = "Ligero" contrast_preset = "Moderado" saturation_preset = "Ligero" rotation_angle = 0 # Ángulo de rotación en grados adjust_video_parameters_with_presets( input_video_path, output_video_path, exposure_preset, brightness_preset, contrast_preset, saturation_preset, mirror_effect=False, noise_level=None, rotation_angle=rotation_angle )

Gracias de antemano

Coloración sintáctica añadida por la moderación.

5 respuestas

NHenry Mensajes publicados 15235 Fecha de registro   Estado Moderador Última intervención   387
 

En vista de la descripción y sin más precisión, sospecho que
input_video_path y/o output_video_path no apuntan a un archivo/carpeta que existe.


Intervengo principalmente en VB6, VB.NET y C#, pero la moderación a menudo me lleva a otros lenguajes.
En VB.NET, piensa en activar "Option Explicit" y "Option Strict".

0
lilian_d57
 

Sí, ese es exactamente el problema. Sin embargo, he puesto el archivo en el lugar correcto y he indicado la ruta correcta hacia el archivo. Pero está bloqueado... Realmente no sé qué más hacer.

0
lilian_d57
 

Estoy en una PC con Windows 11, no sé si eso tiene que ver con la notación del camino

0
yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   Ambassadeur 1 588
 

hola,

no has precisado el mensaje de error exacto.

¿puedes probar esto?

import os def pf(path): r=os.path.exists(path) if r : print(path + " existe.") else: print (path + " no existe.") chem1='c:/Users/Eleve/Desktop/BOT_Tiktok/Tiktok_INPUT/Fichier_entree.mp4' pf(chem1) chem1='c:/Users/Eleve/Desktop/BOT_Tiktok/Tiktok_OUTPUT pf(chem2)
0
lilian_d57
 

El mensaje de error es el siguiente:

[Ejecutando] /usr/bin/env python3 "c:\Users\Elève\Desktop\BOT_Tiktok\ReplicaAlpha1.py"

La ruta de acceso especificada no se encuentra.

[Hecho] salió con el código=1 en 4.121 segundos

0
lilian_d57
 

Desgraciadamente no funciona. He reemplazado correctamente las 2 rutas por su código.

0
jee pee Mensajes publicados 9425 Fecha de registro   Estado Moderador Última intervención   9 965 > lilian_d57
 

¿Estás en una máquina Linux?

0
yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > lilian_d57
 

"no funciona": ¿qué observas?

0
yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > lilian_d57
 

El mensaje de error indica c:\Users\Elève, y en tu código, veo c:/Users/Eleve.

¿Cuál es correcto?

0
jee pee Mensajes publicados 9425 Fecha de registro   Estado Moderador Última intervención   9 965
 

Hola,

Muéstranos el mensaje de error.

¿Tienes un usuario de Windows que se llama Eleve en tu PC? ¿Y es con ese usuario con el que estás conectado para ejecutar el programa?

En modo línea de comandos, ejecuta el siguiente comando:

 dir c:\Users\Eleve\Desktop\BOT_Tiktok\Tiktok_INPUT\

0
lilian_d57
 

Sí, tengo una cuenta de usuario Eleve en mi PC. Es mi PC ofrecido por el liceo. No sé si eso puede causar un problema.

Cuando escribo lo que me dijo que pusiera en la terminal, me dice que no es posible encontrar la ruta de acceso a /User/Eleve...

0
lilian_d57
 

Aquí está el código de error que me muestra

0
jee pee Mensajes publicados 9425 Fecha de registro   Estado Moderador Última intervención   9 965 > lilian_d57
 

Si miramos la imagen, hay un acento en la cuenta Alumno, no en Alumno.

1
Phil_1857 Mensajes publicados 1883 Fecha de registro   Estado Miembro Última intervención   169
 

Nota, según el símbolo del sistema que puedes ver en tu imagen

ya estás en C:\users\Elève

siempre puedes escribir

cd Desktop\BOT_Tiktok\Tiktok_INPUT

y cuando el símbolo del sistema se parezca a esto:

C:\users\Elève\Desktop\BOT_Tiktok\Tiktok_INPUT >

escribirás

dir

0
lilian_d57
 

Escribí cd Desktop\BOT_Tiktok\Tiktok_INPUT en la terminal y me muestra este mensaje de error

0
lilian_d57
 

Como mi PC está en una sesión de Alumno, ¿debo acentuar la "e" o no es aceptado por PYTHON?

0
jee pee Mensajes publicados 9425 Fecha de registro   Estado Moderador Última intervención   9 965 > lilian_d57
 

yo lo habría probado directamente para saber ;-)

0
Phil_1857 Mensajes publicados 1883 Fecha de registro   Estado Miembro Última intervención   169 > lilian_d57
 

En tu imagen del 31/12 a las 17h48, se veía el siguiente prompt:

C:\users\Elève>

mostrando que estás en la carpeta Elève

Te propuse entonces el 1 de enero a las 11h57 que te colocaras en la carpeta

Desktop\BOT_Tiktok\Tiktok_INPUT

haciendo

cd Desktop\BOT_Tiktok\Tiktok_INPUT

Sin embargo, en este mensaje, se ve en tu imagen el prompt

C:\users\Elève\Desktop\BOT_Tiktok\Tiktok_INPUT>

mostrando que ya estás en Tiktok_INPUT !!!!

por lo tanto, evidentemente, si haces, desde esta carpeta:

cd Desktop\BOT_Tiktok\Tiktok_INPUT

¡no funcionará!

No existe una carpeta

C:\users\Elève\Desktop\BOT_Tiktok\Tiktok_INPUT\Desktop\BOT_Tiktok\Tiktok_INPUT

0
lilian_d57 > Phil_1857 Mensajes publicados 1883 Fecha de registro   Estado Miembro Última intervención  
 

Me dicen que la ruta de acceso no existe, pero eso ya lo sabía. Sin embargo, copié la ruta de mi gestor de archivos en el código.

0
Phil_1857 Mensajes publicados 1883 Fecha de registro   Estado Miembro Última intervención   169
 

Lo que es seguro es que si el archivo se llama realmente "Elève"

con un acento grave sobre la "e", hay que escribir:

input_video_path = 'C:\Users\Elève\Desktop\BOT_Tiktok\Tiktok_INPUT\Fichier_entree.mp4'

Lo mismo con output_video_path ....

0
lilian_d57
 

De acuerdo, eso se ha cambiado, está bien.

Mira cuando busco la ubicación de mi video en mis archivos:

Y también probé escribir esto en la terminal:

C:/Users/Elève/Desktop/BOT_Tiktok/Tiktok_INPUT/Fichier_entree.mp4

y se me abrió el video.

Así que eso fue para el video de entrada y ahora cuando escribo:

C:/Users/Elève/Desktop/BOT_Tiktok/Tiktok_INPUT/Fichier_sortie.mp4

para el video de salida, me dice eso. (sabendo que el video "Fichier_entree.mp4" no existe a diferencia del input "Fichier_entree.mp4"):

0
Phil_1857 Mensajes publicados 1883 Fecha de registro   Estado Miembro Última intervención   169 > lilian_d57
 

Según tu imagen, no escribiste

C:/Users/Elève/Desktop/BOT_Tiktok/Tiktok_INPUT/Fichier_sortie.mp4

sino solo

C:/Users/Elève/Desktop/BOT_Tiktok (en amarillo en la imagen)

0