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

  1. 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".

    0
    1. 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
    2. Estoy en una PC con Windows 11, no sé si eso tiene que ver con la notación del camino

      0
  2. 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)
    0
    1. 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
    2. Desgraciadamente no funciona. He reemplazado correctamente las 2 rutas por su código.

      0
    3. Moderador
      @lilian_d57

      ¿Estás en una máquina Linux?

      0
    4. Colaborador
      @lilian_d57

      "no funciona": ¿qué observas?

      0
    5. 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?

      0
  3. 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\

    0
    1. 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
    2. Aquí está el código de error que me muestra

      0
    3. Moderador
      @lilian_d57

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

      1
  4. 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
    1. Escribí cd Desktop\BOT_Tiktok\Tiktok_INPUT en la terminal y me muestra este mensaje de error

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

      0
    3. Moderador
      @lilian_d57

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

      0
    4. @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
    5. @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.

      0
  5. 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
    1. 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
    2. @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