检索YouTube的含量和元数据

livingbio-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

或者,您可以获取pafy.py文件并将其导入到python中 代码:

wget https://raw.githubusercontent.com/np1/pafy/master/pafy/pafy.py

命令行工具(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如何复制二维字符串数组?   java Realworld参数优化   输入创建一个Java程序,读取。txt并标识三角形边长   java Apache HttpClient上传后文件无法与MultipartEntityBuilder上传一起使用   java如何从单独的类文件中随机选择两个枚举值   Java获取两个正则表达式之间所有字符串的最佳方法?   java如何将按钮链接到微调器?   java改造2.0:如何映射不同类型的对象   java如何检查Antlr3中的数字范围?   java使用JNDI查找EJB Bean   java构造函数字符串、字符串、int、int、Optional<>在spring boot中未定义   java如何使用jruby(使用jetty运行)创建servlet?   JavaFX:为什么在背景改变之前我必须按下按钮几次?   java可以为违反映射契约的映射生成重复的JSON对象属性名吗?   JavaJSOUP从网站获取某些属性   Eclipse:如何使java文件夹显示为树?   如何在Java中从Matcher获取多个正则表达式组?   构造函数中带有参数的lambda Java 8供应商   java是否可以在ExtJS 3.2中对日期进行自定义排序