对于视频二创等一些业务场景,可能要采集youtube等的相关媒体视频资源,使用[yt-dlp](https://github.com/yt-dlp/yt-dlp)是一个不错的选择,提供的命令比较丰富,场景比较全面
yt-dlp
是一个用 Python 编写的命令行工具,主要用于从视频网站下载视频和音频。它是 youtube-dl
的一个分支,提供了一些额外的功能和增强。翻译后的详细的说明: GitHub上的 yt-dlp 的 GitHub 页。
下面是一些简易的使用说明(需要有python环境,可以使用conda的python环境)
安装 yt-dlp
你可以通过 pip 安装 yt-dlp
:
pip install -U yt-dlp
或者,你也可以直接从 GitHub 克隆最新版本:
git clone https://github.com/yt-dlp/yt-dlp.git
cd yt-dlp
python -m pip install .
基本用法
- 下载视频:
yt-dlp <视频网址>
例如:
yt-dlp https://www.youtube.com/watch?v=dQw4w9WgXcQ
-
下载音频:
如果你只想下载音频,可以使用
-x
选项:
yt-dlp -x --audio-format mp3 <视频网址>
-
指定下载格式:
默认情况下,
yt-dlp
会选择最佳视频/音频格式,但你可以手动指定:
yt-dlp -f "bestvideo[height<=720]+bestaudio" <视频网址>
-
下载整个播放列表:
如果视频网址是一个播放列表,你可以直接下载整个列表:
yt-dlp <播放列表网址>
-
设置输出文件名:
你可以使用
-o
选项来指定下载的文件名格式:
yt-dlp -o "%(title)s.%(ext)s" <视频网址>
高级用法
-
代理设置:
如果你需要使用代理,可以使用
--proxy
选项:
yt-dlp --proxy "socks5://user:pass@host:port" <视频网址>
-
下载进度条:
默认情况下,
yt-dlp
会显示下载进度。如果你希望以简洁模式下载,使用--no-progress
:
yt-dlp --no-progress <视频网址>
-
下载字幕:
如果视频有字幕,你可以选择下载它们:
yt-dlp --write-sub --sub-lang "zh-Hans" <视频网址>
帮助和选项
要查看所有可用选项和帮助信息,可以使用:
yt-dlp --help
python中使用
pip安装yt-dlp
pip install -U yt-dlp
如果是Linux服务器上使用yt-dlp,需要有FFmpeg的支持
Ubuntu 上
使用包管理器 APT:
更新软件包列表:
sudo apt update
安装 FFmpeg:
sudo apt install ffmpeg
安装完成后,您可以在终端中输入
ffmpeg -version
来验证安装是否成功。
本地能翻qian的情况下,只能小量的采集数据;不然会报错
如果是大批量的采集某个网站的视频数据,最好是部署到服务器上,并且使用代理, 没有代理,采集量大了会报错提示(海外代理能只能使用海外服务器)
``
import yt_dlp
def download_youtube_video(url, output_path):
"""
下载youtube视频
:param url: 视频url
:param output_path: 视频保存路径
:return:
"""
format = None
if 'shorts' in url:
# 采集横版视频
format = 'bestvideo[width=720]+bestaudio/best[width=720]'
else:
# 采集竖版视频
format = 'bestvideo[height=720]+bestaudio/best[height=720]'
options = {
'format': format,
'merge_output_format': 'mp4',
'outtmpl': output_path,
# 使用代理(大批量下载需要使用代理-静态代理IP就行,动态的不太靠谱,静态代理IP失效了就换一批)
# 'proxy': ''
}
try:
with yt_dlp.YoutubeDL(options) as ydl:
ydl.download([url])
except yt_dlp.utils.DownloadError as e:
print(f'下载失败-{e}')
if __name__ == '__main__':
# 竖版视频
video_url = "https://www.youtube.com/shorts/cjTvuE9yCMo"
print(f'获取竖版视频-{video_url}')
output_path = "cjTvuE9yCMo.mp4"
download_youtube_video(video_url, output_path)
# 横版视频
video_url = "https://www.youtube.com/watch?v=wojgbTK4_jU"
output_path = "wojgbTK4_jU.mp4"
download_youtube_video(video_url, output_path)
print(f'获取竖版视频-{video_url}')