You need to enable JavaScript to run this app.
导航
视频插帧
最近更新时间:2025.03.17 14:04:53首次发布时间:2025.03.17 14:04:53
我的收藏
有用
有用
无用
无用
简介

插帧算法适用于平滑慢放/帧率提升。该算法不支持实时将相机流作为输入,只支持从相册中导入视频的输入方式。
V4.4.0新增算法

技术规格
支持平台Android、iOS
支持输入格式RGBA8888、BGRA8888
内存占用<42M (测试设备OPPO R11)
检测速度<79ms(测试设备OPPO R11)
demo示例插帧策略

该插帧策略仅供参考,与sample内示例一致。
假设输入视频为20fps,在插帧倍率为0.5的情况下:

帧号12345678
原视频时间戳(ms)050100150200250300350
预期时间戳(ms)0255075100125150175
是否插帧
使用帧号10.5插帧20.5插帧30.5插帧40.5插帧

输入视频为20fps,在插帧倍率为0.8的情况下:

帧号12345678
原视频时间戳(ms)050100150200250300350
预期时间戳(ms)04080120160200240280
是否插帧
使用帧号10.8插帧23450.8插帧6

总结:在视频正常播放的情况下,对预期时间戳位置缺帧的位置进行插帧。

C接口说明

详细接口说明查看头文件:bef_ai_image_quality_enhancement_vfi.h

1.创建插帧算法句柄

BEF_SDK_API bef_effect_result_t
bef_ai_image_quality_enhancement_vfi_create(bef_image_quality_enhancement_handle *handle, bef_ai_vfi_init_config* config);

typedef struct bef_ai_vfi_init_config {
    const char* kernelBinPath; // 可读写的路径
    bef_ai_lens_vfi_type type; // 插帧的类型
    bef_ai_lens_power_level level; //iOS端无需设置
    bef_ai_lens_vfi_data_type dataType; // 插帧输的的输入输出类型
}bef_ai_vfi_init_config;

参数说明

参数名参数类型参数说明
handlebef_image_quality_enhancement_handle*创建的插帧算法句柄
configbef_ai_vfi_init_config*算法初始化时的配置参数

返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

2.插帧算法执行

支持纹理或buffer的输入,只需选择一种作为输入,texture不使用,置成-1或0

BEF_SDK_API bef_effect_result_t
bef_ai_image_quality_enhancement_vfi_process(bef_image_quality_enhancement_handle handle, 
                                                bef_ai_vfi_process_config* config, 
                                                bef_ai_lens_vfi_data *output);

typedef struct bef_ai_vfi_process_config {
    int textureIdP; //第一帧的纹理id
    int textureIdN; //第二帧的纹理id,如果LensVideoVFIParam设置的inputFrameNum为2,则必须设置这个纹理ID
    void* buffer;   //第一帧的buffer
    void* backBuffer; //第二帧的buffer
    int width; //输入图像的宽
    int height; //输入图像的高
    int strideW; //输入图像x方向的stride
    int strideH; //输入图像y方向的stride
    //flag帧标志
    // 对于每次输入一帧测case:0表示第一帧,1表示更新帧,2表示不更新帧,更新timeStamp(用于两帧间插多帧的case)
    // 对于每次输入两帧测case:0或1表示更新帧,2表示不更新帧,更新timeStamp(用于两帧间插多帧的case)
    int flag;
    int open; //插帧动态开关
    float timeStamp; //帧间插帧位置,例如:0.5表示在两帧中间插帧,0.1表示在离第一帧0.1的位置插帧
    float scaleX; //x方向缩放系数
    float scaleY; //y方向缩放系数
}bef_ai_vfi_process_config;

typedef union bef_ai_lens_vfi_data{
    int texture; // 如果是纹理,这里纹理的index, ios 的纹理目前只支持metal的纹理, android 需要oes 纹理,且纹理放在0 位置
    void* buffer;   // 如果是数据输入,iOS 传入pixelBuffer的指针
}bef_ai_lens_vfi_data;

参数说明

参数名参数类型参数说明
handlebef_image_quality_enhancement_handle插帧算法句柄
configconst bef_ai_vfi_process_config*算法初始化时的配置参数
outputbef_ai_lens_vfi_data*插帧算法输出

返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

3.释放句柄

BEF_SDK_API bef_effect_result_t
bef_ai_image_quality_enhancement_vfi_destroy(bef_image_quality_enhancement_handle handle);

参数说明

参数名参数类型参数说明
handlebef_image_quality_enhancement_handle插帧算法的句柄

返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

4.插帧算法授权

// 离线license检测方式
BEF_SDK_API bef_effect_result_t
bef_ai_image_quality_enhancement_vfi_check_license(
    bef_image_quality_enhancement_handle handle, 
    const char* license_path);

// 在线license检测方式
BEF_SDK_API bef_effect_result_t
bef_ai_image_quality_enhancement_vfi_check_online_license(
    bef_image_quality_enhancement_handle handle, 
    const char* license_path);

参数说明

参数名参数类型参数说明
handlebef_image_quality_enhancement_handle插帧算法句柄
licensePathconst char *授权文件字符串

返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

Java 接口说明

接口说明
详细接口说明查看文件:com.bytedance.labcv.effectsdk.VideoFI.java

1.初始化插帧句柄

public int create(String rwDir, BytedEffectConstants.ImageQualityVfiType algoType, BytedEffectConstants.ImageQualityVfiDataType dataType,
                       int inputFrame, BytedEffectConstants.ImageQulityPowerLevel level)

public enum ImageQualityVfiType {
    IMAGE_QUALITY_VFI_TYPE_UM(0), //补帧
    IMAGE_QUALITY_VFI_TYPE_COVER(1); //帧融合
};

public enum ImageQualityVfiDataType {
    IMAGE_QUALITY_VFI_DATA_TYPE_BUFFER_RGBA8888(0),
    IMAGE_QUALITY_VFI_DATA_TYPE_TEXTURE_RGBA8(1);
}

public enum ImageQulityPowerLevel {
    POWER_LEVEL_DEFAULT (0),
    POWER_LEVEL_LOW (1),
    POWER_LEVEL_NORMAL (2),
    POWER_LEVEL_HIGH (3),
    POWER_LEVEL_AUTO (4);
}

参数说明

参数名参数类型参数说明
rwDirString插帧算法输出文件路径
algoTypeImageQualityVfiType插帧算法类型
dataTypeImageQualityVfiDataType输入类别为纹理或buffer
inputFrameint插帧算法输入帧数
levelImageQulityPowerLevel使用的频率等级

返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码

2.插帧算法处理

public int processTexture(
    int textureIdP, 
    int textureIdN, 
    int width, 
    int height, 
    int flag, 
    float scaleX, 
    float scaleY, 
    float timeStamp);

参数说明

参数名参数类型参数说明
textureIdPint第一帧纹理号
textureIdNint第二帧纹理号
widthint输入图像宽
heightint输入图像高
flagint帧标志
scaleXfloatx方向缩放系数
scaleYfloaty方向缩放系数
timeStampfloat帧间插帧位置

3.释放插帧句柄

public void destroy()
FAQ

1.如果出现任何异常,请查看是否有以下类型日志

答:建议首先查看以下tag输出Error类型的日志:
bef_effect_ai 和SMASH_E_LOG 以及 EffectSDK

错误码

错误码请参考错误码表