跳转到主要内容

读取视频文件并像使用Python中的PIL.Image序列一样查找它们。

项目描述

https://travis-ci.org/rjw57/videosequence.svg?branch=master https://coveralls.io/repos/github/rjw57/videosequence/badge.svg?branch=master https://img.shields.io/pypi/v/videosequence.svg

我经常发现自己需要编写脚本,这些脚本需要从视频文件中加载几个帧,处理它们并将结果保存到磁盘。重复实现视频打开、查找和解码非常痛苦,而复杂的Python绑定对我来说有点过度。

Videosequence是一个库,它隐藏了在Python中将视频文件简单地作为图像序列打开的复杂性。它将视频文件呈现为:一个包含PIL Image-s的Python序列类型。

例如,假设您想从存储在foo.mp4中的视频文件中从第100帧开始转储每个帧

from contextlib import closing
from videosequence import VideoSequence

with closing(VideoSequence("foo.mp4")) as frames:
    for idx, frame in enumerate(frames[100:]):
        frame.save("frame{:04d}.jpg".format(idx))

您可以像加载单个帧一样轻松地从序列中加载。让我们将最后一帧转储到另一个JPEG中

from contextlib import closing
from videosequence import VideoSequence

with closing(VideoSequence("foo.mp4")) as frames:
    frames[-1].save("final-frame.jpg")

总的来说,VideoSequence的行为就像是一个包含视频中每个帧的长列表。

VideoSequence的功能

  • 帧精确查找

  • 单个帧索引(vs[0]vs[-4]等)

  • 查询视频的长度(len(vs)

  • 对帧序列进行切片(vs[100:]vs[-20:]vs[10:20]vs[::2]等)

  • 帧以RGB PIL Image对象表示。

  • 可以与numpy交互。例如np.asarray(vs[0])

VideoSequence的功能不包括

  • 处理没有恰好一个(并且只有一个)视频流的文件

  • 音频

注意事项

  • 逐帧向前迭代速度很快。向后迭代或每次跳过n帧等技巧也可以使用,但可能较慢。

  • 该实现基于GStreamer,因此实际上仅在类似Linux或FreeBSD的现代Unix系统上运行。

  • 必须安装PyGObject introspection库。(见下文。)

安装

请参阅下文中的特定于操作系统的说明。VideoSequence可以从PyPI安装

$ pip install --user videosequence

也可以直接从git安装

$ pip install --user git+git://github.com/rjw57/videosequence

Ubuntu和Debian

要安装Python GObject绑定

$ sudo apt install gir1.2-gstreamer-1.0 gir1.2-gst-plugins-base-1.0 \
                   python-gi python3-gi

如果您有某种现代桌面环境,GStreamer几乎肯定已经安装。如果没有

$ sudo apt install libgstreamer1.0-dev gstreamer1.0-plugins-good

贡献

欢迎提交错误修复和新后端的移植。请在提交新的拉取请求之前,确保通过tox测试仍然通过。新的功能应附带测试,请。

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

videosequence-1.1.0.tar.gz (5.6 kB 查看哈希值)

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面