Python chemin d'accès introuvable

Bonjour tout le monde, j'ai reçu un code Python que j'avais demandé à un ami. Il permet de modifier légèrement une vidéo dans un dossier INPUT et de la ressortir changée dans un dossier OUTPUT ensuite. Sur son PC ça marche mais sur mon PC à moi j'ai un problème avec le chemin des fichiers.

Voici le code Python =>

import cv2

import numpy as np
import random
from moviepy.editor import VideoFileClip

def get_exposure_preset_parameters(preset):
    exposure_presets = {
        "Subtil": (0.9, 1.1),
        "Léger": (0.8, 1.2),
        "Modérée": (0.7, 1.3),
        "Fort": (0.5, 1.5),
    }
    return exposure_presets.get(preset, (0.8, 1.2))

def get_brightness_preset_parameters(preset):
    brightness_presets = {
        "Subtil": (-5, 5),
        "Léger": (-10, 10),
        "Modérée": (-15, 15),
        "Fort": (-30, 30),
    }
    return brightness_presets.get(preset, (-10, 10))

def get_contrast_preset_parameters(preset):
    contrast_presets = {
        "Subtil": (0.9, 1.1),
        "Léger": (0.8, 1.2),
        "Modérée": (0.7, 1.3),
        "Fort": (0.5, 1.5),
    }
    return contrast_presets.get(preset, (0.8, 1.2))

def get_saturation_preset_parameters(preset):
    saturation_presets = {
        "Subtil": (0.8, 1.2),
        "Léger": (0.7, 1.3),
        "Modérée": (0.5, 1.5),
        "Fort": (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"Vidéo {video_index + 1} générée avec succès, "
        "métadonnées supprimées, protection anti-shadow activé."
    )
    print(f"Paramètres utilisés :")
    print(f"Exposition : {exposure_factor}")
    print(f"Luminosité : {brightness_factor}")
    print(f"Contraste : {contrast_factor}")
    print(f"Saturation : {saturation_factor}")
    print(f"Effet miroir : {'Activé' if mirror_effect else 'Désactivé'}")
    print(f"Niveau de bruit : {noise_level}")
    print(f"Angle de rotation : {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"Chemin de la vidéo d'entrée : {input_video_path}")
    print(f"Chemin de sortie : {output_video_path}")
    print(f"Largeur de la vidéo : {width}")
    print(f"Hauteur de la vidéo : {height}")
    print(f"FPS de la vidéo : {fps}")
    print(f"Effet miroir : {'Activé' if mirror_effect else 'Désactivé'}")
    print(f"Niveau de bruit : {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
    )

# Exemple d'utilisation avec effets miroir,
# bruit et rotation choisis manuellement
input_video_path = 'c:/Users/Eleve/Desktop/BOT_Tiktok/Tiktok_INPUT/Fichier_entree.mp4'
output_video_path = 'c:/Users/Eleve/Desktop/BOT_Tiktok/Tiktok_OUTPUT/Fichier_sortie.mp4'
exposure_preset = "Subtil"
brightness_preset = "Léger"
contrast_preset = "Modérée"
saturation_preset = "Léger"
rotation_angle = 0  # Angle de rotation en degrés

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
)

Merci D'avance

Coloration syntaxique ajoutée par la modération.
Windows / Chrome 120.0.0.0

5 réponses

Résumé de la discussion

Le fil porte sur un script Python qui lit une vidéo dans INPUT et écrit des versions modifiées dans OUTPUT, mais le chemin d'accès ne fonctionne pas sur le PC de l'utilisateur. Des conseils suggèrent d'utiliser des chemins absolus compatibles Windows, d'employer des barres obliques ou des chaînes brutes, et de vérifier l'existence des dossiers INPUT et OUTPUT avant l'exécution. En cas d'erreur, le message typique indique que le chemin spécifié est introuvable, ce qui pointe vers une localisation incorrecte des fichiers ou un accent dans le nom d'utilisateur. D'autres échanges recommandent de tester manuellement les chemins dans le gestionnaire de fichiers et d'éviter les caractères spéciaux dans les noms pour garantir la compatibilité.

Bobot (l’IA à votre service)
  1. Modérateur

    Au vu de la description et sans plus de précision, je suspecte qu
    input_video_path et/ou output_video_path ne pointe pas sur un fichier/dossier qui existe.


    0
    1. Oui c'est exactement ça le problème. J'ai pourtant bien mis le fichier au bonne endroit et mis le bon chemin vers le fichier. Mais ça bloque... Je sais vraiment plus quoi faire

      0
    2. Je suis sur un PC Windows 11, je ne sais pas si ça a un lien avec la notation du chemin

      0
  2. Contributeur Ambassadeur

    bonjour,

    tu n'as pas précisé le message d'erreur précis.

    peux-tu tester ceci?

    import os
    def pf(path):
        r=os.path.exists(path)
        if r :
            print(path + " existe.")
        else:
            print (path + " n'existe pas.")
    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. Le message d'erreur est le suivant :

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

      Le chemin d'acc�s sp�cifi� est introuvable.

      [Done] exited with code=1 in 4.121 seconds

      0
    2. Malheureusement ça ne marche pas. J'ai bien remplacer les 2 path par votre code.

      0
    3. Modérateur
      @lilian_d57

      Tu es sur une machine Linux ?

      0
    4. Contributeur Ambassadeur
      @lilian_d57

      "ça ne marche pas": qu'observes-tu?

      0
    5. Contributeur Ambassadeur
      @lilian_d57

      Le message d'erreur indique c:\Users\Elève, et, dans ton code, je vois c:/Users/Eleve.

      Lequel est correct?

      0
  3. Modérateur

    Bonjour,

    Montre nous le message d'erreur.

    Tu as un utilisateur Windows qui s'appelle Eleve sur ton pc ? Et c'est avec cet utilisateur que tu es connecté pour exécuter le programme ?

    En mode ligne de commande, lance la commande suivante :

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

    0
    1. Oui, j'ai bien un compte utilisateur Eleve sur mon PC. C'est mon PC offert par le lycée. Je ne sais pas si ça peut poser un problème.

      Quand je tape ce que vous m'avez dit de mettre dans le terminal, ça me dit qu'il est impossible de trouver le chemin d'accès à /User/Eleve...

      0
    2. Voici le code erreur qu'il m'affiche

      0
    3. Modérateur
      @lilian_d57

      Si on regarde l'image il y a un accent sur le compte Elève pas Eleve

      1
  4. Remarque, d'après le prompt que l'on voit sur ton image

    tu es déjà dans C:\users\Elève

    tu peux toujours taper

    cd Desktop\BOT_Tiktok\Tiktok_INPUT

    et quand le prompt ressemblera à ça:

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

    tu tapera

    dir

    0
    1. J'ai ecris cd Desktop\BOT_Tiktok\Tiktok_INPUT dans le terminal et ça m'affiche ce message d'erreur 

      0
    2. Auft comme mon PC est sur une session Elève, je doit mettre l'accent sur le e ou c'est pas accepté par PYTHON?

      0
    3. Modérateur
      @lilian_d57

      moi j'aurais testé directement pour savoir ;-)

      0
    4. @lilian_d57

      Sur ton image du 31/12 à 17h48, on voyait le prompt suivant:

      C:\users\Elève>

      montrant que tu est dans le dossier Elève

      Je te proposais donc le 1er janvier à 11h57, de te placer dans le dossier

      Desktop\BOT_Tiktok\Tiktok_INPUT

      en faisant

      cd Desktop\BOT_Tiktok\Tiktok_INPUT

      Or, dans ce message-ci, on voit sur ton image le prompt

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

      montrant que tu es déjà dans Tiktok_INPUT !!!!

      donc, évidemment, si tu fais, depuis ce dossier:

      cd Desktop\BOT_Tiktok\Tiktok_INPUT

      ca ne marche pas !

      Il n'existe pas de dossier

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

      0
    5. @Phil_1857

      Ils me disent que le chemin d'accès n'existe pas mais ça je le savais déjà. Pourtant j'ai copié le chemin de mon gestionnaire des fichiers dans le code.

      0
  5. Ce qui est sur, c'est que si le dossier s'appelle vraiment "Elève"

    avec un accent grave sur le "e", il faut écrire:

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

    Idem avec output_video_path .... 

    0
    1. D'accord ça s'est changé c bon.

      Regarde quand je cherche l'emplacement de ma vidéo dans mes fichier : 

      Et aussi j'ai testé de tapé ça dans le terminal : 

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

      et ça m'a ouvert la vidéo.

      Donc ça c'était pour le input video et maintenant quand je tape : 

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

      pour le output video bah ça me dit ça. (sachant que la vidéo "Fichier_entree.mp4 n'existe pas contrairement au input "Fichier_entree.mp4") :

      0
    2. @lilian_d57

      D'après ton image, tu n'as pas tapé

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

      mais juste

      C:/Users/Elève/Desktop/BOT_Tiktok (en jaune sur l'image)

      0