IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

barre de progression via Youtube-dl.exe


Sujet :

Python

  1. #1
    Invité
    Invité(e)
    Par défaut barre de progression via Youtube-dl.exe
    Bonjour à tous,

    Je découvre Python depuis 1 mois.

    je souhaite afficher une barre de progression lors du lancement de cette commande python

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    _filepath_ = ["C:\!TEST!" + chr(92) + "youtube-dl" + chr(46) + "exe ", "https://www.youtube.com/watch?v=S-wCup9oi74"]
    subprocess.run(_filepath_)
    J'ai trouvé ces deux script 2.py1.py

    La compréhension du fonctionnement est claire suite à la lecture.

    Dans le script 1.py, il fait référence à une liste (fichiers) à charger en affichant une barre de progression.

    J'ai modifié le script 2.py pour faire appel à un exécutable externe à python pour le lancer avec des arguments. Il fonctionne correctement.

    Je cherche à imbriquer _filepath_ dans 1.py. Depuis 2 jours, mes multiples tests ne donnent rien.

    De l'aide s'il vous plaît. Merci pour votre temps

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    La "barre de progression" ne fait qu'afficher la progression.
    Et si cette information ne remonte pas du programme lancé via subprocess.run, il n' a rien à afficher...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Invité
    Invité(e)
    Par défaut
    merci pour l'info. je ne vois pas comment lier les deux.

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Mais youtube-dl n'est pas qu'un exécutable, c'est aussi un module Python! Il y a donc possibilité qu'un contrôle plus précis puisse être mis en place en utilisant la version Python.

    Par exemple, voilà un code de test, simplement extrait de la doc de youtube-dl (avec l'adresse du 1er message de ce fil):

    Voir ici: https://github.com/ytdl-org/youtube-...r-instructions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
     
    import youtube_dl
     
    ##############################################################################
    class MyLogger(object):
     
        def debug(self, msg):
            pass
     
        def warning(self, msg):
            pass
     
        def error(self, msg):
            print(msg)
     
    ##############################################################################
    def my_hook(d):
     
        if d['status'] == 'finished':
            print('Done downloading, now converting ...')
     
     
    ##############################################################################
    ydl_opts = {
        'format': 'bestaudio/best',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
        }],
        'logger': MyLogger(),
        'progress_hooks': [my_hook],
    }
    with youtube_dl.YoutubeDL(ydl_opts) as ydl:
        ydl.download(['https://www.youtube.com/watch?v=S-wCup9oi74'])
    Et l'exécution de ce code télécharge correctement le fichier "Python How to run an external executable using ShellExecute-S-wCup9oi74.mp3"

    Après, il faut aller farfouiller dans la doc et/ou dans le code lui-même du module pour voir s'il n'y aurait pas un "callback" utilisable pour une barre de progression. Voire faire une petite modification du code du module pour ça.

    Par exemple, si le téléchargement se fait par bloc d'octets comme pour le FTP, il faudrait qu'il y ait renvoi d'une info à chaque bloc téléchargé, et connaissant la longueur totale du fichier à télécharger (donc le nombre total de blocs), il sera facile de calculer l'information de progression.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par taratatasoleil Voir le message
    merci pour l'info. je ne vois pas comment lier les deux.
    Si youtube-dl ne la remonte pas vous n'allez pas pouvoir l'inventer. Et cela se cherche dans l'aide de youtube-dl.

    Sachez qu'il existe déjà un youtube-dlg qui propose une interface graphique avec barre de progression.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Invité
    Invité(e)
    Par défaut
    Sans les arguments de --> ydl_opts, ça fonctionne bien avec le module suivant https://pypi.org/project/youtube_dl/

    Si je comprends bien, il faut analyser les paquets de la RJ45 pour coller une barre de progression?
    Je pensé mettre une barre de progression faisant l'allez/retour tant que le MP4 n'existe pas dans le dossier cible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    #!usrbinpython3
    # -- coding utf-8 --
     
    import youtube_dl
     
    ##############################################################################
    class MyLogger(object):
     
        def debug(self, msg):
            pass
     
        def warning(self, msg):
            pass
     
        def error(self, msg):
            print(msg)
     
    ##############################################################################
    def my_hook(d):
     
        if d['status'] == 'finished':
            print('Done downloading, now converting ...')
     
    ##############################################################################
    ydl_opts = {
        'format': 'bestaudiobest',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp4',
            'preferredquality': '192',
        }],
        'logger': MyLogger(),
        'progress_hooks': [my_hook],
    }
    # with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    with youtube_dl.YoutubeDL() as ydl:
        ydl.download(['https://www.youtube.com/watch?v=S-wCup9oi74'])

  7. #7
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    Citation Envoyé par taratatasoleil Voir le message
    Si je comprends bien, il faut analyser les paquets de la RJ45 pour coller une barre de progression?
    heureusement non, il faut juste se greffer à youtubedl, c'est pour ça que dans ydl_opts on trouve 'progress_hooks': [my_hook] qui renvoie à la fonction définie plus tôt dans le code de Tyrtamos

    en gros il faut surtout modifier la fonction my_hook pour qu'elle fasse ce que tu veux, éventuellement en t'aidant de ce que contient le module

  8. #8
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par BufferBob Voir le message
    en gros il faut surtout modifier la fonction my_hook pour qu'elle fasse ce que tu veux[/url]
    Comme le dit bien BufferBob, il faut utiliser la fonction my_hook. Par exemple, si on ajoute "print(d)" au début de cette fonction, voilà ce qui s'affiche pendant son exécution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    {'status': 'downloading', 'downloaded_bytes': 1024, 'total_bytes': 7215807, 'tmpfilename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm.part', 'filename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm', 'eta': 63, 'speed': 113843.32960479232, 'elapsed': 0.39377331733703613, '_eta_str': '01:03', '_percent_str': '  0.0%', '_speed_str': '111.18KiB/s', '_total_bytes_str': '6.88MiB'}
    {'status': 'downloading', 'downloaded_bytes': 3072, 'total_bytes': 7215807, 'tmpfilename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm.part', 'filename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm', 'eta': 23, 'speed': 307361.5106509864, 'elapsed': 0.3947732448577881, '_eta_str': '00:23', '_percent_str': '  0.0%', '_speed_str': '300.16KiB/s', '_total_bytes_str': '6.88MiB'}
    {'status': 'downloading', 'downloaded_bytes': 7168, 'total_bytes': 7215807, 'tmpfilename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm.part', 'filename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm', 'eta': 10, 'speed': 717176.8581856348, 'elapsed': 0.3947732448577881, '_eta_str': '00:10', '_percent_str': '  0.1%', '_speed_str': '700.37KiB/s', '_total_bytes_str': '6.88MiB'}
    {'status': 'downloading', 'downloaded_bytes': 15360, 'total_bytes': 7215807, 'tmpfilename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm.part', 'filename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm', 'eta': 4, 'speed': 1536807.553254932, 'elapsed': 0.3947732448577881, '_eta_str': '00:04', '_percent_str': '  0.2%', '_speed_str': ' 1.47MiB/s', '_total_bytes_str': '6.88MiB'}
    {'status': 'downloading', 'downloaded_bytes': 31744, 'total_bytes': 7215807, 'tmpfilename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm.part', 'filename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm', 'eta': 7, 'speed': 962495.9241245699, 'elapsed': 0.41775941848754883, '_eta_str': '00:07', '_percent_str': '  0.4%', '_speed_str': '939.94KiB/s', '_total_bytes_str': '6.88MiB'}
    {'status': 'downloading', 'downloaded_bytes': 64512, 'total_bytes': 7215807, 'tmpfilename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm.part', 'filename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm', 'eta': 6, 'speed': 1173620.6686849936, 'elapsed': 0.4397468566894531, '_eta_str': '00:06', '_percent_str': '  0.9%', '_speed_str': ' 1.12MiB/s', '_total_bytes_str': '6.88MiB'}
    {'status': 'downloading', 'downloaded_bytes': 130048, 'total_bytes': 7215807, 'tmpfilename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm.part', 'filename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm', 'eta': 5, 'speed': 1414378.812593672, 'elapsed': 0.47672557830810547, '_eta_str': '00:05', '_percent_str': '  1.8%', '_speed_str': ' 1.35MiB/s', '_total_bytes_str': '6.88MiB'}
    {'status': 'downloading', 'downloaded_bytes': 261120, 'total_bytes': 7215807, 'tmpfilename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm.part', 'filename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm', 'eta': 6, 'speed': 1062074.6219035012, 'elapsed': 0.6306369304656982, '_eta_str': '00:06', '_percent_str': '  3.6%', '_speed_str': ' 1.01MiB/s', '_total_bytes_str': '6.88MiB'}
    {'status': 'downloading', 'downloaded_bytes': 523264, 'total_bytes': 7215807, 'tmpfilename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm.part', 'filename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm', 'eta': 4, 'speed': 1508833.6394383006, 'elapsed': 0.7315788269042969, '_eta_str': '00:04', '_percent_str': '  7.3%', '_speed_str': ' 1.44MiB/s', '_total_bytes_str': '6.88MiB'}
    {'status': 'downloading', 'downloaded_bytes': 1047552, 'total_bytes': 7215807, 'tmpfilename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm.part', 'filename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm', 'eta': 3, 'speed': 1671698.3588761778, 'elapsed': 1.0114178657531738, '_eta_str': '00:03', '_percent_str': ' 14.5%', '_speed_str': ' 1.59MiB/s', '_total_bytes_str': '6.88MiB'}
    {'status': 'downloading', 'downloaded_bytes': 2096128, 'total_bytes': 7215807, 'tmpfilename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm.part', 'filename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm', 'eta': 3, 'speed': 1671178.2523833655, 'elapsed': 1.6390600204467773, '_eta_str': '00:03', '_percent_str': ' 29.0%', '_speed_str': ' 1.59MiB/s', '_total_bytes_str': '6.88MiB'}
    {'status': 'downloading', 'downloaded_bytes': 3766786, 'total_bytes': 7215807, 'tmpfilename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm.part', 'filename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm', 'eta': 2, 'speed': 1711604.4787967603, 'elapsed': 2.585512399673462, '_eta_str': '00:02', '_percent_str': ' 52.2%', '_speed_str': ' 1.63MiB/s', '_total_bytes_str': '6.88MiB'}
    {'status': 'downloading', 'downloaded_bytes': 5531965, 'total_bytes': 7215807, 'tmpfilename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm.part', 'filename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm', 'eta': 0, 'speed': 1715261.190634953, 'elapsed': 3.6099228858947754, '_eta_str': '00:00', '_percent_str': ' 76.7%', '_speed_str': ' 1.64MiB/s', '_total_bytes_str': '6.88MiB'}
    {'status': 'downloading', 'downloaded_bytes': 7215807, 'total_bytes': 7215807, 'tmpfilename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm.part', 'filename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm', 'eta': 0, 'speed': 1714954.3595480202, 'elapsed': 4.592358112335205, '_eta_str': '00:00', '_percent_str': '100.0%', '_speed_str': ' 1.64MiB/s', '_total_bytes_str': '6.88MiB'}
    {'downloaded_bytes': 7215807, 'total_bytes': 7215807, 'filename': 'Python How to run an external executable using ShellExecute-S-wCup9oi74.webm', 'status': 'finished', 'elapsed': 4.594356298446655, '_total_bytes_str': '6.88MiB', '_elapsed_str': '00:04'}
    Done downloading, now converting ...
    Ce qui veut dire que les éléments nécessaires au calcul de la progression sont dans le dictionnaire "d":
    • d['downloaded_bytes'] donne le nombre d'octets téléchargés (par exemple 1047552)
    • et d['total_bytes'] rappelle le nombre total d'octets à télécharger (par exemple ici 7215807)


    Le pourcentage d'avancement est donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d['downloaded_bytes']/d['total_bytes']*100
    Avec les nombres cités à titre d'exemple, on en est à 1047552/7215807*100 soit 14.52%

    Et merci pour avoir posé cette question: cela m'intéressait aussi!

  9. #9
    Invité
    Invité(e)
    Par défaut
    Tyrtamos, quel est le rôle de ces lignes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
     
    import youtube_dl
     
    ##############################################################################
    class MyLogger(object):
     
        def debug(self, msg):
            pass
     
        def warning(self, msg):
            pass
     
        def error(self, msg):
            print(msg)
     
    ##############################################################################

  10. #10
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    C'est fait pour remonter les messages de mise au point (log). C'est nécessaire au moins pour les "vraies" erreurs.

    Rien n'empêche de créer un fichier log avec l'écriture de tous les messages pour garder une trace de ce qui s'est passé.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour à tous,

    je pense trouver une direction...
    Avec ceci j'obtient le pourcentage du téléchargement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def my_hook(d):
        if d['status'] == 'downloading':
            # print(d['filename'], d['_percent_str'], d['_eta_str'])
            print(d['_percent_str'], d['_eta_str'])
    maintenant, il faut passer d['_percent_str'] dans la barre de progression!

    est-ce correcte?
    merci

  12. #12
    Invité
    Invité(e)
    Par défaut
    je pense donner la valeur xa1 dans cette ligne : self.progress_bar["value"] = xa1.
    Le but dans My_hook est de convertir la variable string xa en variable float (ligne 50)
    je reçois un message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        xa1 = Float(xa)
    NameError: name 'Float' is not defined
    voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    #!usrbinpython3
    # -- coding utf-8 --
     
    import youtube_dl
     
    from tkinter import *
    from tkinter import ttk
    import time
     
     
    ##############################################################################
    # global xa
    # global xa1
     
     
    class Root(Tk):
        def __init__(self):
            super(Root, self).__init__()
            self.title("Tkinter Progress Bar")
            self.minsize(640, 400)
     
            self.buttonFrame = ttk.LabelFrame(self, text="Progress Bars")
            self.buttonFrame.grid(column=0, row=0)
     
            self.progressBar()
     
        def progressBar(self):
     
            self.button1 = ttk.Button(self.buttonFrame, text = "Run Progress Bar", command = self.run_progressbar)
            self.button1.grid(column =0, row = 0)
     
            self.progress_bar = ttk.Progressbar(self, orient = 'horizontal', length = 286, mode = 'determinate')
            self.progress_bar.grid(column = 0, row = 3, pady  =2)
     
        def run_progressbar(self):
            def my_hook(d):
                xa = StringVar()
                xa1 = IntVar()
                if d['status'] == 'downloading':
                    # print(d['filename'], d['_percent_str'], d['_eta_str'])
                    print(d['_percent_str'], d['_eta_str'])
     
                    xa = d['_percent_str']
                    xa = xa.replace(chr(37), chr(0))
                    print("Valeur String " + xa)
                    print("Variable Type " + str(type(xa)))
     
                    xa1 = Float(xa)
                    print(type(xa1))
     
                    # self.progress_bar["maximum"] = 100
     
                    # xa1 = (IntVar(xa) + 150)
                    # print("xa1a " + xa1)
                    # for i in range(101):
                    #         time.sleep(0.05)
                    self.progress_bar["value"] = xa1
                    self.progress_bar.update()
     
                if d['status'] == 'finished':
                    print('Téléchargement effectué ...')
     
            ydl_opts = {
                # -- Console Infos --
                'verbose': True,
     
                # -- Extraction Video --
                'format': 'best',
     
                # -- Titre et Extension --
                'outtmpl': '%(title)s.%(ext)s',
     
                # --                 --
                'logger': MyLogger(),
                'progress_hooks': [my_hook],
            }
     
            ##############################################################################
            with youtube_dl.YoutubeDL(ydl_opts) as ydl:
                ydl.download(['https://www.youtube.com/watch?v=S-wCup9oi74'])
     
            self.progress_bar["value"] = 0
            ##############################################################################
     
    ##############################################################################
    # Remonte les messages de mise au point (log). C'est nécessaire au moins pour les "vraies" erreurs.
    # Rien n'empêche de créer un fichier log avec l'écriture de tous les messages pour garder une trace de ce qui s'est passé.
     
    class MyLogger(object):
     
        def debug(self, msg):
            pass
        def warning(self, msg):
            pass
        def error(self, msg):
            print(msg)
        def info(self, msg):
            print(msg)
     
    root = Root()
     
    # Test de conversion
    s0 = StringVar()
    S1 = IntVar()
     
    s0 = "12.388"
    print("s0 " + s0)
    print("Variable Type " + str(type(s0)))
     
    s1 = float(s0)
    print(s1)
    print(type(s1))
     
    root.mainloop()
    Dernière modification par Invité ; 03/03/2020 à 21h33.

  13. #13
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Tu as choisi d'utiliser d['_percent_str'], mais comme c'est une chaîne de caractères, il faut supprimer le dernier "%" et convertir en flottant avec float() (et non Float()). Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float(d['_percent_str'][:-1])
    Quant à utiliser cela pour mettre à jour une barre de progression, désolé mais je n'utilise pas tkinter: je laisse la parole à ceux qui savent.

  14. #14
    Invité
    Invité(e)
    Par défaut
    merci, je ne m'en suis as aperçu avec ma manip

    maintenant j'ai cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      File "C:/!TEST!/!/Discutions/www.developpez.net/Sample_1a.py", line 49, in my_hook
        xa1 = float(xa)
    ValueError: could not convert string to float: '  0.1\x00'
    pour quelle raison avec ta commande float(d['_percent_str'][:-1]), ça fonctionne bien. Quel diférence de traitement de la variable.
    J'aimerai comprend svp

  15. #15
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par taratatasoleil Voir le message
    pour quelle raison avec ta commande float(d['_percent_str'][:-1]), ça fonctionne bien. Quel diférence de traitement de la variable.
    Pour autant que le code n'ait pas changé depuis la dernière mouture que vous avez posté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                    xa = d['_percent_str']
                    xa = xa.replace(chr(37), chr(0))
    vous remplacez bien chr(37) (%) par 0
    et si l'erreur est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ValueError: could not convert string to float: '  0.1\x00'
    vous savez d'où vient le \x00 qui fout la grouille.


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  16. #16
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par taratatasoleil Voir le message
    pour quelle raison avec ta commande float(d['_percent_str'][:-1]), ça fonctionne bien. Quel diférence de traitement de la variable.
    le "[:-1]" permet de dire qu'on ne retient de la chaine que les n-1 premiers caractères (n étant ici la longueur totale de la chaine). Autrement dit, je neutralise le "%" final. A défaut, float() ne sait pas faire et génère une erreur.

    Il te manque manifestement des bases. Tu devrais lire un bon tuto comme celui-ci: https://python.developpez.com/cours/apprendre-python3/.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Merci wiztricks
    en remplaçant xa = xa.replace(chr(37), chr(0)) par xa = xa.replace(chr(37), ""), ça fonctionne bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                    xa = d['_percent_str']
                    xa = xa.replace(chr(37), "")
                    print("Valeur String " + xa)
                    print("Variable Type " + str(type(xa)))
                    #
                    xa1 = float(xa)
                    print(type(xa1))
    merci tyrtamos pour le lien.
    J'avais dit que je ne connais pas la programmation.

    je constate qu'en supprimant cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.progress_bar["value"] = 0
    Il fonctionne correctement aussi. A mon avis, elle n'est pas nécessaire puisque je donne le % d'avancement du téléchargement.
    Dernière modification par Invité ; 03/03/2020 à 18h11.

  18. #18
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par taratatasoleil Voir le message
    J'avais dit que je ne connais pas la programmation.
    C'est bien le problème... et si vous ne prenez pas le temps d'apprendre en passant du temps dans un tuto. vous n'avez pas idée de combien peut être difficile de programmer un truc aussi simple.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  19. #19
    Invité
    Invité(e)
    Par défaut
    bonjour à tous,

    merci pour votre aide. ça commence à prendre forme.

    Avant d'amorcer le téléchargement, J'aimerai connaitre et afficher le nombre de vidéo d'une liste youtube.
    j'ai trouvé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    youtube-dl -J --format best https://www.youtube.com/watch?v=wy9GIRkGlow&list=PLfiqNnhpCsNv8oOP4i8wT7B-iSnCgvnHy > info.json
    En consultant le fichier info.son la première occurrence de "n_entries": donne la valeur 7, ce qui correspond.
    via le embedding ytdl, comment obtenir cette information via "n_entries"? un indice s'il vous plaît. merci

  20. #20
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je ne comprends pas bien ta question.

    Si les options disponibles avec la ligne de commande (youtube-dl.exe) sont faciles à trouver avec "youtube-dl.exe --help", les options pour la version Python se trouvent dans le fichier "YoutubeDL.py".
    Voir ici par exemple: https://github.com/ytdl-org/youtube-...l/YoutubeDL.py.

    Ainsi, pour avoir les données "json", on voit une option "writeinfojson", qu'on intègre dans le dictionnaire des options comme:
    Un téléchargement fait avec cette option crée un fichier supplémentaire "nom_de_la_video.info.json" dans le même répertoire que la vidéo téléchargée

    Autre option intéressante: "write_all_thumbnails": True, qui permet de télécharger une ou plusieurs photos relatives à la vidéo.

    Maintenant, quand tu veux "le nombre de vidéo d'une liste youtube", tu veux:
    - les vidéos disponibles au téléchargement (différents format de la même vidéo) pour une adresse web youtube?
    - ou les différentes vidéos disponibles d'une playlist?

    Il y des solutions dans les 2 cas.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Indy FTP (idFTP) faire une barre de progress de transfert
    Par Harry dans le forum Web & réseau
    Réponses: 4
    Dernier message: 09/07/2004, 13h15
  2. [VB.NET] Pb avec le bouton Annuler d'1 barre de progression
    Par dada1982 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/06/2004, 09h56
  3. Réponses: 12
    Dernier message: 27/05/2004, 00h13
  4. [DEBUTANT] Barre de progression
    Par pupupu dans le forum MFC
    Réponses: 4
    Dernier message: 18/01/2004, 16h47
  5. [web] Barre de Progression ASCII
    Par Red Bull dans le forum Web
    Réponses: 13
    Dernier message: 05/06/2003, 12h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo