【问题标题】:MediaCodec sub-second video lengthMediaCodec 亚秒视频长度
【发布时间】:2015-10-16 23:37:21
【问题描述】:

我正在使用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;

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

【问题讨论】:

    标签: android android-mediacodec


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回复。因此,由于 KEY_FRAME_RATE 已被弃用,我如何编码预定长度的视频。我正在尝试从用户生成的静止图像创建视频。
    • 如果您从单个静止图像创建视频,则需要对两帧进行编码,将演示时间戳设置为 3.5 秒。您可以对同一帧进行两次编码,或者将空白帧编码为第二帧,以便在“播放”结束时将其重置为黑色。
    猜你喜欢
    • 2022-08-15
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 2018-12-06
    • 1970-01-01
    相关资源
    最近更新 更多