VideoWriter
创建对象以写入视频文件
说明
使用 VideoWriter 对象根据数组或 MATLAB® 影片创建一个视频文件。该对象包含有关视频的信息以及控制输出视频的属性。您可以使用 VideoWriter 函数创建 VideoWriter 对象,指定其属性,然后使用对象函数写入视频。
创建对象
描述
输入参量
文件名,指定为字符向量或字符串标量。VideoWriter 创建该文件。
VideoWriter 支持以下文件扩展名。
| AVI 文件 |
| Motion JPEG 2000 文件 |
| 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 的值 | 描述 |
|---|---|
|
| 采用无损压缩的 Motion JPEG 2000 文件 |
|
| 使用 Motion JPEG 编码的 AVI 文件 |
|
| Motion JPEG 2000 文件 |
|
| 使用 H.264 编码的 MPEG-4 文件(Windows 7 或更高版本或者 macOS 10.7 及更高版本的系统) |
|
| 包含 |
|
| 包含索引视频的未压缩 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 值。对于 Windows 计算机,FrameRate 的值不应大于每秒 172 帧。
示例: 10
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
此 属性 为只读。
每个视频帧的高度(以像素为单位),指定为标量。writeVideo 方法基于第一帧的尺寸设置 Height 和 Width 的值。
MPEG-4 文件需要可被二整除的帧尺寸。如果 MPEG-4 文件的输入帧高度不是偶数,VideoWriter 将在帧的底部填充一行黑色像素。对于 Windows 系统上的 MPEG-4 文件,允许的值取决于 Windows 的版本。
数据类型: double
无损压缩,指定为数值或逻辑值 1 (true) 或 0 (false)。LosslessCompression 属性只可用于用来写入 Motion JPEG 2000 文件的对象。
如果 LosslessCompression 为 true,则:
writeVideo函数在写入数据时将保证解压缩之后的数据与输入数据相同。VideoWriter将忽略CompressionRatio的任何指定值。
调用 open 之后,无法更改 LosslessCompression 值。
默认情况下,LosslessCompression 对于 'Motion JPEG 2000' 描述文件为 false,对于 'Archival' 描述文件为 true。
Motion JPEG 2000 文件的位深,指定为 [1,16] 范围内的整数。位深是输入图像数据中的最低有效位数。
MJ2BitDepth 只可用于用来写入 Motion JPEG 2000 文件的对象。如果在调用 open 方法之前未指定值,VideoWriter 将基于输入数据类型设置位深。例如,如果 writeVideo 的输入数据为 uint8 或 int8 值的数组,则 MJ2BitDepth 为 8。
示例: 8
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
此 属性 为只读。
视频文件的完整路径,指定为字符向量或字符串标量。
视频质量,指定为 [0,100] 范围内的整数。数字越大,视频质量越高,文件越大。质量数越小,则视频质量越低且文件大小越小。
Quality 仅可用于与 MPEG-4 或 Motion 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 的输入数据为 uint16 或 int16 值的三维数组,则 MJ2BitDepth 的默认值为 16,VideoBitsPerPixel 为 48(位深的三倍)。
数据类型: double
此 属性 为只读。
视频压缩的类型,指定为 'None'、'H.264'、'Motion JPEG' 或 'Motion JPEG 2000'。
此 属性 为只读。
视频格式的 MATLAB 表示形式,指定为字符向量或字符串标量。
对于 Motion JPEG 2000 文件以外的文件类型,VideoWriter 将 VideoFormat 设置为此表的下列值之一。
| 视频格式 |
|
|---|---|
| 未压缩的 AVI、Motion JPEG AVI 或 MPEG-4 文件 | 'RGB24' |
| 包含索引视频的 AVI 文件 | 'Indexed' |
| 包含灰度视频的 AVI 文件 | 'Grayscale' |
对于 Motion JPEG 2000 文件,VideoWriter 基于 MJ2BitDepth 的值和 writeVideo 方法的输入图像数据格式来设置 VideoFormat。例如,如果您未指定 MJ2BitDepth 属性,则 VideoWriter 按如下所示设置格式。
| 图像数据格式 |
|
|---|---|
单波段 uint8 | 'Mono8' |
单波段 int8 | 'Mono8 Signed' |
单波段 uint16 | 'Mono16' |
单波段 int16 | 'Mono16 Signed' |
三波段 uint8 | 'RGB24' |
三波段 int8 | 'RGB24 Signed' |
三波段 uint16 | 'RGB48' |
三波段 int16 | 'RGB48 Signed' |
此 属性 为只读。
每个视频帧的宽度(以像素为单位),指定为数值标量。writeVideo 函数基于第一帧的尺寸设置 Height 和 Width 的值。
MPEG-4 文件需要可被二整除的帧尺寸。如果 MPEG-4 文件的输入帧宽度不为偶数,则 VideoWriter 将在帧的右侧填充一列黑色像素。对于 Windows 系统上的 MPEG-4 文件,允许的值取决于 Windows 的版本。
数据类型: double
对象函数
open | 打开文件以写入视频数据 |
close | 写入视频数据之后关闭文件 |
writeVideo | 将视频数据写入到文件 |
VideoWriter.getProfiles | VideoWriter 支持的描述文件和文件格式 |
示例
按以下步骤将视频写入文件:创建一个随机数据数组,为输出文件创建 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

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

关闭 VideoWriter 对象。
close(v)
扩展功能
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
版本历史记录
在 R2010b 中推出您可以使用 MATLAB backgroundPool 在后台运行 VideoWriter。
R2021b 中的 JPEG 2000 图像与以前版本的 MATLAB 中的 JPEG 2000 图像之间可能存在像素值差异。
另请参阅
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)