FFmpeg在Windows上的坑

此贴用于记录FFmpeg在Windows上c++开发过程中的一些坑

1.在c++上用c的库没有进行包装:

1>c:\users\s\source\repos\ffmpeg\ffmpeg\decode.cpp(112): warning C4267: “参数”: 从“size_t”转换到“int”,可能丢失数据
1>decode.obj : error LNK2001: 无法解析的外部符号 "int __cdecl av_parser_parse2(struct AVCodecParserContext *,struct AVCodecContext *,unsigned char * *,int *,unsigned char const *,int,__int64,__int64,__int64)" (?av_parser_parse2@@YAHPEAUAVCodecParserContext@@PEAUAVCodecContext@@PEAPEAEPEAHPEBEH_J55@Z)
1>decode.obj : error LNK2001: 无法解析的外部符号 "struct AVCodec * __cdecl avcodec_find_decoder(enum AVCodecID)" (?avcodec_find_decoder@@YAPEAUAVCodec@@W4AVCodecID@@@Z)
1>decode.obj : error LNK2001: 无法解析的外部符号 "void __cdecl av_packet_free(struct AVPacket * *)" (?av_packet_free@@YAXPEAPEAUAVPacket@@@Z)
1>decode.obj : error LNK2001: 无法解析的外部符号 "void __cdecl av_frame_free(struct AVFrame * *)" (?av_frame_free@@YAXPEAPEAUAVFrame@@@Z)
1>decode.obj : error LNK2001: 无法解析的外部符号 "void __cdecl av_parser_close(struct AVCodecParserContext *)" (?av_parser_close@@YAXPEAUAVCodecParserContext@@@Z)
1>decode.obj : error LNK2001: 无法解析的外部符号 "int __cdecl avcodec_receive_frame(struct AVCodecContext *,struct AVFrame *)" (?avcodec_receive_frame@@YAHPEAUAVCodecContext@@PEAUAVFrame@@@Z)
1>decode.obj : error LNK2001: 无法解析的外部符号 "int __cdecl avcodec_open2(struct AVCodecContext *,struct AVCodec const *,struct AVDictionary * *)" (?avcodec_open2@@YAHPEAUAVCodecContext@@PEBUAVCodec@@PEAPEAUAVDictionary@@@Z)
1>decode.obj : error LNK2001: 无法解析的外部符号 "struct AVCodecContext * __cdecl avcodec_alloc_context3(struct AVCodec const *)" (?avcodec_alloc_context3@@YAPEAUAVCodecContext@@PEBUAVCodec@@@Z)
1>decode.obj : error LNK2001: 无法解析的外部符号 "struct AVPacket * __cdecl av_packet_alloc(void)" (?av_packet_alloc@@YAPEAUAVPacket@@XZ)
1>decode.obj : error LNK2001: 无法解析的外部符号 "void __cdecl avcodec_free_context(struct AVCodecContext * *)" (?avcodec_free_context@@YAXPEAPEAUAVCodecContext@@@Z)
1>decode.obj : error LNK2001: 无法解析的外部符号 "struct AVCodecParserContext * __cdecl av_parser_init(int)" (?av_parser_init@@YAPEAUAVCodecParserContext@@H@Z)
1>decode.obj : error LNK2001: 无法解析的外部符号 "int __cdecl avcodec_send_packet(struct AVCodecContext *,struct AVPacket const *)" (?avcodec_send_packet@@YAHPEAUAVCodecContext@@PEBUAVPacket@@@Z)
1>decode.obj : error LNK2001: 无法解析的外部符号 "struct AVFrame * __cdecl av_frame_alloc(void)" (?av_frame_alloc@@YAPEAUAVFrame@@XZ)
1>C:\Users\S\source\repos\FFmpeg\x64\Release\FFmpeg.exe : fatal error LNK1120: 13 个无法解析的外部命令

解决方法:xtern "C"{ }包装要引用的c库,

extern "C"
{
#include <libavcodec/avcodec.h>
}

2.使用c++符号有误:

error C3688: 文本后缀“PRId64”无效;未找到文文本运算符或文本运算符模板“operator """"PRId64”

解决方法:在PRId64前空一格


3.av_err2str函数显式转换问题:

error C4576: 后跟初始值设定项列表的带圆括号类型是一个非标准的显式类型转换语法

解决方法:在av_err2str做如下修改:

#define av_err2str(errnum) av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum)

改为

char av_error[AV_ERROR_MAX_STRING_SIZE] = { 0 };
#define av_err2str(errnum) av_make_error_string(av_error, AV_ERROR_MAX_STRING_SIZE, errnum)

# 3.结构体AVRational处显式转换问题:
error C4576: 后跟初始值设定项列表的带圆括号类型是一个非标准的显式类型转换语法

解决方法:去掉结构体AVRational两边的圆括号

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Windows系统上安装FFmpeg,可以按照以下步骤进行操作: 1. 访问FFmpeg官方网站:https://ffmpeg.org/,然后点击右侧的"Download"链接。 2. 在下载页面下拉菜单中,选择"Windows"操作系统。 3. 在"Static Builds"部分,您可以选择下载已编译好的静态版本,这将包含FFmpeg可执行文件和库文件。 4. 根据您的系统架构(32位或64位),选择适当的版本进行下载。您可以通过打开“此电脑”(或“我的电脑”)的属性来查看您的系统架构信息。 5. 下载完成后,解压缩下载的压缩包。 6. 将解压缩后的文件夹移动到您希望安装FFmpeg的位置。例如,您可以将其移动到C:\Program Files\文件夹中。 7. 打开已移动的文件夹,在其中找到bin文件夹。将此bin文件夹的路径添加到系统环境变量中。您可以按下Win + R键,输入sysdm.cpl并按Enter键打开系统属性窗口。在窗口中选择"高级"选卡,然后点击"环境变量"按钮。在系统变量部分,找到名为"Path"的变量,并点击"编辑"按钮。在变量值的末尾添加FFmpeg bin文件夹的路径(例如:C:\Program Files\ffmpeg\bin),然后点击"确定"保存更改。 8. 打开命令提示符(按下Win + R,输入cmd并按Enter键)或PowerShell,然后输入以下命令来验证FFmpeg是否正确安装: ``` ffmpeg -version ``` 如果显示了FFmpeg的版本信息,则表示安装成功。 现在,您已经成功在Windows系统上安装了FFmpeg,并且可以使用它来处理视频文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值