用系统自带 Media Foundation 写入 MP4(H.264 视频 + AAC 音频)
创建 MP4 写入器,失败返回 null,错误信息。
参数 @options 可用字段:
width,height:视频尺寸(必须是偶数),省略则只写音频;
fps:帧率,默认 30,可写 29.97 或 {30000,1001};
quality:画质 1~100,默认 80(固定 QP:关键帧 12、其他帧 20),文件大小随画面复杂度变化;
低于 80 时主要降低运动内容的画质,关键帧 QP 不高于 14,静止文字始终清晰;
videoBitrate:改为按平均码率(bps)编码(VBR),与 quality 只能指定一个;
profile:"high"(默认)、"main"、"baseline";
gop:关键帧间隔(帧数),默认 2 秒;
hardware:是否允许硬件编码器,默认 false(软件编码);
encoder:编码器参数表,键为 CODECAPI_ 名称(可省略前缀),覆盖以上默认设置;
audio:音频参数 {sampleRate=48000;channels=2;bitrate=192000},省略则不写音频
实际使用的 AAC 码率
已写入的音频采样帧数
已写入的音频时长(秒)
音频声道数
结束写入(Finalize)并释放资源,成功返回 true。
必须调用,否则 MP4 文件不完整(对象被回收时也会自动调用)
帧率(数值)
已写入的视频帧数
帧率分数 {分子,分母}
视频高度
输出文件完整路径
视频码率控制方式:
{mode="quality";quality;qpI;qpP}、{mode="bitrate";bitrate},
encoder 参数里指定了 AVEncCommonRateControlMode 时为 {mode="custom"}
音频采样率
IMFSinkWriter 接口对象(高级用法),关闭后为 null
已写入的视频时长(秒)
视频宽度
写入音频,成功返回 true,失败返回 null,错误信息。
参数 @pcm 为 int16 交错 PCM(buffer 或字符串),传入指针时必须用 @size 指定字节数。
可分块多次写入,时间戳按已写入的采样数自动计算。
建议每写一帧视频就写入这一帧时长的音频
写入一帧,成功返回 true,失败返回 null,错误信息。
参数 @frame 可以是 gdip.bitmap(尺寸必须与视频一致,建议 PARGB 格式,透明部分按黑底合成),
也可以是自上而下、B,G,R,X 字节序、步幅为 宽×4 的 buffer、字符串或指针。
可选参数 @repeatCount 指定重复写入的帧数(共用同一份数据),默认 1。
时间戳按帧号自动计算