you-get - 使用代码下载视频

文章目录


关于 you-get

you-get 是一个有名的开源视频下载工具包,这里不赘述。


代码调用

you-get 提供了命令行的方式下载视频,这里介绍使用 Python 调用源代码来下载视频,以便处理更多定制化的需求。

以下载 youtube 视频为例

代码逻辑如下,但运行时会出现报错,调整方式见下方:

python 复制代码
site = YouTube() 
# 使用 url 下载
url = 'https://www.youtube.com/watch?v=mchvUV0iQLg'
site.download_by_url(url) 

# 使用 vid 下载
vid = '1c3iQWFEDJI'
site.download_by_vid(vid)

报错处理

1、使用 url 下载时,可能会报错:[Failed] Unsupported URL pattern.

如果一个 url 是 https://www.youtube.com/watch?v=mchvUV0iQLg,那么它的 vid 是 mchvUV0iQLg

是因为 youtube.py 中的 get_vid_from_url 没有解析到 url 中的 vid,导致 prepare 函数中会将 url 传递给 download_playlist_by_url 来下载,同时它不符合 playlist 的标准,所以报错。

你可以更改 get_vid_from_url 的规则来识别 vid。


2、只传递 vid 来下载时,程序可能崩溃,因为 youtube.py 中的 prepare 函数,在执行 if re.search('\Wlist=', self.url) 的时候,这里没有传递 url,所以改为如下即可:

python 复制代码
if self.url and re.search('\Wlist=', self.url) and not kwargs.get('playlist'):
            log.w('This video is from a playlist. (use --playlist to download all videos in the playlist.)')

源码简单分析

在调用和打断点的过程,我们可以了解到

  • 源码主要在 src 文件夹中;
  • 各个下载器在 extractors 文件夹中,下载器继承自 VideoExtractor 类;
  • VideoExtractor 类内部,会调用子类的 extract 来提取流的内容;
    调用自身的 download 方法下载视频,这里会使用 common.py 文件的 download_urls 方法,内部使用 ffmpeg 下载视频,并根据需要将分段视频合并。
shell 复制代码
├── src
│   └── you_get
│       ├── __init__.py
│       ├── __main__.py
│       ├── cli_wrapper
│       │   ├── __init__.py
│       │   ├── downloader
│       │   │   └── __init__.py
│       │   ├── openssl
│       │   │   └── __init__.py
│       │   ├── player
│       │   │   ├── __init__.py
│       │   │   ├── __main__.py
│       │   │   ├── dragonplayer.py
│       │   │   ├── gnome_mplayer.py
│       │   │   ├── mplayer.py
│       │   │   ├── vlc.py
│       │   │   └── wmp.py
│       │   └── transcoder
│       │       ├── __init__.py
│       │       ├── ffmpeg.py
│       │       ├── libav.py
│       │       └── mencoder.py
│       ├── common.py
│       ├── extractor.py
│       ├── extractors
│       │   ├── __init__.py
│       │   ├── acfun.py
│       │   ├── alive.py
│       │   ├── ...
│       │   ├── youku.py
│       │   ├── youtube.py 
│       │   └── zhihu.py
│       ├── json_output.py
│       ├── processor
│       │   ├── __init__.py
│       │   ├── ffmpeg.py
│       │   ├── join_flv.py
│       │   ├── join_mp4.py
│       │   ├── join_ts.py
│       │   └── rtmpdump.py
│       ├── util
│       │   ├── __init__.py
│       │   ├── fs.py
│       │   ├── git.py
│       │   ├── log.py
│       │   ├── os.py
│       │   ├── strings.py
│       │   └── term.py
│       └── version.py
├── tests  
│   ├── __init__.py
│   ├── test.py
│   ├── test_common.py
│   └── test_util.py
├── you-get
├── you-get.json
└── you-get.plugin.zsh

伊织 2023-11-09(周四)

相关推荐
m0_6145235510 小时前
完整教程|输入一句描述,能不能直接生成一段可以继续剪辑的视频:写结构化描述到生成短样片
人工智能·音视频
揽秀亭长14 小时前
视频转文字工具对比:从字幕生成到文本整理
人工智能·音视频
cuijiecheng201816 小时前
ZLMediaKit 已返回 SDP,浏览器仍然无视频画面问题排查记录
音视频
YWamy17 小时前
远程医疗音视频系统技术选型与全场景落地架构
架构·音视频
Agudamu116118 小时前
B站学习视频怎么变笔记:用 Ai好记 + Obsidian 搭建个人知识库的完整教程
人工智能·笔记·学习·音视频
2601_9623049119 小时前
2026年健康科普视频怎么制作:一条开源工具链从全手动到半自动的工程复盘
开源·音视频
举个栗子。19 小时前
OpenMontage:首个开源的 Agent 化视频制作系统,用自然语言一键出品影片
开源·音视频
小柯南敲键盘20 小时前
跨马翻译批量图片视频字幕翻译,跨境电商AI智能抠图一站式工具
人工智能·python·音视频·xcode
searchforAI21 小时前
AI自动总结YouTube视频:英文内容一键总结、智能时间戳、视频重点快速看
人工智能·ai·音视频
martindelophy1 天前
开源 AI 视频编辑器实战:用 Manifest + Adapter 构建可扩展的生成插件系统
人工智能·开源·音视频