Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/02/2021, à 13:59

Alxxandre

Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

Bonjour,
je code depuis un certain moment en pyhon (version 3.8.5), sous Ubuntu 20.04, et j'ai besoin dans un programme de streamer une vidéo Youtube. J'ai fait le programme suivant :

import pafy
import os
import moviepy.editor as mp


print ("[+] Welcome to Youtube downloader.")
download_url = input("URL :")

video = pafy.new(download_url)
best = video.streams
file_name = video.streams[0]
print (file_name)

directory = "downloaded-music"
if not os.path.exists(directory):
    os.makedirs(directory)
x = file_name.download(filepath = directory)

clip = mp.VideoFileClip(x)
print (clip.size)
clip.audio.write_audiofile(x + ".mp3")

os.remove(x)

mais j'ai l'erreur :

ERROR: IcrbM1l_BoI: YouTube said: Unable to extract video data

on m'a dit que l'erreur était due à ma version de python, mais je sais pas comment la mettre à jour...

Dernière modification par Alxxandre (Le 17/03/2021, à 19:04)

Hors ligne

#2 Le 28/02/2021, à 14:33

Vobul

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

Alxxandre a écrit :

on m'a dit

C'est qui ce "on" ?

Et puis python 3.8 est très récent donc je ne pense vraiment pas que ce soit le soucis. Surtout que l'erreur semble simplement indiquer qu'il n'a pas été possible d'extraire la vidéo. Essaie plutôt avec une autre libraire pour extraire la vidéo. Mais bon après je dois dire que YouTube c'est pas vraiment fait pour streamer des vidéos depuis un script.... Tu peux pas télécharger la vidéo d'abord ?

Voir le bordel autour de youtube-dl (https://github.blog/2020-11-16-standing … l-is-back/).


Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

Hors ligne

#3 Le 14/03/2021, à 18:52

Alxxandre

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

Vobul a écrit :

C'est qui ce "on" ?

c'est eux : https://openclassrooms.com/forum/sujet/ … volumineux

le problème donc avec le téléchargement, c'est que ça prendrais trop de place vu le nombre de vidéos dont j'aurais besoin. il faut donc les streamer, depuis youtube ou autre mais je ne sais pas où

Hors ligne

#4 Le 14/03/2021, à 19:52

beuguissime

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

Bonjour,

J'ai l'impression que :
1/ le 'on' a donné le conseil de passer à python 3.9 parce qu'il ne savait pas quoi dire d'autre (dans ce cas vaut mieux s'abstenir)
2/ l'erreur a plus probablement avoir avec youtube-dl vu le contenu du message


Je déconseille de tenter d'installer python 3.9 sauf si tu veux mettre ton système hors service ou sauf si tu sais manipuler les environnements virtuels de python.

Dernière modification par beuguissime (Le 14/03/2021, à 20:58)

Hors ligne

#5 Le 14/03/2021, à 20:49

Alxxandre

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

oui c'est en effet un problème lié à youtube-dl, mais je sais pas comment le résoudre ou y trouver une alternative pour streamer du contenu web...

Hors ligne

#6 Le 14/03/2021, à 21:00

beuguissime

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

Dans la mesure où on ne voit pas la portion de ton code responsable de l'erreur (sauf erreur de ma part), l'aide va tourner court. wink

Hors ligne

#7 Le 14/03/2021, à 21:27

Alxxandre

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

soit le fichier test.py :

import pafy
import os
import moviepy.editor as mp


print ("[+] Welcome to Youtube downloader.")
download_url = input("URL :")

video = pafy.new(download_url)
best = video.streams
file_name = video.streams[0]
print (file_name)

directory = "downloaded-music"
if not os.path.exists(directory):
    os.makedirs(directory)
x = file_name.download(filepath = directory)

clip = mp.VideoFileClip(x)
print (clip.size)
clip.audio.write_audiofile(x + ".mp3")

os.remove(x)

lorsque j'effectue la commande :

python3 test.py

ça donne :

[+] Welcome to Youtube downloader.
URL :https://www.youtube.com/watch?v=qjHlgrGsLWQ
ERROR: qjHlgrGsLWQ: YouTube said: Unable to extract video data
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/youtube_dl/YoutubeDL.py", line 797, in extract_info
    ie_result = ie.extract(url)
  File "/usr/lib/python3/dist-packages/youtube_dl/extractor/common.py", line 530, in extract
    ie_result = self._real_extract(url)
  File "/usr/lib/python3/dist-packages/youtube_dl/extractor/youtube.py", line 1788, in _real_extract
    raise ExtractorError(
youtube_dl.utils.ExtractorError: qjHlgrGsLWQ: YouTube said: Unable to extract video data

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/alexandre/.local/lib/python3.8/site-packages/pafy/backend_youtube_dl.py", line 40, in _fetch_basic
    self._ydl_info = ydl.extract_info(self.videoid, download=False)
  File "/usr/lib/python3/dist-packages/youtube_dl/YoutubeDL.py", line 820, in extract_info
    self.report_error(compat_str(e), e.format_traceback())
  File "/usr/lib/python3/dist-packages/youtube_dl/YoutubeDL.py", line 625, in report_error
    self.trouble(error_message, tb)
  File "/usr/lib/python3/dist-packages/youtube_dl/YoutubeDL.py", line 595, in trouble
    raise DownloadError(message, exc_info)
youtube_dl.utils.DownloadError: ERROR: qjHlgrGsLWQ: YouTube said: Unable to extract video data

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test.py", line 9, in <module>
    video = pafy.new(download_url)
  File "/home/alexandre/.local/lib/python3.8/site-packages/pafy/pafy.py", line 124, in new
    return Pafy(url, basic, gdata, size, callback, ydl_opts=ydl_opts)
  File "/home/alexandre/.local/lib/python3.8/site-packages/pafy/backend_youtube_dl.py", line 31, in __init__
    super(YtdlPafy, self).__init__(*args, **kwargs)
  File "/home/alexandre/.local/lib/python3.8/site-packages/pafy/backend_shared.py", line 97, in __init__
    self._fetch_basic()
  File "/home/alexandre/.local/lib/python3.8/site-packages/pafy/backend_youtube_dl.py", line 43, in _fetch_basic
    raise IOError(str(e).replace('YouTube said', 'Youtube says'))
OSError: ERROR: qjHlgrGsLWQ: Youtube says: Unable to extract video data

Hors ligne

#8 Le 14/03/2021, à 21:35

beuguissime

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

Merci. Donc c'était bien le bon bout de code mais sans l'erreur complète.

Là, je dirai que ton programme appelle une version obsolète des bibliothèques youtube-dl. Vraisemblablement installées via apt.

Il faudrait désinstaller youtube-dl avec

sudo apt remove youtube-dl

(vérifie que ça n'enlève pas d'autres trucs)

et le réinstaller (au niveau utilisateur, pour qu'il soit rangé avec pafy dans ~/.local) avec

pip3 install --user youtube-dl

Dernière modification par beuguissime (Le 14/03/2021, à 21:39)

Hors ligne

#9 Le 15/03/2021, à 09:42

Alxxandre

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

la plupart des erreurs ont disparu, mais il reste celles ci :

[+] Welcome to Youtube downloader.
URL :https://www.youtube.com/watch?v=qjHlgrGsLWQ
normal:mp4@640x360
  14,878,719.0 Bytes [100.00%] received. Rate: [ 420 KB/s].  ETA: [0 secs]    
Traceback (most recent call last):
  File "test.py", line 19, in <module>
    clip = mp.VideoFileClip(x)
  File "/home/alexandre/.local/lib/python3.8/site-packages/moviepy/video/io/VideoFileClip.py", line 88, in __init__
    self.reader = FFMPEG_VideoReader(filename, pix_fmt=pix_fmt,
  File "/home/alexandre/.local/lib/python3.8/site-packages/moviepy/video/io/ffmpeg_reader.py", line 35, in __init__
    infos = ffmpeg_parse_infos(filename, print_infos, check_duration,
  File "/home/alexandre/.local/lib/python3.8/site-packages/moviepy/video/io/ffmpeg_reader.py", line 244, in ffmpeg_parse_infos
    is_GIF = filename.endswith('.gif')
AttributeError: 'NoneType' object has no attribute 'endswith'

Hors ligne

#10 Le 15/03/2021, à 10:08

beuguissime

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

Là, je dirais que ça n'est plus un problème de bibliothèques mais une simple erreur d'exécution.
La variable filename n'est pas initialisée correctement et reste avec une valeur None. None n'a pas d'attribut endswith, contrairement à une chaîne de caractère. À toi de trouver pourquoi filename ne contient pas une chaîne de caractères.

Hors ligne

#11 Le 15/03/2021, à 10:45

Alxxandre

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

mais je n'ai pas de variable filename dans mon code, j'ai file_name...

Hors ligne

#12 Le 15/03/2021, à 10:56

beuguissime

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

Vu le message d'erreur, les fonctions du module moviepy attendent un argument filename. Il faut que tu ailles lire le code de ses fonctions pour savoir qui est censé passer cet argument aux fonctions de moviepy. Est-ce que tu dois le donner dans ton script de départ (sous la forme d'un keyword argument, du genre fonction_machin(arg1, filename="bidule")) ou est-ce qu'une autre fonction (de youtube-dl ?) est censée découvrir par elle-même le nom du fichier ? Je ne sais pas.

En attendant, peux-tu mettre un titre plus adéquat à cette discussion ? Ça permettra peut-être d'attirer des gens connaisseurs des modules que tu utilises et ça évitera d'attirer celles et ceux qui voudraient vraiment mettre à niveau vers python 3.9.

Dernière modification par beuguissime (Le 15/03/2021, à 10:56)

Hors ligne

#13 Le 15/03/2021, à 14:43

grandtoubab

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

pour diffuser on peut utiliser ffmpeg
https://trac.ffmpeg.org/wiki/StreamingGuide


Linux tout seul sur HP Pavilion DV7 et Acer Aspire T650, Canon MG3650 en wifi
Debian 11 Bullseye Gnome/Xorg, Gnome/Wayland avec SDDM
https://bidouilledebian.wordpress.com/
ON M'A VU DANS LE VERCORS, SAUTER A L'ELASTIQUE..... J'AI DANS LES BOTTES DES MONTAGNES DE QUESTIONS....

Hors ligne

#14 Le 15/03/2021, à 16:18

Alxxandre

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

est-ce que ça s'utilise aussi en python ??

Hors ligne

#15 Le 15/03/2021, à 19:12

grandtoubab

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

connait pas python
je l'ai utilisé dans un script shell pour auto streamer un flux internet

mise en écoute d'un lecteur vicéo

/usr/bin/ffplay -v error udp://127.0.0.1:1234&

streaming d'un flux internet reconstitué dont certaines données sont calculées dans le script shell

/usr/bin/time --output=stream -f "\t%E secondes" ffmpeg -hide_banner -v error -i segment-"$nbdiff".ts -f mpegts udp://127.0.0.1:1234


Linux tout seul sur HP Pavilion DV7 et Acer Aspire T650, Canon MG3650 en wifi
Debian 11 Bullseye Gnome/Xorg, Gnome/Wayland avec SDDM
https://bidouilledebian.wordpress.com/
ON M'A VU DANS LE VERCORS, SAUTER A L'ELASTIQUE..... J'AI DANS LES BOTTES DES MONTAGNES DE QUESTIONS....

Hors ligne

#16 Le 15/03/2021, à 19:20

Alxxandre

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

ça m'a l'air en plein dans le sujet, mais c'est pour un projet en python, et j'avoue que je ne connais ni ne comprend bien le shell, et en plus, le shell est incompatible avec l'affichage graphique dont j'ai besoin.

Hors ligne

#17 Le 17/03/2021, à 17:37

Alxxandre

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

ok, j'ai fait des recherches, et j'ai trouvé ce script :

def download_clip(url, name):
    ydl_opts = {
        'format': 'bestaudio/best',
        'outtmpl': dir_utils.get_perm_med_dir() + f'/sound_board/{name}.wav',
        'noplaylist': True,
        'continue_dl': True,
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'wav',
            'preferredquality': '192', }]
    }
    try:
        with youtube_dl.YoutubeDL(ydl_opts) as ydl:
            ydl.cache.remove()
            info_dict = ydl.extract_info(url, download=False)
            ydl.prepare_filename(info_dict)
            ydl.download([url])
            return True
    except Exception :
    	return False

juste comme ça, tout va bien, aucune erreur à l'éxécution, sauf que il ne se passe rien, puisqu'il n'y a qu'une fonction.
donc le script devient :

import youtube_dl

def download_clip(url, name):
    ydl_opts = {
        'format': 'bestaudio/best',
        'outtmpl': dir_utils.get_perm_med_dir() + f'/sound_board/{name}.wav',
        'noplaylist': True,
        'continue_dl': True,
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'wav',
            'preferredquality': '192', }]
    }
    try:
        with youtube_dl.YoutubeDL(ydl_opts) as ydl:
            ydl.cache.remove()
            info_dict = ydl.extract_info(url, download=False)
            ydl.prepare_filename(info_dict)
            ydl.download([url])
            return True
    except Exception :
    	return False

download_clip("https://www.youtube.com/watch?v=N-MgRkSh5Xk","name")

sauf que cette fois, à l'exécution, j'ai l'erreur :

$python3 test.py 
Traceback (most recent call last):
  File "test.py", line 24, in <module>
    download_clip("https://www.youtube.com/watch?v=N-MgRkSh5Xk","name")
  File "test.py", line 6, in download_clip
    'outtmpl': dir_utils.get_perm_med_dir() + f'/sound_board/{name}.wav',
NameError: name 'dir_utils' is not defined

j'ai encore cherché, et j'ai vu que "dir_utils" appartenait au module "JJMumbleBot", j'ai ensuite trouvé ceci : https://github.com/DuckBoss/JJMumbleBot … ements.txt
mais je n'arrive pas à installer python-Levenshtein...

Hors ligne

#18 Le 17/03/2021, à 18:54

beuguissime

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

ici dir_utils ne sert qu'à définir un chemin

dir_utils.get_perm_med_dir() + f'/sound_board/{name}.wav',

Tu ne vas pas installer un tout autre projet juste pour ça. Définis toi-même le chemin.

Hors ligne

#19 Le 17/03/2021, à 19:03

Alxxandre

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

en fait, j'ai fait beaucoup plus simple :

import youtube_dl

def download_clip(url):
    ydl_opts = {}
    with youtube_dl.YoutubeDL(ydl_opts) as ydl:
        ydl.cache.remove()
        info_dict = ydl.extract_info(url, download=False)
        ydl.prepare_filename(info_dict)
        ydl.download([url])
        return True

download_clip("https://www.youtube.com/watch?v=N-MgRkSh5Xk")

et ca marche !!
(d'ailleurs je sais même pas a quoi servait tout ça wink

    ydl_opts = {
        'format': 'bestaudio/best',
        'outtmpl': dir_utils.get_perm_med_dir() + f'/sound_board/{name}.wav',
        'noplaylist': True,
        'continue_dl': True,
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'wav',
            'preferredquality': '192', }]
    }

Hors ligne

#20 Le 17/03/2021, à 19:10

beuguissime

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

Ça marche ? Où est envoyé le flux ? Comment le récupères-tu ?

Hors ligne

#21 Le 17/03/2021, à 20:33

Alxxandre

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

en fait ça télécharge la vidéo, reste plus qu'à supprimer le fichier dès qu'on en a plus besoin
mais c'est vrai que du coup ça pose une problématique de connexion :
un utilisateur qui a une faible connexion mettra plus de temps à télécharger puis jouer la vidéo...
qu'est-ce que c'est cette histoire de flux...?

Hors ligne

#22 Le 19/03/2021, à 04:19

beuguissime

Re : Streamer vidéo Youtube en Python (youtube-dl, moviepy,pafy)[Résolu]

Alxxandre a écrit :

en fait ça télécharge la vidéo, reste plus qu'à supprimer le fichier dès qu'on en a plus besoin

Ben oui, c'est ce que fait la fonction que tu donnes dans tes derniers messages, elle se nomme d'ailleurs "machin_download".
Je m'étonnais que tu marques ton sujet en résolu puisque la prétendue solution ne correspond pas à ton besoin initial.

Hors ligne