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

相关推荐
翱翔-蓝天10 小时前
抖音视频下载工具
音视频
AI服务老曹11 小时前
包含网络、平台、数据及安全四大体系的智慧快消开源了
运维·人工智能·安全·开源·音视频
孤舟簔笠翁12 小时前
【Audio开发三】音频audio中帧frameSize ,周期大小periodsize,缓冲区buffer原理详解以及代码流程分析
音视频
思陌Ai算法定制13 小时前
图神经网络+多模态:视频动作分割的轻量高效新解法
人工智能·深度学习·神经网络·机器学习·音视频·医学影像
逼子格14 小时前
十三种物联网/通信模块综合对比——《数据手册--物联网/通信模块》
嵌入式硬件·物联网·音视频·硬件工程师·硬件测试·硬件笔试真题·通信模块
菊风 Juphoon16 小时前
菊风RTC 2.0 开发者文档正式发布,解锁音视频新体验!
音视频·实时音视频
JHC00000019 小时前
ubuntu 下调用系统麦克风,以及faster-whisper-medium 处理音频转写文本
ubuntu·whisper·音视频
六bring个六1 天前
相机功能特性(QCamera::Feature)详解
音视频·qt6.3
EasyGBS1 天前
国标GB28181协议EasyCVR视频融合平台:5G时代远程监控赋能通信基站安全管理
大数据·网络·人工智能·安全·音视频
斗锋在干嘛1 天前
Android 回答视频边播放边下载的问题
android·jvm·音视频