文档

本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

VideoWriter

写入视频文件

说明

VideoWriter 对象使您能够从数组或 MATLAB® 影片创建视频文件。

您可以使用 VideoWriter 函数与预定义的描述文件创建具有适合特定格式(例如 'Uncompressed AVI''MPEG-4')的属性的 VideoWriter 对象。在创建对象后,您可以使用圆点表示法查看或修改特定属性:

v = VideoWriter('newfile.mj2','Motion JPEG 2000');
v.CompressionRatio = 3;

对于要写入的视频文件,请在打开文件之前修改其属性值。因为在调用 open 函数后,将无法更改属性的值。

创建对象

使用 VideoWriter 函数创建 VideoWriter 对象。

属性

全部展开

此属性为只读

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

  • 未压缩的 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'

此属性为只读

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

数据类型: char

此属性为只读

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

数据类型: 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 的版本。例如,在 Windows 10 上,允许的 Height 在范围 [34,2160] 内。

数据类型: double

无损压缩,指定为 truefalseLosslessCompression 属性只可用于用来写入 Motion JPEG 2000 文件的对象。

如果 LosslessCompressiontrue,则:

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

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

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

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

数据类型: logical

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

此属性为只读

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

数据类型: char

视频质量,指定为 [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'

数据类型: char

此属性为只读

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

对于 Motion JPEG 2000 文件以外的文件类型,VideoFormat 为下列项之一。

视频格式

VideoFormat 的值

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

'RGB24'

包含索引视频的 AVI 文件

'Indexed'

包含灰度视频的 AVI 文件

'Grayscale'

对于 Motion JPEG 2000 文件,VideoFormat 取决于 MJ2BitDepth 的值和 writeVideo 方法的输入图像数据的格式。例如,如果未指定 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 的版本。例如,在 Windows 10 上,允许的 Width 在范围 [34,3872] 内。

数据类型: double

对象函数

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

示例

全部折叠

创建一个 VideoWriter 对象以写入名为 newfile.avi 的 Motion JPEG AVI 文件。

v = VideoWriter('newfile.avi');

打开要写入的文件,并将 300×300 矩阵的数据写入该文件。

open(v)
writeVideo(v,rand(300))

关闭文件。

close(v)

创建一个包含来自示例静态图像 peppers.png 的数据的数组。

A = imread('peppers.png');

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

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

打开要写入的文件。

open(v)

A 中的图像写入视频文件。

writeVideo(v,A)

关闭文件。

close(v)

将一序列帧写入名为 peaks.avi 的 AVI 压缩文件。

准备新文件。

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

生成初始数据并设置坐标区和图窗属性。

Z = peaks;
surf(Z); 
axis tight manual 
set(gca,'nextplot','replacechildren'); 

创建一组帧并将每个帧写入该文件。

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

close(v);

另请参阅

在 R2010b 中推出

此主题对您有帮助吗?