Python视频处理库:scikit-video

官网

安装

$ sudo pip install sk-video

视频的读写

读视频

import skvideo.io
import skvideo.datasets
import numpy as np 

# read video as a single ndarray
videodata = skvideo.io.vread(skvideo.datasets.bigbuckbunny())
print(videodata.shape)

# read video frame by frame
videogen = skvideo.io.vreader(skvideo.datasets.bigbuckbunny())
for frame in videogen:
    print(frame.shape)

# 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 frame
    accumulation += np.sum(frame)

写视频

import skvideo.io
import skvideo.datasets
import numpy as np 

# write an ndarray to a video file
outputdata = np.random.random(size=(30,480,680,3)) * 255
outputdata = outputdata.astype(np.uint8)
skvideo.io.vwrite("outputvideo.mp4", outputdata)

# FFmpeg writer (报错)
outputdats = np.random.random(size=(5,480,680,3)) * 255
outputdata = outputdata.astype(np.uint8)
writer = skvideo.io.FFmpegWriter("outputvideoplus.mp4",(5,480,640,3))
for i in xrange(5):
    writer.writeFrame(outputdata[i,:,:,:])
writer.close()

ffmpeg写报错,writer = skvideo.io.FFmpegWriter("outputvideoplus.mp4",(5,480,640,3)),TypeError: 'tuple' object does not support item assignment

读视频元数据(metadata)

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

运动

import skvideo.io 
import skvideo.motion
import skvideo.datasets

videodata = skvideo.io.vread(skvideo.datasets.bigbuckbunny(),num_frames=5)


motion = skvideo.motion.blockMotion(videodata)

print(videodata.shape)
print(motion.shape)

# compensate the video
compensate = skvideo.motion.blockComp(videodata, motion)

# write
skvideo.io.vwrite("compensate.mp4", compensate)

测量

import skvideo.io 
import skvideo.motion
import skvideo.datasets
import skvideo.measure

# compute vectors from bigbuckbunny
videodata = skvideo.io.vread(skvideo.datasets.bigbuckbunny(),num_frames=5,as_grey=True)
# videodata = skvideo.io.vread(skvideo.datasets.bigbuckbunny())
# skvideo.io.vwrite("origin.mp4", videodata)

motion = skvideo.motion.blockMotion(videodata)

print(videodata.shape)
print(motion.shape)

# compensate the video
compensate = skvideo.motion.blockComp(videodata, motion)

# write
skvideo.io.vwrite("compensate.mp4", compensate)

print(skvideo.measure.ssim(videodata,compensate))
print(skvideo.measure.psnr(videodata,compensate))
print(skvideo.measure.mse(videodata,compensate))

读写图片

import skvideo.io 

# a frame from the bigbuckbunny sequence
vid = skvideo.io.vread('/home/shuai/python_test/output.png')
T, M, N, C = vid.shape

print("Number of frames: %d" % (T,))
print("Number of rows: %d" % (M,))
print("Number of cols: %d" % (N,))
print("Number of channels: %d" % (C,))

# upsacle by a factor of 2
vid = skvideo.io.vread('/home/shuai/python_test/output.png',
                        outputdict={
                            "-sws_flags":"bilinear",
                            "-s":"2560x1440"
                        })
T, M, N, C = vid.shape

print("Number of frames: %d" % (T,))
print("Number of rows: %d" % (M,))
print("Number of cols: %d" % (N,))
print("Number of channels: %d" % (C,))

skvideo.io.vwrite("outputplus.png", vid)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 0 概述 FFmpeg是一套领先的音视频多媒体处理开源框架,采用LGPL或GPL许可证。它提供了对音视频的采集、编...
    但行耕者阅读 11,889评论 0 19
  • 1.分离视频音频流 ffmpeg -i input_file -vcodec copy -an output_fi...
    XLAccount阅读 8,212评论 0 8
  • 前言 如此强大的FFmpeg,能够实现视频采集、视频格式转化、视频截图、视频添加水印、视频切片、视频录制、视频推流...
    骚之哈塞給阅读 25,901评论 6 39
  • 前言 如此强大的FFmpeg,能够实现视频采集、视频格式转化、视频截图、视频添加水印、视频切片、视频录制、视频推流...
    sillen阅读 10,751评论 2 45
  • 时光荏苒,物是人非。 也明白一切不会重来。 也明白一切不会继续。 也明白应该各自安好。 也明白一直形同陌路。 终于...
    花花林娜阅读 1,108评论 0 0

友情链接更多精彩内容