2015-10-15 135 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