快速上手pafy

pafy包的了解

今天划水时,无聊扒了扒YouTube,在经过一顿猛如虎的操作后,没能找到想要的url,于是Google了一下,发现了pafy这个库,于是翻译整理了一下,它专门用于下载youtube内容并检索元数据。Pafy对象与YouTube上托管的视频有关。它们包含元数据,例如标题,观看次数,作者和视频ID。

安装

pip install pafy

特征

  • 搜索元数据,例如观看次数,持续时间,评分,作者,缩略图,关键字
  • 以要求的分辨率/比特率/格式/文件大小下载视频或音频
  • 命令行工具(ytdl),可直接从命令行下载
  • 检索URL以在vlc或mplayer等播放器中流式传输视频
  • 适用于有年龄限制的视频和不可嵌入的视频
  • 小型独立的单个可导入模块文件(pafy.py)
  • 选择最高质量的流进行下载或流式传输
  • 仅下载M4V或WebM格式的视频(无音频)
  • 仅以ogg或m4a格式下载音频(无视频)
  • 检索式播放列表和播放列表元数据
  • 适用于Python 2.6+和3.3+
  • (可选)取决于youtube-dl(推荐;更稳定)

使用示例

这是在您自己的python代码中使用该模块的方法。有关命令行工具(ytdl)的说明,请参见下文

>>> import pafy

使用YouTube网址创建视频实例:

>>> url = "https://www.youtube.com/watch?v=bMt47wvK6u0"
>>> video = pafy.new(url)

获取对应的属性

>>> video.title   #标题
'Richard Jones: Introduction to game programming - PyCon 2014'
>>> video.rating    # 评分
5.0
>>> video.viewcount, video.author, video.length    # 观看数,作者,长度
(1916, 'PyCon 2014', 10394)
>>> video.duration, video.likes, video.dislikes   # 持续时间,喜欢数,不喜欢数
('02:53:14', 25, 0)

>>> print(video.description)   #描述
Speaker: Richard Jones

This tutorial will walk the attendees through development of a simple game using PyGame with time left over for some experimentation and exploration of different types of games.

Slides can be found at: https://speakerdeck.com/pycon2014 and https://github.com/PyCon/2014-slides

列出视频的可用流

>>> streams = video.streams
>>> for s in streams:
...     print(s)
...
normal:mp4@1280x720
normal:webm@640x360
normal:mp4@640x360
normal:flv@320x240
normal:3gp@320x240
normal:3gp@176x144

显示所有格式,文件大小及其下载网址:

>>> for s in streams:
...    print(s.resolution, s.extension, s.get_filesize(), s.url)
...
1280x720 mp4 2421958510 https://r1---sn-aiglln7e.googlevideo.com/videoplayba[...]
640x360 webm 547015732 https://r1---sn-aiglln7e.googlevideo.com/videoplaybac[...]
640x360 mp4 470655850 https://r1---sn-aiglln7e.googlevideo.com/videoplayback[...]
320x240 flv 345455674 https://r1---sn-aiglln7e.googlevideo.com/videoplayback[...]
320x240 3gp 208603447 https://r1---sn-aiglln7e.googlevideo.com/videoplayback[...]
176x144 3gp 60905732 https://r1---sn-aiglln7e.googlevideo.com/videoplayback?[...]

无论文件格式如何,都可获得最佳分辨率:

>>> best = video.getbest()
>>> best.resolution, best.extension
('1280x720', 'mp4')

获得特定文件格式的最佳分辨率:(mp4,webm,flv或3gp)

>>> best = video.getbest(preftype="webm")
>>> best.resolution, best.extension
('640x360', 'webm')

获取网址,以便在mplayer / vlc等中下载或流式传输:

>>> best.url
'http://r12---sn-aig7kner.c.youtube.com/videoplayback?expire=1369...

下载视频并显示进度:

>>> best.download(quiet=False)
3,734,976 Bytes [0.20%] received. Rate: [ 719 KB/s].  ETA: [3284 secs]

下载视频,使用特定目录和/或文件名:

>>> filename = best.download(filepath="/tmp/")

>>> filename = best.download(filepath="/tmp/Game." + best.extension)

获取纯音频流(m4a和/或ogg vorbis):

>>> audiostreams = video.audiostreams
>>> for a in audiostreams:
...     print(a.bitrate, a.extension, a.get_filesize())
...
256k m4a 331379079
192k ogg 172524223
128k m4a 166863001
128k ogg 108981120
48k m4a 62700449

从上面的列表中下载第二个音频流:

>>> audiostreams[1].download()

获得最佳质量的音频流:

>>> bestaudio = video.getbestaudio()
>>> bestaudio.bitrate
'256'

下载质量最好的音频文件:

>>> bestaudio.download()

显示视频的所有媒体类型(视频+音频,仅视频和仅音频):

>>> allstreams = video.allstreams
>>> for s in allstreams:
...     print(s.mediatype, s.extension, s.quality)
...

normal mp4 1280x720
normal webm 640x360
normal mp4 640x360
normal flv 320x240
normal 3gp 320x240
normal 3gp 176x144
video m4v 1280x720
video webm 1280x720
video m4v 854x480
video webm 854x480
video m4v 640x360
video webm 640x360
video m4v 426x240
video webm 426x240
video m4v 256x144
video webm 256x144
audio m4a 256k
audio ogg 192k
audio m4a 128k
audio ogg 128k
audio m4a 48k

命令行工具(ytdl)的用法

usage: ytdl [-h] [-i] [-s]
            [-t {audio,video,normal,all} [{audio,video,normal,all} ...]]
            [-n N] [-b] [-a]
            url

YouTube Download Tool

positional arguments:
  url                   YouTube video URL to download

optional arguments:
  -h, --help            show this help message and exit
  -i                    Display vid info
  -s                    Display available streams
  -t {audio,video,normal,all} [{audio,video,normal,all} ...]
                        Stream types to display
  -n N                  Specify stream to download by stream number (use -s to
                        list available streams)
  -b                    Download the best quality video (ignores -n)
  -a                    Download the best quality audio (ignores -n)

ytdl示例:

安装:

pip install youtube-dl

下载最佳可用分辨率(-b):

$ ytdl -b "http://www.youtube.com/watch?v=cyMHZVT91Dw"

下载最佳的可用音频流(-a)(注意;不需要完整的URL,仅视频ID就足够了):

$ ytdl -a cyMHZVT91Dw

获取视频信息(-i):

$ ytdl -i cyMHZVT91Dw

列出可用的下载流:

$ ytdl cyMHZVT91Dw

Stream Type    Format Quality         Size
------ ----    ------ -------         ----
1      normal  webm   [640x360]       33 MB
2      normal  mp4    [640x360]       23 MB
3      normal  flv    [320x240]       14 MB
4      normal  3gp    [320x240]        9 MB
5      normal  3gp    [176x144]        3 MB
6      audio   m4a    [48k]            2 MB
7      audio   m4a    [128k]           5 MB
8      audio   ogg    [128k]           5 MB
9      audio   ogg    [192k]           7 MB
10     audio   m4a    [256k]          10 MB

下载mp4 640x360(即流2):

$ ytdl -n2 cyMHZVT91Dw

以256k比特率下载m4a音频流:

$ ytdl -n10 cyMHZVT91Dw

注意:经测试,ytdl 需使用youtube-dl

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值