2015-10-15 50 views
0

我使用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的一个IllegalStateExceptionKEY_FRAME_RATE配置MediaCodec。所以这种方法不起作用。是否有可能使用MediaCodec来创建一个视频,其运行时间以几分之一秒结束?

回答

4

视频的长度和视频的帧速率无关。

带有7帧的3.5秒视频以2 fps运行,而不是0.7 fps。您应该将“每秒帧数”计算为“帧/秒”,而不是seconds/numFrames

在任何情况下,帧速率值实际上是deprecated in API 21

注意:在棒棒糖,格式,以MediaCodecList.findDecoder/EncoderForFormat不能包含的帧速率。使用format.setString(MediaFormat.KEY_FRAME_RATE,null)清除格式中的任何现有帧速率设置。

+0

感谢您的回复。因此,由于不推荐使用KEY_FRAME_RATE,因此如何编码预定长度的视频。我正在尝试从用户生成的静止图像创建视频。 – redwoolf

+2

如果您要从单个静止图像创建视频,则需要对两个帧进行编码,将显示时间间隔设置为3.5秒。您可以对同一帧进行两次编码,或将第二帧编码为空白帧,以便在“播放”结束时将其重置为黑色。 – fadden