检索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程序在minecraft中移动minecraft角色的相机   java输出文本文件中的变量   java LazyLoadingException在我尝试从多通关系获取对象时出现   java json rest API的错误:ClassCastException:org。json。无法将JSONObject强制转换为组织。json。杰索纳雷   java BigInteger。C中的intValue()等价物#   java大写所有字符,但不包括带引号字符串中的字符   java获取特殊字符   javascript为什么Selenium中的所有getX()调用都需要这么长时间?   rabbitmq rabbitmq java客户端并行消费   如何使用selenium Java在popover窗口中提取文本   对象在java中构造一类对象   java Room数据库未实现   json JSONObject可以使用java保存大的格式化双值吗?   有时限的旅行推销员   java HttpsURLConnection openConnection查询   java无法使用Spring@Entity注释创建MySQL表   lambda Java 8仅映射到值类型集合   java提供OSGi服务而不实现接口   java单个对象重写对象数组,不确定原因