解码视频文件
以下代码展示了如何解流、解码并遍历一个视频的所有帧。该视频可以是任何有效的视频格式。mpegCoder.MpegDecoder
可以自动识别视频所用的编码器(codec)。
decoding.py
import mpegCoderd = mpegCoder.MpegDecoder()opened = d.FFmpegSetup('test-video.mp4')if opened: # 如果编码器没有正常载入,停止后续步骤。 gop = True while gop is not None: gop = d.ExtractGOP() # 提取当前的画面组。d.clear() # 关闭输入视频。
在每个循环里,都会提取出一个画面组(亦称为图像组,GOP)。画面组是由连续的数帧构成的集合,同时也是视频压缩编码算法的最小单位。在mpegCoder
里,图像组被处理成了一个四维数组np.ndarray
。其形状(N, H, W, C)
分别代表帧数、高度、宽度、以及通道数。每一帧在返还给用户的时候,都已经转移到了RGB (uint8
)空间里。如果视频读取到了文件尾,返回的gop
则会是None
。
解码并缩放
用户可以通过设置MpegDecoder
来缩放视频帧。例如,以下的代码将会确保无论原视频尺寸如何,返回的帧都是720x486的尺寸。
...
d = mpegCoder.MpegDecoder()
d.setParameter(widthDst=720, heightDst=486)
opened = d.FFmpegSetup('test-video.mp4')
...