ffmpeg 在 win10 下编译的最简单方法

目标: win10 编译 ffmpeg
环境: win10
准备条件:

  • 编译器 vs2013 或者 vs2019 (推荐)
  • wsl 安装 Linux 子系统(这个比虚拟机好用)这里使用的是我在Windows商店下载的Ubuntu18
  • fmpeg 4.2.3
    步骤:
    1、开始菜单 VisualStudio里找到”Developer Command Prompt for VS 2019“,运行
    提示:Win键,输入for VS,会立刻出现,回车即可执行

2、输入bash,进入linux子系统

3、如果没有yasm,运行apt install yasm安装,唯一的安装了。
为./configure添加两个参数: --cc=cl.exe --ld=link.exe
两个.exe非常重要,默认的configure在bash中执行cl,是找不到cl.exe的,link同理,所以我们手动指定,不会报错。
–enable-x86asm在以前某些版本可能需要改为–enable-yasm

编译选项:
make clean

./configure --arch=x86_64 --cc=cl.exe --ld=link.exe --enable-shared --disable-doc --enable-ffmpeg --enable-ffplay --enable-ffprobe --disable-symver --enable-small --disable-everything --disable-w32threads --enable-protocol=rtmp --enable-protocol=http --enable-protocol=tcp --enable-protocol=udp --enable-protocol=file --enable-demuxer=flv --enable-demuxer=hls --enable-demuxer=h264 --enable-demuxer=aac --enable-demuxer=mpegts --enable-decoder=h264 --enable-decoder=aac --enable-decoder=aasc --enable-decoder=aac_latm --enable-parser=aac --enable-parser=h264 --enable-demuxer=opus --enable-decoder=libopus --enable-parser=opus --prefix="./ffbin" --toolchain=msvc --enable-x86asm --enable-optimizations --enable-debug --enable-protocol=crypto --enable-muxer=flv --enable-libx264 --enable-gpl --extra-cflags=/I"D:/4_work/gitlab/thirdparty/x264/" --extra-ldflags=/LIBPATH:“D:/4_work/gitlab/thirdparty/x264/” --extra-cflags=/I"D:/4_work/gitlab/thirdparty/SDL2-2.0.14/" --extra-ldflags=/LIBPATH:“D:/4_work/gitlab/thirdparty/SDL2-2.0.14/”

make

make install

出现的问题

  1. ffplay 编译失败
    应该是 sdl 库在config 时候找不到路径,在linux 下需要安装,windows 暂时不知道怎么配置进去

  2. 源码字符集不匹配的问题
    msvc2019
    因为msvc2019默认以utf-8编码读取源码,而./configure生成的config.h包含gbk字符 解决方法: - 将config.h以gbk编码打开(notepad++或vscode),复制全部,再以utf-8打开粘贴覆盖; - 或者,干脆将utf-8下乱码的字符删除
    msvc2013
    msvc2013默认以gbk编码读取源码,所以方法同msvc2019,不过恰好相反,要确保不出现gbk编码无法识别的字符

  3. 编译出错,timespec未定义
    timespec结构体是C11标准定义的,包含在time.h头文件中,msvc2013可能没有完全实现这个标准。 幸好ffmpeg只是借用了这个结构体,而没有用到相应的函数, 所以我们手动定义一下好了:

    #ifndef _MY_TIMESPEC_
    #define _MY_TIMESPEC_ 
    struct timespec
        {
            time_t tv_sec;  // Seconds - >= 0
            long   tv_nsec; // Nanoseconds - [0, 999999999]
        };
    #endif
    

    将它拷贝到源码中,重新make

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值