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

相关推荐
墨染天姬3 小时前
[V2X]音频数据流图
音视频
byte轻骑兵13 小时前
【AVDTP】规范精讲[6]: 打通全流程,蓝牙音频连接背后的12步信令博弈
人工智能·音视频·avrcp·蓝牙耳机·蓝牙车机
qq36219670514 小时前
# 视频转文字准确率如何提升?影响识别质量的 6 个关键因素与优化技巧
音视频
不爱记笔记14 小时前
音视频转笔记工具横评2026,通义听悟、Ai好记、NotebookLM 实测对比
人工智能·笔记·ai·音视频·飞书·obsidian
中微极客14 小时前
Seedance 2.5深度解析:字节跳动30秒4K视频生成模型架构与API实战
音视频
SimpleLearingAI15 小时前
生成图像/视频质量评估
音视频·多模态大模型
hz5678915 小时前
音视频技术SDK选型指南:企业实时互动场景的关键能力解析
网络·云计算·音视频·实时音视频·信息与通信
paokuflying15 小时前
ffmpeg提取视频中的音频
ffmpeg·音视频
不爱记笔记16 小时前
上下班路上怎么消化技术视频?我把B站内容转成播客,通勤时间也能系统学习
学习·ai·音视频·知识库·知识管理
zandy101117 小时前
Seedance 2.0第三方创作工具怎么选?商用视频工作流评估指南
音视频