這次回頭發現 PyTube 可以直接提取音訊
細節基本參考Download Video in MP3 format using PyTube(GeeksforGeeks)再做修改
首先安裝pytube
pip3 install pytube
如果出現 ModuleNotFoundError: No module named 'pip'
就去更新pip
執行 sudo apt-get install python3-pip
以下程式可直接取用 , 更改你的yt網址跟存mp3位置即可
from pytube import YouTube
import os
url = "https://www.youtube.com/watch?v=Dm9dUfvVhrQ"
target_path = "./Downloads"
yt = YouTube(url)
video = yt.streams.filter(only_audio=True).first()
out_file = video.download(output_path=target_path)
base, ext = os.path.splitext(out_file)
new_file = base + '.mp3'
os.rename(out_file, new_file)
print("target path = " + (new_file))
print("mp3 has been successfully downloaded.")
url就是你要下載的youtube mp3 網址
target_path就是下載完要放的位址
執行完如下
資料夾內對應生成mp3
==================
以下是 2020 版本 , 可跳過
==================
基本是參考ccs96307大所寫的:Python 當中使用 pytube 下載 Youtube 的影片
不過當中遇到一些問題,紀錄如何解決。
環境:Ubuntu 18.04
使用pytube+moviepy
先安裝
sudo pip3 install pytube3
sudo pip3 install moviepy
要做的事情:
# -*- coding: utf-8 -*-
from pytube import YouTube
def progress(chunk,file_handle,bytes_remaining):
contentSize=video.filesize
size=contentSize-bytes_remaining
print('\r' + '[Download progress]:%.2f%%;\n' % (' ' * int(size*20/contentSize), ' '*(20-int(size*20/contentSize)), float(size/contentSize*100)), end='')
url='https://www.youtube.com/watch?v=9Sc-ir2UwGU'
yt=YouTube(url,on_progress_callback=progress)
video=yt.streams.first()
video.download()
url內就放你要抓的影片網址 progress內只是顯示進度條,要簡單的話三行就能搞定
# -*- coding: utf-8 -*-
from pytube import YouTube
url = 'https://www.youtube.com/watch?v=JwBXgJeqeOs'
YouTube(url).streams.first().download()
Traceback (most recent call last):
File "/home/brad/.local/lib/python3.6/site-packages/pytube/extract.py", line 297, in apply_descrambler
for format_item in formats
File "/home/brad/.local/lib/python3.6/site-packages/pytube/extract.py", line 297, in <listcomp>
for format_item in formats
KeyError: 'url'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "DlYT2mp3.py", line 12, in <module>
yt=YouTube(url,on_progress_callback=progress)
File "/home/brad/.local/lib/python3.6/site-packages/pytube/__main__.py", line 92, in __init__
self.descramble()
File "/home/brad/.local/lib/python3.6/site-packages/pytube/__main__.py", line 132, in descramble
apply_descrambler(self.player_config_args, fmt)
File "/home/brad/.local/lib/python3.6/site-packages/pytube/extract.py", line 301, in apply_descrambler
parse_qs(formats[i]["cipher"]) for i, data in enumerate(formats)
File "/home/brad/.local/lib/python3.6/site-packages/pytube/extract.py", line 301, in <listcomp>
parse_qs(formats[i]["cipher"]) for i, data in enumerate(formats)
KeyError: 'cipher'
爬文發現不少人有相同問題且有人給出解法
簡單來說就是先看你的pytube裝在哪? 去資料夾內打開extract.py檔 找到函式apply_descrambler的301行,然後把
parse_qs(formats[i]["cipher"]) for i, data in enumerate(formats)
改成
parse_qs(formats[i]["signatureCipher"]) for i, data in enumerate(formats)
# -*- coding:utf-8 -*-
from moviepy.editor import *
filename='Kygo - Firestone.mp4'
targetname='Kygo - Firestone.mp3'
video=VideoFileClip(filename)
video.audio.write_audiofile(targetname)
Traceback (most recent call last):
File "mp4tomp3.py", line 2, in <module>
from moviepy.editor import *
File "/usr/local/lib/python3.6/dist-packages/moviepy/editor.py", line 36, in <module>
from .video.io.VideoFileClip import VideoFileClip
File "/usr/local/lib/python3.6/dist-packages/moviepy/video/io/VideoFileClip.py", line 3, in <module>
from moviepy.audio.io.AudioFileClip import AudioFileClip
File "/usr/local/lib/python3.6/dist-packages/moviepy/audio/io/AudioFileClip.py", line 3, in <module>
from moviepy.audio.AudioClip import AudioClip
File "/usr/local/lib/python3.6/dist-packages/moviepy/audio/AudioClip.py", line 7, in <module>
from moviepy.audio.io.ffmpeg_audiowriter import ffmpeg_audiowrite
File "/usr/local/lib/python3.6/dist-packages/moviepy/audio/io/ffmpeg_audiowriter.py", line 7, in <module>
from moviepy.config import get_setting
File "/usr/local/lib/python3.6/dist-packages/moviepy/config.py", line 36, in <module>
FFMPEG_BINARY = get_exe()
File "/usr/local/lib/python3.6/dist-packages/imageio/plugins/ffmpeg.py", line 49, in get_exe
return imageio_ffmpeg.get_ffmpeg_exe()
File "/usr/local/lib/python3.6/dist-packages/imageio_ffmpeg/_utils.py", line 50, in get_ffmpeg_exe
"No ffmpeg exe could be found. Install ffmpeg on your system, "
RuntimeError: No ffmpeg exe could be found. Install ffmpeg on your system, or set the IMAGEIO_FFMPEG_EXE environment variable.
找不到ffmpeg.exe? 那就裝吧
sudo apt update
sudo apt install ffmpeg
解決