

多种方法下载Youtube视频
source link: http://kevinnan.org.cn/index.php/archives/674/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

之前推荐过一个网站Youtube视频和字幕在线下载用来下载Youbute的视频。今天再介绍一个基于python的命令行工具youtube-dl
和python第三方库pytube
在本地下载Youtube视频。(Note:使用这两种方法需要你使用如v2ray
或者clash
这样的代理软件,而不是chrome插件,因为需要用到本地SOCK5和HTTP代理端口)。
2、youtube-dl
安装 youtube-dl
pip install youtube-dl
在你使用的代理软件中查看SOCK5或者HTTP本地代理的端口,然后使用如下命令
- socks5代理
youtube-dl --proxy socks5://127.0.0.1:10808 https://www.youtube.com/watch?v=6_gLU_OStK0
- http代理
youtube-dl --proxy http://127.0.0.1:10809 https://www.youtube.com/watch?v=6_gLU_OStK0
youtube-dl也可以下载国内视频平台的内容,如bilibili等。
3、pytube
3.1 安装pytube
pip install pytube
3.2 基础API介绍
- 初始化
YouTube
对象
# 导入pytube库
import pytube
# 设置代理 dict(自己更改)
proxy_handler = {
"http": " http://127.0.0.1:10809",
'https': ' http://127.0.0.1:10809'
}
# Youtube视频链接
url = 'https://www.youtube.com/watch?v=7Oqd9hjyHLw'
# 初始化YouTube下载控件
yt = pytube.YouTube(url, proxies=proxy_handler)
# 打印出视频支持下载的音频/视频格式,分辨率,视频编解码方式,音频码率,每条流对应的itag
for media_type in yt.streams.all():
print(media_type)
-
- 传统混合音频和视频的视频源,设置参数为
progressive=True
for media_type in yt.streams.filter(progressive=True): print(media_type)
<Stream: itag="18" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.42001E" acodec="mp4a.40.2" progressive="True" type="video">
- DASH流的视频源,设置参数为
adaptive=True
<Stream: itag="137" mime_type="video/mp4" res="1080p" fps="30fps" vcodec="avc1.640028" progressive="False" type="video"> <Stream: itag="248" mime_type="video/webm" res="1080p" fps="30fps" vcodec="vp9" progressive="False" type="video"> <Stream: itag="399" mime_type="video/mp4" res="1080p" fps="30fps" vcodec="av01.0.08M.08" progressive="False" type="video"> <Stream: itag="136" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.4d401f" progressive="False" type="video"> <Stream: itag="247" mime_type="video/webm" res="720p" fps="30fps" vcodec="vp9" progressive="False" type="video"> <Stream: itag="398" mime_type="video/mp4" res="720p" fps="30fps" vcodec="av01.0.05M.08" progressive="False" type="video"> <Stream: itag="135" mime_type="video/mp4" res="480p" fps="30fps" vcodec="avc1.4d401f" progressive="False" type="video"> <Stream: itag="244" mime_type="video/webm" res="480p" fps="30fps" vcodec="vp9" progressive="False" type="video"> <Stream: itag="397" mime_type="video/mp4" res="480p" fps="30fps" vcodec="av01.0.04M.08" progressive="False" type="video">
- 传统混合音频和视频的视频源,设置参数为
从上面的结果可以看出对于大多数视频,渐进式下载(音频和视频在同一个文件中)格式仅在360p以下才可用。因此,我想分别下载音频和视频文件并将其合并(DASH流
)。
- 通过itag下载视频
通过get_by_itag
方法下载对应视频,这是我认为最方便的方法,可以按照自己的需求下载对应的流。
video = yt.streams.get_by_itag(18)
video.download()
- 使用
ffmpeg-python
混合音频和视频
安装ffmpeg-python
pip install ffmpeg-python
3.4 完整代码(可在此基础上修改)
# 导入pytube库
# pip install pytube
import pytube
# 导入ffmpeg-python
# pip install ffmpeg-python
import ffmpeg
import os
# 设置代理 dict(自己更改)
proxy_handler = {
"http": " http://127.0.0.1:10809",
'https': ' http://127.0.0.1:10809'
}
# 打印出下载过程的进度条
def progress(stream, chunk, bytes_remaining):
contentSize = video.filesize
size = contentSize - bytes_remaining
print('\r' + '[Download progress]:[%s%s]%.2f%%;' % (
'█' * int(size*20/contentSize), ' '*(20-int(size*20/contentSize)), float(size/contentSize*100)), end='')
# 设置要下载YouTube视频的链接
url = 'https://www.youtube.com/watch?v=jb-i_ARlumQ'
# 初始化YouTube对象
yt = pytube.YouTube(url, on_progress_callback=progress, proxies=proxy_handler)
# 查看该TouTube支持的所有可下载的DASH流格式(视频分辨率,视频编解码方式,音频码率,每条流对应的itag)
for media_type in yt.streams.filter(adaptive=True):
print(media_type)
# 根据上面打印出的itag选择自己需要的流的itag,构造Stream对象
# 视频流
video = yt.streams.get_by_itag(137)
# 音频流
audio = yt.streams.get_by_itag(140)
# 下载视频
# download(output_path, filename)
# 注意你选择的时mp4格式还是webm格式(建议选择mp4)
video.download("./", "video_download")
audio.download("./", "audio_download")
video_stream = ffmpeg.input('video_download.mp4')
audio_stream = ffmpeg.input('audio_download.mp4')
ffmpeg.output(audio_stream, video_stream, "out.mp4").run()
# 删除音频和视频
os.remove("video_download.mp4")
os.remove("audio_download.mp4")
4、参考资料
[2] python的youtube-dl库一键下载全球各大影音网站音视频
[4] youtube-dl使用介绍
[5] ping与tcping
Recommend
-
13
0x00 前言 本文源于一个有趣的问题: 已知exe文件:https://github.com/3gstudent/test/raw/master/putty.exe Windows环境,需要将该exe释放到指定目录并执行,例如c:\download 问:
-
14
本文档介绍了 Python 下载文件的各种方式,从下载简单的小文件到用断点续传的方式下载大文件。 Requests 使用 Requests 模块的 get 方法从一个 url 上下载文件,在 python 爬虫中经常使用它下载简单的网页内容 i...
-
9
下载Youtube视频的23种方法 阅读时间 6 分钟,快速阅读仅需 2 分钟。这篇文章似乎有点非法,因为如果...
-
8
如何下载YouTube视频 - 暗无天日 如何下载YouTube视频 Want to download a YouTube video? Just add "ss" to the URL between "www." and "YouTube." 想要下载YouTube视频吗? 只需要在URL中 "www." 与 "YouTube." 之间添加...
-
11
当前位置: 陈沩亮博客 » 软件 » 电脑软件 » 如何下载油管上...
-
49
🔨工具:优雅地下载Youtube视频 Posted on 2021-10-31 ...
-
8
V2EX › 程序员 [技术] 下载 B 站大会员 mp4 视频的方法,用到工具: Fiddler+网友的解析平台+N_m3u8DL
-
11
电脑技术:下载YouTube油管视频和字幕的2种方法 By: taho
-
7
之前就简单地介绍过使用yt-dlp 来下载 YouTube 视频,yt-dlp 是自从 youtube-dl 不再更新之后有人接手开发的新工具。但这篇文章重点是在于下载 YouTube 视频,我会整理一下我目...
-
5
小白很久之前介绍过一款好用的YouTube视频下载工具:Youtube 专业下载工具,Youtube-dl & yt-dlp详细使用教程与初学上手示例,我们可以非常方便的把自己喜欢的油管up主的视频下载下来,但是每次都需要手动输...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK