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 小时前
融合优势:SIP 广播对讲联动华为会议 全场景沟通响应提速
华为·音视频·广播对讲系统
肥or胖12 小时前
【FFmpeg 快速入门】本地播放器 项目
开发语言·qt·ffmpeg·音视频
DogDaoDao14 小时前
GitHub开源轻量级语音模型 Vui:重塑边缘智能语音交互的未来
大模型·github·音视频·交互·vui·语音模型·智能语音
张海森-1688201 天前
视频码率是什么?视频流分辨率 2688x1520_25fps采用 h264格式压缩,其码率为
音视频
DogDaoDao2 天前
视频HDR技术全解析:从原理到应用的深度探索
音视频·hdr·sdr·视频渲染·hdr10·视频hdr技术标准·人眼视觉系统
IoT砖家涂拉拉2 天前
萌宠语聊新模板!借助On-App AI降噪与音频处理技术,远程安抚宠物更轻松、更安心!
人工智能·ai·app·音视频·智能家居·智能硬件·宠物
AI视觉网奇3 天前
截取视频 截取mp4 视频缩放
音视频
DogDaoDao3 天前
2025年 GitHub 主流开源视频生成模型介绍
人工智能·深度学习·开源·大模型·github·音视频·视频生成
todoitbo3 天前
docker搭建freeswitch实现点对点视频,多人视频
docker·容器·音视频·freeswitch·视频聊天
菜包eo3 天前
3种添加视频水印的加密方式,守护视频安全!
安全·音视频