ffmpeg在windows和linux环境下的安装

linux环境下

方便,一句命令行就可以了

sudo apt-get install ffmpeg

然后输入ffmpeg -version出现下图所示即可:
在这里插入图片描述

windows环境下

下载预编译的二进制文件:访问FFmpeg官方网站的下载链接,我直接选的这个版本:在这里插入图片描述
解压缩后,把其中的bin文件加入系统环境变量path中。

验证安装:
win+r,输入 cmd
然后运行以下命令验证安装是否成功:

ffmpeg -version

在这里插入图片描述

自己编译ffmpeg

以上都是直接用的默认支持的版本,实际上自己下载源码进行编译安装会更好。
在Windows环境下用到的是mysy2,直接去官网下载安装即可,很方便。
然后去ffmpeg官网clone代码
在mysy2中执行如下的命令:

./configure
make -j4
make install

执行 ./ffmpeg.exe -h来进行验证

补充:
我犯了一个小错误,没有把ffplay需要用到的SDL-2.0环境先配置好,后续要用到ffplay的时候还需要重新编译,增加了麻烦,所以最好是在./configure之前就安装好需要的组件:

# 用pacman安装ffmpeg的依赖了。pacman是msys2 mingw-w64的包管理工具,可以简单的理解为ubuntu下的apt-get或者是centos下的yum之类。我们通过pacman安装编译ffmpeg所需要的依赖
pacman -S make pkgconf diffutils
# mingw-w64 packages and toolchains
pacman -S mingw-w64-i686-nasm mingw-w64-i686-gcc mingw-w64-i686-SDL2
# 如果要编译64位的版本,将mingw-w64工具链中的i686替换位x86_64即可,如果要编译ffplay,则需要安装sdl2以及pkgconf依赖
pacman -S mingw-w64-x86_64-nasm mingw-w64-x86_64-gcc mingw-w64-x86_64-SDL2

然后执行./configure,看到如下信息则表明ffplay组件已经准备完毕:
在这里插入图片描述
然后重复:

make -j4
make install

最后输入ffplay --help验证安装是否成功。
note:用的是msys2 mingw64

关于libx264的编译

后期学习的时候使用 ffmpeg -h encoder=libx264 发现报错:

ffmpeg version 7.0.git Copyright (c) 2000-2024 the FFmpeg developers
  built with gcc 13.2.0 (Rev6, Built by MSYS2 project)
  configuration:
  libavutil      59. 16.100 / 59. 16.100
  libavcodec     61.  5.103 / 61.  5.103
  libavformat    61.  3.100 / 61.  3.100
  libavdevice    61.  2.100 / 61.  2.100
  libavfilter    10.  2.101 / 10.  2.101
  libswscale      8.  2.100 /  8.  2.100
  libswresample   5.  2.100 /  5.  2.100
Codec 'libx264' is not recognized by FFmpeg.

又需要重新编译
此处应有配图

在这里插入图片描述

  1. 先安装libx264
  • 首先将x264的代码下载下来:
    git clone https://code.videolan.org/videolan/x264.git
  • 用msys2进入下载完成的目录,进行编译
./configure --enable-shared 

!!!也可以用–prefix=/d/x264指定编译在哪个地址,便于后面ffmpeg编译的时候找libx264

在mysys2中可以使用pwd -W查看当前目录在windows中的实际路径。

  • 进行编译
make -j4
make install
  • 验证
$ x264 --version
x264 0.164.x
built on May  8 2024, gcc: 13.2.0
x264 configuration: --chroma-format=all
libx264 configuration: --chroma-format=all
x264 license: GPL version 2 or later
  1. 回到之前的FFmpeg的目录进行编译
/d/FFmpeg_W
./configure --enable-shared --enable-swscale --enable-gpl --enable-nonfree --enable-pic  --enable-version3 --enable-postproc --enable-pthreads --enable-static --enable-libx264 --prefix=/d/FFmpeg_W

下面是命令中每个选项的含义:

  • –enable-shared:
    启用构建共享库(动态链接库,即 DLL 文件在 Windows 上,或 .so 文件在 Linux/Unix 上)。
  • –enable-swscale:
    启用软件颜色转换的支持。swscale 是 FFmpeg 中用于在不同像素格式之间转换的颜色转换库。
  • –enable-gpl:
    启用对 GPL 许可下库的支持。某些 FFmpeg 功能可能依赖于 GPL 许可的代码,这个选项允许你启用这些功能。
  • –enable-nonfree:
    启用非自由编解码器和某些其他功能。FFmpeg 中有些编解码器可能不完全开放或自由,这个选项允许你使用它们。
  • –enable-pic:
    生成位置无关代码,这对于生成共享库是必要的。
  • –prefix=“你的地址”:
    设置安装 FFmpeg 的根目录。意味着编译后的 FFmpeg 将被安装在 你指定的目录下。
  • –enable-version3:
    启用对 libx264 版本 3 的支持,这通常意味着允许使用 libx264 的某些新特性或改进。
  • –enable-postproc:
    启用 FFmpeg 的后处理滤镜库。后处理可以改善视频质量,例如去块、去噪等。
  • –enable-pthreads:
    启用 POSIX 线程库的支持,允许 FFmpeg 支持多线程操作。
  • –enable-static:
    启用构建静态库。与 --enable-shared 相反,这个选项会生成可以在程序中静态链接的库。
  • –enable-libx264:
    启用 libx264 编码器的支持。libx264 是一个非常流行的 H.264 视频编码库。

感谢:
libx264的安装主要参考了 源码编译安装ffmpeg(带libx264安装)

遇上了报错如下:

$ ./configure --enable-shared --enable-swscale --enable-gpl --enable-nonfree --enable-pic  --enable-version3 --enable-postproc --enable-pthreads --enable-static --enable-libx264 --prefix=/d/FFmpeg_W
ERROR: x264 not found using pkg-config

If you think configure made a mistake, make sure you are using the latest
version from Git.  If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.libera.chat.
Include the log file "ffbuild/config.log" produced by configure as this will help
solve the problem.

在上面的命令行的基础上加上libx264的lib和include文件夹:
--extra-cflags="-I/d/x264/include" --extra-ldflags="-L/d/x264/lib"
直接指定地址让编译器去找
还是报错,行行行,我配置一下环境变量再试试,还是报错。

ok,让我们直接用msys2确认 pkg-config 文件的位置:

$ find / -name x264.pc
/usr/local/lib/pkgconfig/x264.pc

因为是在msys2中进行查找和编译的,所以直接显示的并不是Windows下的实际路径,然后将PKG_CONFIG_PATH 环境变量中包含该文件的路径:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

这时候再运行:

./configure --enable-shared --enable-swscale --enable-gpl --enable-nonfree --enable-pic  --enable-version3 --enable-postproc --enable-static --enable-libx264 

可选项:

--prefix=/d/FFmpeg_W --extra-cflags="-I/d/x264/include" --extra-ldflags="-L/d/x264/lib"

成功!

  1. 进行编译
make -j4
make install

验证:
ffmpeg -h encoder=libx264

Encoder libx264 [libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10]:
   General capabilities: dr1 delay threads
   Threading capabilities: other
   Supported pixel formats: yuv420p yuvj420p yuv422p yuvj422p yuv444p yuvj444p nv12 nv16 nv21 yuv42
0p10le yuv422p10le yuv444p10le nv20le gray gray10le

关于libmp3lame的编译

先在msys2中安装libmp3lame:
pacman -S mingw-w64-x86_64-lame
然后重新编译ffmpeg:

./configure --enable-shared --enable-swscale --enable-gpl --enable-nonfree --enable-pic  --enable-version3 --enable-postproc --enable-static --enable-libx264  --enable-libmp3lame

如果又显示找不到x264,就加上这一步:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
然后继续

make -j4
make

验证:
ffmpeg -h encoder=libmp3lame

关于libfdk_aac的编译

pacman -S mingw-w64-x86_64-fdk-aac

./configure --enable-shared --enable-swscale --enable-gpl --enable-nonfree --enable-pic  --enable-version3 --enable-postproc --enable-static --enable-libx264  --enable-libmp3lame --enable-libfdk_aac
make -j4
make

验证:
ffmpeg -h encoder=libfdk_aac

关于rtmp模块

先配置nginx+rtmp

  1. 下载nginx:https://nginx.org/en/download.html
    在这里插入图片描述

  2. 下载nginx-rtmp-module:https://github.com/arut/nginx-rtmp-module

直接编译nginx有些问题,缺少什么库就安装什么。我的电脑上直接用msys2自带的pacman安装后还是会出现找不到路径的问题,最后我选择直接安装源码,然后在命令行中进行链接。
这是我碰上的报错解决方式:

  1. 下载PCRE源码:从PCRE官方网站https://www.pcre.org/下载最新版本的源代码。
    解压并编译PCRE:
cd pcre-10.43
./configure
make -j4
make install
  1. 下载openssl源码:https://www.openssl.org/source/
    解压并编译openssl:
cd openssl-3.3.0
./configure
make -j4
make install

这个需要一定的时间,编译挺慢的

  1. 下载zlib源码:https://zlib.net/current/zlib.tar.gz
    解压并编译openssl:
cd zlib-1.3.1
./configure
make -j4
make install
  1. 在nginx目录中进行编译:
cd /d/nginx-1.26.0
# 指定库的路径
./configure --add-module=/d/nginx-rtmp-module --with-pcre=/d/pcre2-10.43 --with-openssl=/d/openssl-3.3.0 --with-zlib=/d/zlib-1.3.1

出现了nginx-rtmp-module中的报错:

nginx-rtmp-module/ngx_rtmp.h:186: error: ignoring '#pragma warning ' [-Werror=unknown-pragmas]
  186 | #pragma warning(push)

加上--with-cc-opt='-w'

 ./configure --add-module=/d/nginx-rtmp-module --with-pcre=/d/pcre2-10.43 --with-openssl=/d/openssl-3.3.0 --with-zlib=/d/zlib-1.3.1 --with-cc-opt='-w'  --prefix=/d/nginx-install
make -j4
make install
  1. 验证:
    用管理员身份打开windows cmd命令(win+r,shit+ctrl+enter),然后进入nginx的文件夹,编译生成的nginx.exenginx-1.26.0\objs文件夹里面,可以复制到nginx-1.26.0中,然后运行:
    nginx.exe -c D:\nginx-1.26.0\conf\nginx.conf,tips:如果用的是start nginx就不会显示报错信息

这里运行一直报错路径问题:

$ /d/nginx-install/sbin/nginx -c /d/nginx-install/conf/nginx.conf
nginx: [alert] could not open error log file: CreateFile() "/d/nginx-install/logs/error.log" failed
(3: The system cannot find the path specified)
2024/05/12 22:08:01 [emerg] 20132#19952: CreateDirectory() "/d/d/nginx-install/client_body_temp" fai
led (3: The system cannot find the path specified)

改了很多也不见对。。。msys2和windows环境中的命名差异还是有影响,算了

关于rtmp模块(更正版本)

直接用的别人已经编译好的模块:
参考:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/120868728
十分感谢这位作者!
亲测可行
不过不需要start.bat,直接在msys2中运行推流的命令即可

关于libfreetype滤镜

先安装这个库:
pacman -S base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-freetype

./configure --enable-shared --enable-swscale --enable-gpl --enable-nonfree --enable-pic  --enable-version3 --enable-postproc --enable-static --enable-libx264  --enable-libmp3lame --enable-libfdk_aac --enable-libfreetype
make -j4
make
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值