MediaCodec亚秒视频长度
问题描述:
我使用MediaCodec
将图像编码为视频。要求视频具有亚秒的长度(例如3.5秒长)。MediaCodec亚秒视频长度
我的想法是为了达到这个目的,就是要确定像这样的视频帧率。
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;
不幸的是当试图以小于1的一个IllegalStateException
KEY_FRAME_RATE
配置MediaCodec
。所以这种方法不起作用。是否有可能使用MediaCodec
来创建一个视频,其运行时间以几分之一秒结束?
答
视频的长度和视频的帧速率无关。
带有7帧的3.5秒视频以2 fps运行,而不是0.7 fps。您应该将“每秒帧数”计算为“帧/秒”,而不是seconds/numFrames
。
在任何情况下,帧速率值实际上是deprecated in API 21:
注意:在棒棒糖,格式,以MediaCodecList.findDecoder/EncoderForFormat不能包含的帧速率。使用format.setString(MediaFormat.KEY_FRAME_RATE,null)清除格式中的任何现有帧速率设置。
感谢您的回复。因此,由于不推荐使用KEY_FRAME_RATE,因此如何编码预定长度的视频。我正在尝试从用户生成的静止图像创建视频。 – redwoolf
如果您要从单个静止图像创建视频,则需要对两个帧进行编码,将显示时间间隔设置为3.5秒。您可以对同一帧进行两次编码,或将第二帧编码为空白帧,以便在“播放”结束时将其重置为黑色。 – fadden