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(周四)

相关推荐
码上观世界2 小时前
一张图 + 一段音频,生成口型同步、有表情的数字人
音视频
鲲穹AI种草5 小时前
自媒体矩阵批量剪辑怎么选?鲲剪短视频批量处理工具横向评测
人工智能·音视频·媒体
可乐鸡翅yeah_5 小时前
网页端 M3U8 播放器性能监控,怎么看播放卡顿指标
javascript·ffmpeg·音视频·safari·m3u8
可乐鸡翅yeah_5 小时前
M3U8 防盗链 URL‑Token 签名,新手开发实操避坑
开发语言·javascript·ios·音视频·safari
昨日之日20066 小时前
yovoice:本地配音工具箱,支持音色克隆与情绪控制,专为旁白、有声书和视频配音打造
人工智能·音视频
狗凯之家源码网6 小时前
2026 版短视频与视频号去水印源码深度评测
音视频
深圳市青牛科技实业有限公司8 小时前
GC1843|24bit 立体声差分输入 ADC,超小封装音频采集芯片
音视频
W_chuanqi8 小时前
使用EV录屏视频噪声很大
音视频·ev录屏
开开心心就好9 小时前
超市定时播音软件,免费版支持循环播放
智能手机·ffmpeg·ocr·word·vim·音视频·visual studio
linux_cfan12 小时前
videojs v10 源代码系列解读:35 · HLS 解析器:multivariant 与 media playlist
前端·javascript·音视频