MediaCodec 亚秒级视频长度

MediaCodec sub-second video length

我正在使用 MediaCodec 将图像编码成视频。要求视频可以具有亚秒级长度(例如 3.5 秒长)。

为了实现这一点,我的想法是像这样确定视频帧率。

int lengthInMillis = 3500;
float seconds = lengthInMillis / 1000f;
int ordinal = (int) seconds; // ordinal == 3
float point = seconds - ordinal;
float numFrames = seconds / point; // numFrames == 7
float fps = seconds / numFrames; // fps = 0.7
this.numFrames = (int) numFrames;

不幸的是,在尝试配置 MediaCodecKEY_FRAME_RATE 小于 1 和 IllegalStateException。所以这个方法是行不通的。是否可以使用 MediaCodec 创建一个 运行 时间在几分之一秒内结束的视频?

视频的长度和视频的帧率没有关系。

一个 7 帧的 3.5 秒视频是 运行 2 fps,而不是 0.7 fps。您应该将 "frames per second" 计算为 "frames / seconds",而不是 seconds / numFrames

无论如何,帧率值实际上是deprecated in API 21:

Note: On LOLLIPOP, the format to MediaCodecList.findDecoder/EncoderForFormat must not contain a frame rate. Use format.setString(MediaFormat.KEY_FRAME_RATE, null) to clear any existing frame rate setting in the format.