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;
不幸的是,在尝试配置 MediaCodec
时 KEY_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.
我正在使用 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;
不幸的是,在尝试配置 MediaCodec
时 KEY_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.