Python ffprobe/avprobe 和 youtube_dl 在 Mac 上的问题
Python problems with ffprobe/avprobe and youtube_dl on Mac
昨天开始自学Python,如有礼仪失误,敬请见谅。我的挑战是获取歌曲名称的 .csv 列表,在 YouTube 上搜索每个视频,然后使用 youtube-dl 下载音频。我的代码似乎适用于一个输出文件,但由于我无法解决的原因,循环结束了。主要错误是 DownloadError: [0;31mERROR:[0m ffprobe or avprobe not found. Please install one.
但我已经安装了这些(据我所知)。我已经尝试并尝试解决这个问题,但在没有任何基本知识的情况下我快被淹死了。我正在使用 python 2.7.13。有什么建议吗?对不起丑陋的代码!
主要功能:
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
它使用的函数,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')
并在 shell window 中完整输出。第一个 mp3 已保存,但随后循环结束,我的屏幕淹没在红色错误中。
================================== 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.
>>>
您想要 mp3 格式的音频。 YouTube 仅提供其他格式的音频,例如 m4a。因此,youtube-dl 下载 m4a 文件并将其转换为 mp3。 youtube-dl 不包含自定义 mp3 转换器。它使用 ffmpeg 或 avconv 进行音频转换。
因此,如果要转换音频,需要安装ffmpeg或avconv。如何在 macOS is documented in detail at our sister site superuser.
上做到这一点
您收到的其他警告是由于配置错误 beautifulsoup。与其尝试自己解析搜索结果,不如让 youtube-dl 来解析,URL 按照 'ytsearch1:flying bunny'
的方式应该可以解决问题。
昨天开始自学Python,如有礼仪失误,敬请见谅。我的挑战是获取歌曲名称的 .csv 列表,在 YouTube 上搜索每个视频,然后使用 youtube-dl 下载音频。我的代码似乎适用于一个输出文件,但由于我无法解决的原因,循环结束了。主要错误是 DownloadError: [0;31mERROR:[0m ffprobe or avprobe not found. Please install one.
但我已经安装了这些(据我所知)。我已经尝试并尝试解决这个问题,但在没有任何基本知识的情况下我快被淹死了。我正在使用 python 2.7.13。有什么建议吗?对不起丑陋的代码!
主要功能:
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
它使用的函数,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')
并在 shell window 中完整输出。第一个 mp3 已保存,但随后循环结束,我的屏幕淹没在红色错误中。
================================== 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.
>>>
您想要 mp3 格式的音频。 YouTube 仅提供其他格式的音频,例如 m4a。因此,youtube-dl 下载 m4a 文件并将其转换为 mp3。 youtube-dl 不包含自定义 mp3 转换器。它使用 ffmpeg 或 avconv 进行音频转换。
因此,如果要转换音频,需要安装ffmpeg或avconv。如何在 macOS is documented in detail at our sister site superuser.
上做到这一点您收到的其他警告是由于配置错误 beautifulsoup。与其尝试自己解析搜索结果,不如让 youtube-dl 来解析,URL 按照 'ytsearch1:flying bunny'
的方式应该可以解决问题。