scikit-video是一个python视频处理库,可以方便调用各种视频处理算法

读写视频

skvideo.io是使用FFmpeg/LibAV作为后端的视频读写模块。利用可用的后端,它会用合适的探测工具 (ffprobe, avprobe, or even mediainfo)来解析视频的元数据。

1、读视频

使用skvideo.io.vread来将任意视频数据作为一个单独的ndarry加载入内存(这里是bigbuckbunny视频)。注意,这个函数假定你有足够大的内存,所有尽量使用小的视频。

import skvideo.io
import skvideo.datasets
videodata = skvideo.io.vread(skvideo.datasets.bigbuckbunny())
print(videodata.shape)

运行这段代码会打印输出:

(132, 720, 1280, 3)

使用skvideo.io.vreader可以逐帧加载任意视频(这里是bigbuckbunny视频)。这个函数可以用来加载大文件,而且它通常比把视频加载为一个单独的ndarry要快。但是它需要在加载时处理每一帧。如下代码片段:

import skvideo.io
import skvideo.datasets
videogen = skvideo.io.vreader(skvideo.datasets.bigbuckbunny())
for frame in videogen:print(frame.shape)

它的输出为:

(720, 1280, 3)
(720, 1280, 3).........
(720, 1280, 3)

有时特定的用例需要微调(fine tuning)FFmpeg的读入参数。你可以使用skvideo.io.FFmpegReader

import skvideo.io
import skvideo.datasets# here you can set keys and values for parameters in ffmpeg
inputparameters = {}
outputparameters = {}
reader = skvideo.io.FFmpegReader(skvideo.datasets.bigbuckbunny(),inputdict=inputparameters,outputdict=outputparameters)# iterate through the frames
accumulation = 0
for frame in reader.nextFrame():# do something with the ndarray frameaccumulation += np.sum(frame)

例如, FFmpegReader默认返回的是RGB类型,但是有时你想使用其他颜色空间,你可以在outputparameters中设置合适的 key/values值。因为FFmpeg输出被导入stdin,你可以在这使用所有的FFmpeg 指令。inputparameters对那些没有头信息的原始视频信号很有用。

2、写视频

将一个ndarry写为视频文件可以使用skvideo.io.write

import skvideo.io
import numpy as npoutputdata = np.random.random(size=(5, 480, 680, 3)) * 255
outputdata = outputdata.astype(np.uint8)skvideo.io.vwrite("outputvideo.mp4", outputdata)

通常写入视频需要微调 FFmpeg的写入参数以选择编码器、帧率、位率等。你可以使用skvideo.io.FFmpegWriter实现这些。

import skvideo.io
import numpy as npoutputdata = np.random.random(size=(5, 480, 680, 3)) * 255
outputdata = outputdata.astype(np.uint8)writer = skvideo.io.FFmpegWriter("outputvideo.mp4")
for i in xrange(5):writer.writeFrame(outputdata[i, :, :, :])
writer.close()

3、读视频元信息

使用skvideo.io.ffprobe读取视频元信息。如下所示:

import skvideo.io
import skvideo.datasets
import json
metadata = skvideo.io.ffprobe(skvideo.datasets.bigbuckbunny())
print(metadata.keys())
print(json.dumps(metadata["video"], indent=4))

skvideo.io.ffprobe返回一个字典,可以把它传入json.dumps来更好的显示,其输出如下:

[u'audio', u'video']
{"@index": "0","@codec_name": "h264","@codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10","@profile": "Main","@codec_type": "video","@codec_time_base": "1/50","@codec_tag_string": "avc1","@codec_tag": "0x31637661","@width": "1280","@height": "720","@coded_width": "1280","@coded_height": "720","@has_b_frames": "0","@sample_aspect_ratio": "1:1","@display_aspect_ratio": "16:9","@pix_fmt": "yuv420p","@level": "31","@chroma_location": "left","@refs": "1","@is_avc": "1","@nal_length_size": "4","@r_frame_rate": "25/1","@avg_frame_rate": "25/1","@time_base": "1/12800","@start_pts": "0","@start_time": "0.000000","@duration_ts": "67584","@duration": "5.280000","@bit_rate": "1205959","@bits_per_raw_sample": "8","@nb_frames": "132","disposition": {"@default": "1","@dub": "0","@original": "0","@comment": "0","@lyrics": "0","@karaoke": "0","@forced": "0","@hearing_impaired": "0","@visual_impaired": "0","@clean_effects": "0","@attached_pic": "0"},"tag": [{"@key": "creation_time","@value": "1970-01-01 00:00:00"},{"@key": "language","@value": "und"},{"@key": "handler_name","@value": "VideoHandler"}]
}

scikit-video读写视频相关推荐

  1. OpenCV读写视频文件解析(二)

    OpenCV读写视频文件解析(二) VideoCapture::set 设置视频捕获中的属性. C++: bool VideoCapture::set(int propId, double value ...

  2. OpenCV读写视频文件解析

    OpenCV读写视频文件解析 一.视频读写类 视频处理的是运动图像,而不是静止图像.视频资源可以是一个专用摄像机.网络摄像头.视频文件或图像文件序列. 在OpenCV 中,VideoCapture 类 ...

  3. python调用opencv处理视频_Python调用OpenCV读写视频

    最近因为经常对视频进行操作,所以记录下Python用opencv来读写视频的方法. 一.opencv读视频 python调用opencv来读视频比较简单,可以直接调用cv2.VideoCapture来 ...

  4. 安卓微信下video退出视频全屏方法

    安卓微信下video退出视频全屏方法 在做h5项目的时候,安卓video全屏模式退出方案: <script>var video = document.getElementById('vid ...

  5. ios html5 自动全屏播放,禁止iPhone Safari video标签视频自动全屏的办法

    最近做一个移动端微信页面项目,在微信页面中有视频播放,但是需要禁止IOS的自动全屏播放(前提必须使用video标签). 如: 在iPhone safari 点击视频会弹出播放器进行全屏播放. 在网上看 ...

  6. video.js视频高度自适应解决方法

    video.js视频高度自适应解决方法 1.引入两个外部文件,或者下载到本地 <link href="https://unpkg.com/video.js/dist/video-js. ...

  7. Video Combiner(视频合并器) v1.1绿色免费版

    Video Combiner是一款Windows平台下的全格式视频合并工具软件,它可以一次性将多个视频格式文件合并成一个单独的视频文件,并且有多种自适应屏幕尺寸可以选择. 这款合并器支持苹果iPhon ...

  8. Boilsoft Video Splitter(视频无损分割)V8.1.4开心版 全网独一

    Boilsoft Video Splitter是一款功能强大的无损视频剪辑(分割)器,可将大型AVI,MPEG,RM,ASF,WMV,3GP,MKV,FLV或MP4视频文件分割,剪切或修剪为较小的视频 ...

  9. 鼠标滚动时video中视频变为静音的问题

    现象描述, 默认进入页面中,视频是静音播放,使用了muted. <video controls autoplay muted loop style="width:500px;" ...

最新文章

  1. HDU 4391 Paint The Wall 段树(水
  2. 含有min()函数的栈,各种操作时间复杂度为O(1)
  3. SAP 调用外部系统
  4. PHP的SPFA,由于是之前的c代码,风格你懂的........(夹带php队列实现)
  5. java stream 原理
  6. HDU1598【最小生成树拓展】
  7. jQuery实现列表数据从右至左滚动(类似弹幕)
  8. 第三章 Python函数
  9. 安装svn显示目标计算机积极拒绝_【SVN】Error running context: 由于目标计算机积极拒绝,无法连接...
  10. (73)FPGA面试题-Verilog实现5人表决器
  11. java解析apache日志_使用Apache Log4j 2解析日志条目
  12. HTML+CSS 轮播图 电商网站注册界面 抽屉主页头部界面
  13. Phonegap VS AppCan
  14. 11. CSS 文本属性
  15. 解决vagrant up出现:An error occurred while downloading the remote file. The errormessage
  16. matlab2019b重装导致mjs安装失败问题解决
  17. 寒武纪笔试——嵌入式
  18. 计算机网络实验(思科模拟器Cisco Packet Tracer)配置静态路由使三台pc机网络互通
  19. java智能家居_基于JAVA的智能家居控制系统的设计(毕业设计).doc
  20. 光眼图和电眼图_直调光模块中ER和OMA

热门文章

  1. c ref java_使用JNA将C数组返回给Java
  2. C语言 qsort的用法 模拟EXCEL排序
  3. Android-使用SoundPool实现语音计算器
  4. wbin笔记本商务版博通机型装(原版黑苹果)单MacOS流程记录(备忘)
  5. RedMonk最新编程语言排行榜;Spring 框架现 RCE 漏洞……|叨资讯
  6. 尼康d850相机参数测试软件,新功能介绍二:景深合成与自动调焦_尼康 D850_数码影像评测-中关村在线...
  7. 直播带货中被禁播,我是触犯了哪些直播规则丨国仁网络资讯
  8. JAVA 实现《捕鱼达人》游戏
  9. python 字幕文件ass格式转换成srt格式
  10. 也许风停了,我们才能心平气和的看待一家公司