Main Content

VideoWriter

创建对象以写入视频文件

说明

使用 VideoWriter 对象根据数组或 MATLAB® 影片创建一个视频文件。该对象包含有关视频的信息以及控制输出视频的属性。您可以使用 VideoWriter 函数创建 VideoWriter 对象,指定其属性,然后使用对象函数写入视频。

创建对象

描述

v = VideoWriter(filename) 创建一个 VideoWriter 对象以将视频数据写入采用 Motion JPEG 压缩技术的 AVI 文件。

示例

v = VideoWriter(filename,profile) 还应用一组适合特定文件格式(例如 'MPEG-4''Uncompressed AVI')的属性。

示例

输入参量

全部展开

文件名,指定为字符向量或字符串标量。VideoWriter 创建该文件。

VideoWriter 支持以下文件扩展名。

.avi

AVI 文件

.mj2

Motion JPEG 2000 文件

.mp4.m4v

MPEG-4 文件(采用 Windows® 7 或更高版本或 macOS 10.7 及更高版本的系统)

如果未指定有效的文件扩展名,VideoWriter 将追加扩展名 .avi.mj2.mp4,具体取决于 profile 参量的值。如果未指定 profile 的值,则 VideoWriter 将创建一个 Motion JPEG 压缩的 AVI 文件并且扩展名为 .avi

示例: 'myFile.avi'

示例: '../dir/videos/myFile.mj2'

文件类型,指定为下列值之一。

profile 的值描述

'Archival'

采用无损压缩的 Motion JPEG 2000 文件

'Motion JPEG AVI'

使用 Motion JPEG 编码的 AVI 文件

'Motion JPEG 2000'

Motion JPEG 2000 文件

'MPEG-4'

使用 H.264 编码的 MPEG-4 文件(Windows 7 或更高版本或者 macOS 10.7 及更高版本的系统)

'Uncompressed AVI'

包含 RGB24 视频的未压缩 AVI 文件

'Indexed AVI'

包含索引视频的未压缩 AVI 文件

'Grayscale AVI'

包含灰度视频的未压缩 AVI 文件

profile 设置视频属性(例如 VideoCompressionMethod)的默认值。

属性

全部展开

VideoWriter 对象包含控制输出视频的属性。您可以使用 VideoWriter 函数与预定义的描述文件创建一个 VideoWriter 对象,并为其设置适合特定格式(例如 'Uncompressed AVI''MPEG-4')的属性。例如,您可以使用 Motion JPEG AVI 描述文件创建一个 VideoWriter 对象并为 Quality 属性赋值。

v = VideoWriter('newfile.avi','Motion JPEG AVI');
v.Quality = 95;

VideoWriter 对象调用 open 函数后,将无法更改属性的值。因此,请在打开视频文件进行写入之前修改属性值。

此 属性 为只读。

每个输出视频帧中的颜色通道数,指定为正整数:

  • 未压缩的 AVI、Motion JPEG AVI 和 MPEG-4 文件具有三个颜色通道。

  • 索引和灰度 AVI 文件具有一个颜色通道。

  • 对于 Motion JPEG 2000 文件,通道数取决于 writeVideo 函数的输入数据:单色数据为一个通道,彩色数据为三个通道。

数据类型: double

视频文件的颜色信息,指定为具有三列和最大为 256 行的数值矩阵。矩阵中的每一行均使用 RGB 三元组定义一种颜色。RGB 三元组是包含三个元素的行向量,其元素分别指定颜色中红、绿、蓝分量的强度。强度必须处于范围 [0,1] 中。

您可以在调用 open 之前显式设置颜色图,或在写入第一帧时使用影片帧结构体的 colormap 字段对其进行设置。

Colormap 属性仅应用于用来写入索引 AVI 文件的对象。

示例: colormap(summer(256))

数据类型: double | uint8

目标压缩比,指定为大于 1 的整数。压缩比是指输入图像中的字节数与压缩图像中的字节数之间的比率。视频数据将会尽可能进行压缩,最高可达到指定的目标。

CompressionRatio 只可用于用来写入 Motion JPEG 2000 文件的对象。调用 open 之后,无法更改 CompressionRatio 值。如果之前将 LosslessCompression 设置为 true,则设置 CompressionRatio 将生成错误。

示例: 5

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

此 属性 为只读。

输出文件的持续时间(以秒为单位),指定为标量值。

数据类型: double

此 属性 为只读。

要写入的文件的类型,指定为 'avi''mp4''mj2'

此 属性 为只读。

文件的名称,指定为字符向量或字符串标量。

此 属性 为只读。

写入视频文件的帧数,指定为整数。

数据类型: double

视频的播放速率(每秒帧数),指定为正数。

调用 open 之后,无法更改 FrameRate 值。

示例: 10

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

此 属性 为只读。

每个视频帧的高度(以像素为单位),指定为标量。writeVideo 方法基于第一帧的尺寸设置 HeightWidth 的值。

MPEG-4 文件需要可被二整除的帧尺寸。如果 MPEG-4 文件的输入帧高度不是偶数,VideoWriter 将在帧的底部填充一行黑色像素。对于 Windows 系统上的 MPEG-4 文件,允许的值取决于 Windows 的版本。

数据类型: double

无损压缩,指定为数值或逻辑值 1 (true) 或 0 (false)。LosslessCompression 属性只可用于用来写入 Motion JPEG 2000 文件的对象。

如果 LosslessCompressiontrue,则:

  • writeVideo 函数在写入数据时将保证解压缩之后的数据与输入数据相同。

  • VideoWriter 将忽略 CompressionRatio 的任何指定值。

调用 open 之后,无法更改 LosslessCompression 值。

默认情况下,LosslessCompression 对于 'Motion JPEG 2000' 描述文件为 false,对于 'Archival' 描述文件为 true

Motion JPEG 2000 文件的位深,指定为 [1,16] 范围内的整数。位深是输入图像数据中的最低有效位数。

MJ2BitDepth 只可用于用来写入 Motion JPEG 2000 文件的对象。如果在调用 open 方法之前未指定值,VideoWriter 将基于输入数据类型设置位深。例如,如果 writeVideo 的输入数据为 uint8int8 值的数组,则 MJ2BitDepth8

示例: 8

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

此 属性 为只读。

视频文件的完整路径,指定为字符向量或字符串标量。

视频质量,指定为 [0,100] 范围内的整数。数字越大,视频质量越高,文件越大。质量数越小,则视频质量越低且文件大小越小。

Quality 仅可用于与 MPEG-4Motion JPEG AVI 描述文件相关联的对象。调用 open 之后,无法更改 Quality 值。

示例: 50

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

此 属性 为只读。

每个输出视频帧中每像素的位数,指定为数值标量。

AVI 文件(包含真彩色视频)、Motion JPEG AVI 和 MPEG-4 文件均为每像素有 24 位(三个颜色波段,每个都为 8 位)。

索引和灰度 AVI 文件为每像素 8 位。

对于 Motion JPEG 2000 文件,每像素的位数取决于 MJ2BitDepth 的值和图像数据的波段数。例如,如果 writeVideo 的输入数据为 uint16int16 值的三维数组,则 MJ2BitDepth 的默认值为 16VideoBitsPerPixel48(位深的三倍)。

数据类型: double

此 属性 为只读。

视频压缩的类型,指定为 'None''H.264''Motion JPEG''Motion JPEG 2000'

此 属性 为只读。

视频格式的 MATLAB 表示形式,指定为字符向量或字符串标量。

对于 Motion JPEG 2000 文件以外的文件类型,VideoWriterVideoFormat 设置为此表的下列值之一。

视频格式

VideoFormat 的值

未压缩的 AVI、Motion JPEG AVI 或 MPEG-4 文件

'RGB24'

包含索引视频的 AVI 文件

'Indexed'

包含灰度视频的 AVI 文件

'Grayscale'

对于 Motion JPEG 2000 文件,VideoWriter 基于 MJ2BitDepth 的值和 writeVideo 方法的输入图像数据格式来设置 VideoFormat。例如,如果您未指定 MJ2BitDepth 属性,则 VideoWriter 按如下所示设置格式。

图像数据格式

VideoFormat 的值

单波段 uint8'Mono8'
单波段 int8'Mono8 Signed'
单波段 uint16'Mono16'
单波段 int16'Mono16 Signed'
三波段 uint8'RGB24'
三波段 int8'RGB24 Signed'
三波段 uint16'RGB48'
三波段 int16'RGB48 Signed'

此 属性 为只读。

每个视频帧的宽度(以像素为单位),指定为数值标量。writeVideo 函数基于第一帧的尺寸设置 HeightWidth 的值。

MPEG-4 文件需要可被二整除的帧尺寸。如果 MPEG-4 文件的输入帧宽度不为偶数,则 VideoWriter 将在帧的右侧填充一列黑色像素。对于 Windows 系统上的 MPEG-4 文件,允许的值取决于 Windows 的版本。

数据类型: double

对象函数

open打开文件以写入视频数据
close写入视频数据之后关闭文件
writeVideo将视频数据写入到文件
VideoWriter.getProfilesVideoWriter 支持的描述文件和文件格式

示例

全部折叠

按以下步骤将视频写入文件:创建一个随机数据数组,为输出文件创建 VideoWriter 对象,然后将该数组写入视频。

创建一个 300×300 的数据矩阵。

A = rand(300);

创建一个 VideoWriter 对象以写入名为 newfile.avi 的 Motion JPEG AVI 文件,然后打开该对象以进行写入。

v = VideoWriter("newfile.avi");
open(v)

将数据矩阵 A 写入视频文件。

writeVideo(v,A)

关闭 VideoWriter 对象。

close(v)

使用指定的描述文件创建一个视频对象,创建包含一个 RGB 图像的数组,然后将该数组写入视频文件。

为 RGB24 视频的新的未压缩 AVI 文件创建一个 VideoWriter 对象。

v = VideoWriter("newfile.avi","Uncompressed AVI");

打开要写入的文件。

open(v)

创建一个包含来自示例静态图像 peppers.png 的数据的数组。将 A 中的图像写入视频文件。

A = imread("peppers.png");
writeVideo(v,A)

关闭 VideoWriter 对象。

close(v)

设置坐标区和图窗属性,以生成视频帧。

Z = peaks;
surf(Z);
axis tight manual

Figure contains an axes object. The axes object contains an object of type surface.

set(gca,"NextPlot","replacechildren")

为输出视频文件创建 VideoWriter 对象并打开该对象以进行写入。

v = VideoWriter("peaks.avi");
open(v)

生成一组帧,从图窗中获取每个帧,然后将每一帧写入文件。

for k = 1:20
   surf(sin(2*pi*k/20)*Z,Z)
   frame = getframe(gcf);
   writeVideo(v,frame)
end

Figure contains an axes object. The axes object contains an object of type surface.

关闭 VideoWriter 对象。

close(v)

扩展功能

版本历史记录

在 R2010b 中推出

全部展开

另请参阅

|