2017-03-26 4 views
0

J'ai commencé l'auto-apprentissage Python hier, alors je m'excuse d'avance pour toute erreur d'étiquette. Mon défi était de prendre une liste .csv de titres de chansons, de rechercher chaque vidéo sur YouTube, puis d'utiliser youtube-dl pour télécharger l'audio. Mon code semble fonctionner pour un fichier de sortie, mais la boucle se termine pour des raisons que je ne peux pas résoudre. L'erreur principale est DownloadError: [0;31mERROR:[0m ffprobe or avprobe not found. Please install one. Mais j'ai installé ceux-ci (au meilleur de ma connaissance). J'ai essayé et essayé de résoudre ce problème, mais sans aucune connaissance fondamentale, je me noie. J'utilise python 2.7.13. Aucun conseil? Désolé pour le code moche!Problèmes Python avec ffprobe/avprobe et youtube_dl sur Mac

Fonction principale:

import csv 
import youtube_extract 

#concatenate column elements of each row: 
with open('Songs for wedding test.csv') as f: 
    reader = csv.reader(f) 
    with open('Songs for wedding test output.csv', 'w') as g: 
     writer = csv.writer(g) 
     for row in reader: 
      new_row = [' '.join([row[0], row[1]])] + row[2:] 
      writer.writerow(new_row) 

with open('Songs for wedding test output.csv', 'rb') as csvfile: 
    spamreader = csv.reader(csvfile, delimiter=';') 
    #Make into a list: 
    data = list(spamreader) 
    #Convert into usable strings: 
    data2=data 
    for i, item in enumerate(data): 
     data2[i] = str(data[i]) 
     youtube_extract.extract_download(data2[i])  
    print data2 

La fonction utilise, youtube_extract.py:

#!/usr/bin/env python2.7 

from __future__ import unicode_literals 
import sys; sys.path 
sys.path.append('/usr/local/bin/youtube-dl') 
sys.path.append('/usr/local/Cellar/ffmpeg/3.2.4') 
import os 
import youtube_dl 
import urllib 
import urllib2 
import bs4 
from bs4 import BeautifulSoup 


def extract_download(textToSearch): 
    #Get rid of square brackets and quotes: 
    query = urllib.quote(str(textToSearch).replace('[','').replace(']','').replace('"','').replace('"','')) 
    url = "https://www.youtube.com/results?search_query=" + query 
    response = urllib2.urlopen(url) 
    html = response.read() 
    soup = BeautifulSoup(html) 
    for a in soup.findAll(attrs={'class':'yt-uix-tile-link'}, limit=1): 
     vidid = 'https://www.youtube.com' + a['href'] 
     print vidid 

    os.chdir('/Users/smurfo/Music/Wedding songs') 
    ydl_opts = { 
     'format': 'bestaudio/best', 
     'download_archive': 'downloaded_songs.txt', 
     'verbose': True, 
     'outtmpl': 'Wedding songs/%(title)s.%(ext)s', 
     'postprocessors': [{ 
      'key': 'FFmpegExtractAudio', 
      'preferredcodec': 'mp3', 
      'preferredquality': '192', 
     }], 
    } 
    with youtube_dl.YoutubeDL(ydl_opts) as ydl: 
     ydl.download([vidid]) 

    os.chdir('/Users/smurfo/Dropbox/Coding/Python learning') 

Et la sortie complète dans la fenêtre de shell. Le premier mp3 est enregistré, mais la boucle se termine et mon écran se noie en rouge.

================================== RESTART: /Users/smurfo/Dropbox/Coding/Python learning/csv reading.py ================================== 

Warning (from warnings module): 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/beautifulsoup4-4.5.3-py2.7.egg/bs4/__init__.py", line 181 
UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("html.parser"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently. 

The code that caused this warning is on line 1 of the file <string>. To get rid of this warning, change code that looks like this: 

BeautifulSoup([your markup]) 

to this: 

BeautifulSoup([your markup], "html.parser") 

https://www.youtube.com/watch?v=7fkOqXAHLKQ 
[debug] Encodings: locale US-ASCII, fs utf-8, out us-ascii, pref US-ASCII 
[debug] youtube-dl version 2017.03.24 
[debug] Python version 2.7.13 - Darwin-16.4.0-x86_64-i386-64bit 
[debug] exe versions: none 
[debug] Proxy map: {} 
[youtube] 7fkOqXAHLKQ: Downloading webpage 
[youtube] 7fkOqXAHLKQ: Downloading video info webpage 
[youtube] 7fkOqXAHLKQ: Extracting video information 
[youtube] {22} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {43} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {18} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {36} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {17} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {136} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {247} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {135} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {244} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {134} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {243} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {133} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {242} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {160} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {278} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {140} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {171} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {249} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {250} signature length 43.40, html5 player en_US-vflEzRdnB 
[youtube] {251} signature length 43.40, html5 player en_US-vflEzRdnB 
[debug] Invoking downloader on u'https://r5---sn-fpoq-hm2z.googlevideo.com/videoplayback?dur=202.950&lmt=1449647638777560&ip=151.18.103.48&key=yt6&id=o-AO0F6ZMx0LP0Swm_iDiWZtFd0HZozItNeM1bUmT7Q2Ey&itag=171&sparams=clen%2Cdur%2Cei%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Ckeepalive%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpcm2cms%2Cpl%2Crequiressl%2Csource%2Cupn%2Cexpire&upn=jTIcpTuU5gc&mime=audio%2Fwebm&pcm2cms=yes&pl=17&source=youtube&gir=yes&ipbits=0&initcwndbps=838750&keepalive=yes&clen=3160765&mn=sn-fpoq-hm2z&mm=31&requiressl=yes&expire=1490574223&ms=au&ei=LwfYWNH4E4bLWcuTpcgK&mv=m&mt=1490552546&signature=10CC47D7073DC66C89435916227A67196D22DA2D.D55F1282DFF0CC8992D3680B6220F5FC5078BD72&ratebypass=yes' 
[download] Destination: Wedding songs/Parov Stelar - Jimmys Gang (Official Video).webm 

[K[download] 0.0% of 3.01MiB at 10.26KiB/s ETA 05:00 
[K[download] 0.1% of 3.01MiB at 20.50KiB/s ETA 02:30 
[K[download] 0.2% of 3.01MiB at 36.44KiB/s ETA 01:24 
[K[download] 0.5% of 3.01MiB at 65.40KiB/s ETA 00:46 
[K[download] 1.0% of 3.01MiB at 111.40KiB/s ETA 00:27 
[K[download] 2.0% of 3.01MiB at 192.12KiB/s ETA 00:15 
[K[download] 4.1% of 3.01MiB at 334.31KiB/s ETA 00:08 
[K[download] 8.3% of 3.01MiB at 543.36KiB/s ETA 00:05 
[K[download] 16.6% of 3.01MiB at 748.14KiB/s ETA 00:03 
[K[download] 33.1% of 3.01MiB at 940.02KiB/s ETA 00:02 
[K[download] 66.3% of 3.01MiB at 1.22MiB/s ETA 00:00 
[K[download] 100.0% of 3.01MiB at 1.43MiB/s ETA 00:00 
[K[download] 100% of 3.01MiB in 00:02 
[0;31mERROR:[0m ffprobe or avprobe not found. Please install one. 
Traceback (most recent call last): 
    File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1930, in post_process 
    files_to_delete, info = pp.run(info) 
    File "/usr/local/bin/youtube-dl/youtube_dl/postprocessor/ffmpeg.py", line 239, in run 
    filecodec = self.get_audio_codec(path) 
    File "/usr/local/bin/youtube-dl/youtube_dl/postprocessor/ffmpeg.py", line 154, in get_audio_codec 
    raise PostProcessingError('ffprobe or avprobe not found. Please install one.') 
PostProcessingError: ffprobe or avprobe not found. Please install one. 


Traceback (most recent call last): 
    File "/Users/smurfo/Dropbox/Coding/Python learning/csv reading.py", line 26, in <module> 
    youtube_extract.extract_download(data2[i]) 
    File "/Users/smurfo/Dropbox/Coding/Python learning/youtube_extract.py", line 39, in extract_download 
    ydl.download([vidid]) 
    File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1884, in download 
    url, force_generic_extractor=self.params.get('force_generic_extractor', False)) 
    File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 772, in extract_info 
    return self.process_ie_result(ie_result, download, extra_info) 
    File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 826, in process_ie_result 
    return self.process_video_result(ie_result, download=download) 
    File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1527, in process_video_result 
    self.process_info(new_info) 
    File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1865, in process_info 
    self.post_process(filename, info_dict) 
    File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1932, in post_process 
    self.report_error(e.msg) 
    File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 589, in report_error 
    self.trouble(error_message, tb) 
    File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 559, in trouble 
    raise DownloadError(message, exc_info) 
DownloadError: [0;31mERROR:[0m ffprobe or avprobe not found. Please install one. 
>>> 

Répondre

1

Vous voulez l'audio au format mp3. YouTube ne sert que l'audio dans d'autres formats, tels que m4a. Par conséquent, youtube-dl télécharge le fichier m4a et le convertit en mp3. youtube-dl n'inclut pas de convertisseur mp3 personnalisé. Il utilise ffmpeg ou avconv pour la conversion audio. Par conséquent, si vous voulez convertir l'audio, vous devez installer ffmpeg ou avconv. Par conséquent, si vous voulez convertir l'audio, vous devez installer ffmpeg ou avconv. Comment faire cela sur macOS is documented in detail at our sister site superuser.

Les autres avertissements que vous obtenez sont en raison d'un beautifulsoup mal configuré. Au lieu d'essayer d'analyser les résultats de la recherche vous-même, laissez youtube-dl le faire, une URL sur le modèle de 'ytsearch1:flying bunny' devrait faire l'affaire.

+0

Merci pour la réponse rapide! Chaque fois que je tente d'installer ffmpeg, je reçois cette réponse: 'Erreur: Impossible lien: /usr/local/share/man/man1/brew.1 S'il vous plaît supprimer ces chemins et exécutez' brew update'.' Quand je lance 'echo $ PATH', je reçois ceci: ' /Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/bin:/usr/sbin:/usr/ local/bin:/opt/X11/bin:/Bibliothèque/TeX/texbin' Je ne comprends pas encore vraiment les chemins. Se pourrait-il que ffmpeg soit installé quelque part mais que je l'ai mal configuré? –

+0

Cela ressemble à une question distincte. N'hésitez pas à [poser cette question] (http://stackoverflow.com/questions/ask). Assurez-vous d'inclure les commandes réelles que vous exécutez et la sortie * full *. Je ne suis pas sûr pourquoi '$ PATH' devrait être pertinent, mais si vous le croyez, postez-le également dans la nouvelle question. Avez-vous essayé de faire ce que le message dit et de supprimer '/ usr/local/share/man/man1/brew.1'? Votre théorie pourrait être correcte, mais je ne vois aucune preuve pour cela. – phihag

+0

Oui, j'ai essayé ça. D'accord, je vais poser la question séparément - merci pour votre patience! (Edit: Apparemment, je suis arrivé à ma limite de question - après une question) –