检索YouTube的含量和元数据

paf的Python项目详细描述


https://img.shields.io/pypi/v/Pafy.svghttps://img.shields.io/pypi/dm/Pafy.svghttps://img.shields.io/coveralls/np1/pafy/develop.svgCode Healthhttps://travis-ci.org/mps-youtube/pafy.svg?branch=developWheel Status

功能

  • 检索元数据,如viewcount、duration、rating、author、thumbnail、keywords
  • 按要求的分辨率/比特率/格式/文件大小下载视频或音频
  • 用于直接从命令行下载的命令行工具(YTDL)
  • 检索用于在VLC或MPlayer等播放器中传输视频的URL
  • 适用于年龄限制的视频和不可嵌入的视频
  • 小型、独立、单个可导入模块文件(pafy.py)
  • 选择最高质量的流进行下载或流式传输
  • 仅下载M4V或WebM格式的视频(无音频)
  • 仅下载ogg或m4a格式的音频(无视频)
  • 检索播放列表和播放列表元数据
  • 适用于Python2.6+和3.3+
  • 可选地依赖于youtube dl(推荐;更稳定)

文档

完整文档可在http://pythonhosted.org/pafy

用法示例

下面是如何在您自己的python代码中使用该模块。用于命令行工具 (YTDL)说明,详见下文

>>> importpafy

从YouTube URL创建视频实例:

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

获取某些属性:

>>> video.title'Richard Jones: Introduction to game programming - PyCon 2014'

>>> video.rating5.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>>> forsinstreams:... print(s)...normal:mp4@1280x720
normal:webm@640x360
normal:mp4@640x360
normal:flv@320x240
normal:3gp@320x240
normal:3gp@176x144

显示所有格式、文件大小及其下载URL:

>>> forsinstreams:... 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')

获取URL,以便在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>>> forainaudiostreams:... 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>>> forsinallstreams:... 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

安装

pafy可以使用pip

$ [sudo] pip install pafy

如果不想在系统范围内安装,也可以使用virtualenv

$ virtualenv venv
$ source venv/bin/activate
$ pip install pafy

命令行工具(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示例

下载可用的最佳分辨率(-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

IRC

MPS YouTube IRC频道(自由节点上的MPS YouTube)可用于讨论Pafy。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用CSPRNG中的序列种子PRNG安全吗?   java如何使JTable列大小与内容精确(或紧密)匹配?   java Android textview具有两种不同大小的文本   java在任意事物的列表(数组)中创建关联的最佳方法是什么?   java保存可扩展字符串?   java成员类(内部类)如何访问外部类的实例变量?   java使用Android 6.0(API级别23)使用rest的最佳方式是什么   java为什么我会收到“学习记录”。Student@25a43blb'尝试显示链接列表中的所有对象时?   java如何将SVG文本转换为SVG路径?   java Paypal返回URL参数支付状态   java Libgdx:导出到可运行Jar   java JPA获取连接实体的最小/最大属性   附加到类型变量的java编号?   java Object[]到底是什么?   java如何在安卓中的片段和活动之间共享数据   java使用MinGW为windows构建linux库   java将变量值传递给eval函数   java仅在转换完成时使方法返回   Java二维数组对角线