You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

libswscale中sws_scale_frame函数未找到及替代方案求助

问题解决思路

核心原因

你使用的libswscale版本是4.4.2,而sws_scale_frame()是FFmpeg 5.0版本之后才新增的API,4.x系列版本根本没有这个函数,所以会出现头文件无签名、链接时未定义引用的错误。

解决方案

方案1:使用旧版标准缩放函数sws_scale()(推荐)

这是4.x版本中官方支持的视频缩放接口,步骤如下:

  • 首先调用sws_getContext()创建缩放上下文,传入源帧和目标帧的宽高、像素格式等参数
  • 调用sws_scale()执行帧缩放操作
  • 缩放完成后调用sws_freeContext()释放上下文资源

示例代码片段:

// 假设src_frame是源1080p帧,dst_frame是初始化好的480p目标帧
SwsContext *sws_ctx = sws_getContext(
    src_frame->width, src_frame->height, src_frame->format,
    dst_frame->width, dst_frame->height, dst_frame->format,
    SWS_BILINEAR, NULL, NULL, NULL
);

if (!sws_ctx) {
    // 处理上下文创建失败的情况
    return -1;
}

// 执行缩放
sws_scale(
    sws_ctx,
    (const uint8_t *const *)src_frame->data,
    src_frame->linesize,
    0,
    src_frame->height,
    dst_frame->data,
    dst_frame->linesize
);

// 释放资源
sws_freeContext(sws_ctx);

方案2:升级libswscale到5.x及以上版本

如果一定要使用sws_scale_frame(),需要手动升级FFmpeg相关库:

  • 可以通过第三方PPA(比如ppa:jonathonf/ffmpeg-5)安装新版,Ubuntu 22.04兼容该PPA
  • 或者从FFmpeg官方源码编译安装最新版,编译时指定启用libswscale模块

不过升级可能会打破系统原有依赖,建议优先选择方案1。

内容的提问来源于stack exchange,提问作者user16570427

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 17:02:45