Python ruta no encontrada
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
-
Moderador
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". -
Colaborador
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)
-
-
-
Moderador@lilian_d57
¿Estás en una máquina Linux?
-
Colaborador@lilian_d57
"no funciona": ¿qué observas?
-
Colaborador@lilian_d57
El mensaje de error indica c:\Users\Elève, y en tu código, veo c:/Users/Eleve.
¿Cuál es correcto?
-
-
Moderador
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\
-
-
-
Moderador@lilian_d57
Si miramos la imagen, hay un acento en la cuenta Alumno, no en Alumno.
-
-
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
-
-
-
Moderador@lilian_d57
yo lo habría probado directamente para saber ;-)
-
@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
-
@Phil_1857
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.
-
-
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 ....
-
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"):
-
@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)
-


