跳到正文
版本:3.1.0

解码视频文件

以下代码展示了如何解流、解码并遍历一个视频的所有帧。该视频可以是任何有效的视频格式。mpegCoder.MpegDecoder可以自动识别视频所用的编码器(codec)。

decoding.py
import mpegCoder

d = 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')
...