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.
又需要重新编译
此处应有配图
- 先安装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
- 回到之前的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"
成功!
- 进行编译
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
-
下载nginx:
https://nginx.org/en/download.html
-
下载nginx-rtmp-module:
https://github.com/arut/nginx-rtmp-module
直接编译nginx有些问题,缺少什么库就安装什么。我的电脑上直接用msys2自带的pacman安装后还是会出现找不到路径的问题,最后我选择直接安装源码,然后在命令行中进行链接。
这是我碰上的报错解决方式:
- 下载PCRE源码:从PCRE官方网站
https://www.pcre.org/
下载最新版本的源代码。
解压并编译PCRE:
cd pcre-10.43
./configure
make -j4
make install
- 下载openssl源码:
https://www.openssl.org/source/
解压并编译openssl:
cd openssl-3.3.0
./configure
make -j4
make install
这个需要一定的时间,编译挺慢的
- 下载zlib源码:
https://zlib.net/current/zlib.tar.gz
解压并编译openssl:
cd zlib-1.3.1
./configure
make -j4
make install
- 在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
- 验证:
用管理员身份打开windows cmd命令(win+r,shit+ctrl+enter),然后进入nginx的文件夹,编译生成的nginx.exe
在nginx-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