ffmpeg概述

相关网址

  • 官网
  • 官网下载页面
  • 下载build页面
  • github下载
  • SDL github
  • SDL Wiki
  • x264 github
  • msys2官网

编译

ffmpeg编译可以有很多东西,你可以添加需要的扩展,笔者这里只按照笔者的需求来添加。
笔者编译的版本,x264扩展,ffplay播放器。

如果你的/usr/local/lib路径没有加入到动态库路径,请先执行下面的指令,增加到系统环境中去。

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

Ubuntu

系统安装依赖

sudo apt install ubuntu-restricted-extras
sudo apt install libx11-dev
sudo apt install xorg-dev
sudo apt install nasm
sudo apt install yasm

SDL

// 安装SDL,这里推荐用命令安装SDL2的库,笔者试过,自行编译的SDL库会存在问题。
apt-get install libsdl2-2.0			
apt-get install libsdl2-dev

关于笔者编译SDL不能使用的问题,具体原因笔者也未知,但从ldd查看相关联的库来看,通过命令安装的SDL,会链接到许多相关的库上,而笔者编译出来的库则缺少了很多链接。
ps:如果有人知道这个是什么问题,笔者可能是编译的一个条件少了,也可能是其它原因,希望可以给笔者解解惑。

  • apt安装的SDL依赖
jie@jie-virtual-machine:/usr/lib/x86_64-linux-gnu$ ldd  libSDL2-2.0.so
	linux-vdso.so.1 (0x00007fffac966000)
	libasound.so.2 => /lib/x86_64-linux-gnu/libasound.so.2 (0x00007f006d6a3000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f006d5bc000)
	libpulse.so.0 => /lib/x86_64-linux-gnu/libpulse.so.0 (0x00007f006d567000)
	libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007f006d427000)
	libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x00007f006d412000)
	libXcursor.so.1 => /lib/x86_64-linux-gnu/libXcursor.so.1 (0x00007f006d404000)
	libXinerama.so.1 => /lib/x86_64-linux-gnu/libXinerama.so.1 (0x00007f006d3ff000)
	libXi.so.6 => /lib/x86_64-linux-gnu/libXi.so.6 (0x00007f006d3eb000)
	libXfixes.so.3 => /lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007f006d3e3000)
	libXrandr.so.2 => /lib/x86_64-linux-gnu/libXrandr.so.2 (0x00007f006d3d6000)
	libXss.so.1 => /lib/x86_64-linux-gnu/libXss.so.1 (0x00007f006d3d1000)
	libXxf86vm.so.1 => /lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007f006d3c8000)
	libdrm.so.2 => /lib/x86_64-linux-gnu/libdrm.so.2 (0x00007f006d3b2000)
	libgbm.so.1 => /lib/x86_64-linux-gnu/libgbm.so.1 (0x00007f006d3a1000)
	libwayland-egl.so.1 => /lib/x86_64-linux-gnu/libwayland-egl.so.1 (0x00007f006d39c000)
	libwayland-client.so.0 => /lib/x86_64-linux-gnu/libwayland-client.so.0 (0x00007f006d38b000)
	libwayland-cursor.so.0 => /lib/x86_64-linux-gnu/libwayland-cursor.so.0 (0x00007f006d381000)
	libxkbcommon.so.0 => /lib/x86_64-linux-gnu/libxkbcommon.so.0 (0x00007f006d338000)
	libdecor-0.so.0 => /lib/x86_64-linux-gnu/libdecor-0.so.0 (0x00007f006d32e000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f006d000000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f006d95a000)
	libpulsecommon-15.99.so => /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so (0x00007f006d2a9000)
	libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007f006d25b000)
	libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f006d22f000)
	libXrender.so.1 => /lib/x86_64-linux-gnu/libXrender.so.1 (0x00007f006cff3000)
	libwayland-server.so.0 => /lib/x86_64-linux-gnu/libwayland-server.so.0 (0x00007f006cfdd000)
	libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f006cfac000)
	libffi.so.8 => /lib/x86_64-linux-gnu/libffi.so.8 (0x00007f006cf9f000)
	libsndfile.so.1 => /lib/x86_64-linux-gnu/libsndfile.so.1 (0x00007f006cf20000)
	libX11-xcb.so.1 => /lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007f006d228000)
	libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007f006ce59000)
	libasyncns.so.0 => /lib/x86_64-linux-gnu/libasyncns.so.0 (0x00007f006ce51000)
	libapparmor.so.1 => /lib/x86_64-linux-gnu/libapparmor.so.1 (0x00007f006ce3c000)
	libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007f006ce36000)
	libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f006ce2c000)
	libFLAC.so.8 => /lib/x86_64-linux-gnu/libFLAC.so.8 (0x00007f006cdf0000)
	libvorbis.so.0 => /lib/x86_64-linux-gnu/libvorbis.so.0 (0x00007f006cdc3000)
	libvorbisenc.so.2 => /lib/x86_64-linux-gnu/libvorbisenc.so.2 (0x00007f006cd18000)
	libopus.so.0 => /lib/x86_64-linux-gnu/libopus.so.0 (0x00007f006ccba000)
	libogg.so.0 => /lib/x86_64-linux-gnu/libogg.so.0 (0x00007f006ccaf000)
	liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f006cc82000)
	libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007f006cbb3000)
	liblz4.so.1 => /lib/x86_64-linux-gnu/liblz4.so.1 (0x00007f006cb93000)
	libcap.so.2 => /lib/x86_64-linux-gnu/libcap.so.2 (0x00007f006cb88000)
	libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007f006ca4a000)
	libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f006ca30000)
	libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007f006ca0a000)
	libmd.so.0 => /lib/x86_64-linux-gnu/libmd.so.0 (0x00007f006c9fd000)

  • 笔者编译的SDL依赖,这差距一目了然。
jie@jie-virtual-machine:~/user/lib_source/SDL/build/.libs$ ldd libSDL2-2.0.so.0
	linux-vdso.so.1 (0x00007ffeb65db000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fea9a919000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fea9a600000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fea9ac7c000)

所以这里不推荐自行编译SDL,如果你发现自行编译的用了出现一些问题,比如打不开播放,比如莫名其妙的崩溃之类的,请卸载自行编译的SDL,安装前面apt的SDL。
ps:make的卸载指令, sudo make uninstall

x264

关于x264的安装比较简单,下载源码,切入到源码目录。

x264目录,查看到configure执行脚本

jie@jie-virtual-machine:~/user/lib_source/x264-master$ ls -l
total 420
-rw-rw-r-- 1 jie jie  1999  1月 29  2023 AUTHORS
-rw-rw-r-- 1 jie jie 10641  1月 29  2023 autocomplete.c
drwxrwxr-x 8 jie jie  4096 10月  2 10:53 common
-rwxr-xr-x 1 jie jie 45147  1月 29  2023 config.guess
-rw-rw-r-- 1 jie jie   983 10月  1 13:13 config.h
-rw-rw-r-- 1 jie jie  9006 10月  1 13:13 config.log
-rw-rw-r-- 1 jie jie  1196 10月  1 13:13 config.mak
-rwxr-xr-x 1 jie jie 35777  1月 29  2023 config.sub
-rwxr-xr-x 1 jie jie 54257  1月 29  2023 configure
-rw-rw-r-- 1 jie jie 17992  1月 29  2023 COPYING
drwxrwxr-x 2 jie jie  4096  1月 29  2023 doc
drwxrwxr-x 2 jie jie  4096 10月  2 10:53 encoder
-rw-rw-r-- 1 jie jie  4202  1月 29  2023 example.c
drwxrwxr-x 2 jie jie  4096  1月 29  2023 extras
drwxrwxr-x 3 jie jie  4096 10月  2 10:53 filters
drwxrwxr-x 2 jie jie  4096 10月  2 10:53 input
-rw-rw-r-- 1 jie jie 13355  1月 29  2023 Makefile
drwxrwxr-x 2 jie jie  4096 10月  2 10:53 output
drwxrwxr-x 3 jie jie  4096  1月 29  2023 tools
-rwxr-xr-x 1 jie jie   854  1月 29  2023 version.sh
-rw-rw-r-- 1 jie jie 92653  1月 29  2023 x264.c
-rw-rw-r-- 1 jie jie  3182  1月 29  2023 x264cli.h
-rw-rw-r-- 1 jie jie   172 10月  1 13:13 x264_config.h
-rw-rw-r-- 1 jie jie  1910  1月 29  2023 x264dll.c
-rw-rw-r-- 1 jie jie 48650  1月 29  2023 x264.h
-rw-rw-r-- 1 jie jie   286 10月  1 13:13 x264.pc
-rw-rw-r-- 1 jie jie   572  1月 29  2023 x264res.manifest
-rw-rw-r-- 1 jie jie  2709  1月 29  2023 x264res.rc

编译&安装

./configure --enable-shared			// 执行配置
make -j 8							// 编译
sudo make install					// 安装库系统环境

ffmpeg

下载之后,切换到ffmpeg目录中去。

ffmpeg目录,找到configure ps:我这里是编译好的目录,所以你没有编译的不同。

jie@jie-virtual-machine:~/user/lib_source/ffmpeg$ ls -l
total 3652
-rw-rw-r--  1 jie jie   74753 10月  1 13:02 Changelog
drwxrwxr-x 11 jie jie    4096 10月  1 13:02 compat
-rw-rw-r--  1 jie jie   20076 10月  1 13:22 config.asm
-rw-rw-r--  1 jie jie   68687 10月  1 13:22 config_components.h
-rw-rw-r--  1 jie jie   20683 10月  1 13:22 config.h
-rwxrwxr-x  1 jie jie  269339 10月  1 13:02 configure
-rw-rw-r--  1 jie jie     418 10月  1 13:02 CONTRIBUTING.md
-rw-rw-r--  1 jie jie   18092 10月  1 13:02 COPYING.GPLv2
-rw-rw-r--  1 jie jie   35147 10月  1 13:02 COPYING.GPLv3
-rw-rw-r--  1 jie jie   26526 10月  1 13:02 COPYING.LGPLv2.1
-rw-rw-r--  1 jie jie    7651 10月  1 13:02 COPYING.LGPLv3
-rw-rw-r--  1 jie jie     277 10月  1 13:02 CREDITS
drwxrwxr-x  5 jie jie    4096 10月  1 13:25 doc
drwxrwxr-x  2 jie jie    4096 10月  1 13:22 ffbuild
-rwxrwxr-x  1 jie jie  289096 10月  1 13:25 ffmpeg
-rwxrwxr-x  1 jie jie 1045968 10月  1 13:25 ffmpeg_g
-rwxrwxr-x  1 jie jie  145720 10月  1 13:25 ffplay
-rwxrwxr-x  1 jie jie  524072 10月  1 13:25 ffplay_g
-rwxrwxr-x  1 jie jie  179048 10月  1 13:25 ffprobe
-rwxrwxr-x  1 jie jie  655168 10月  1 13:25 ffprobe_g
drwxrwxr-x  2 jie jie    4096 10月  1 13:25 fftools
-rw-rw-r--  1 jie jie     596 10月  1 13:02 INSTALL.md
drwxrwxr-x 15 jie jie  114688 10月  1 13:25 libavcodec
drwxrwxr-x  3 jie jie    4096 10月  1 13:25 libavdevice
drwxrwxr-x  9 jie jie   36864 10月  1 13:25 libavfilter
drwxrwxr-x  3 jie jie   45056 10月  1 13:25 libavformat
drwxrwxr-x 13 jie jie   16384 10月  1 13:25 libavutil
drwxrwxr-x  2 jie jie    4096 10月  1 13:25 libpostproc
drwxrwxr-x  6 jie jie    4096 10月  1 13:25 libswresample
drwxrwxr-x  7 jie jie    4096 10月  1 13:25 libswscale
-rw-rw-r--  1 jie jie    4376 10月  1 13:02 LICENSE.md
-rw-rw-r--  1 jie jie   31223 10月  1 13:02 MAINTAINERS
-rw-rw-r--  1 jie jie    6549 10月  1 13:02 Makefile
drwxrwxr-x  2 jie jie    4096 10月  1 13:02 presets
-rw-rw-r--  1 jie jie    1810 10月  1 13:02 README.md
-rw-rw-r--  1 jie jie       6 10月  1 13:02 RELEASE
-rw-rw-r--  1 jie jie    1076 10月  1 13:02 RELEASE_NOTES
drwxrwxr-x  7 jie jie    4096 10月  1 13:02 tests
drwxrwxr-x  3 jie jie    4096 10月  1 13:02 tools

编译&安装

./configure --enable-shared --enable-libx264 --enable-gpl --enable-sdl2 --enable-ffplay		// ffmpeg 编译参数参考,这里需要安装x264
make -j 8			// 编译
sudo make install	// 安装

Windows

windows编译的话,要使用msys2,所以如果你没有装msys2,请先安装msys2。
windows编译有mingw & msvc,mingw相对来说会比msvc简单一些,具体看个人需要,可以选择不同的编译方式。

修改msys2的配置

  • 换源 ps: 这一个不是必须,这里只是为了提速换成国内源
    找到安装msys2的根目录,然后切换到${msys2}\etc\pacman.d,目录中去。

目录文件,找到 mirrorlist.msys & 2137 mirrorlist.mingw64 & 2071 mirrorlist.mingw32文件

PS D:\it_sys\msys2\etc\pacman.d> ls
 目录: D:\it_sys\msys2\etc\pacman.d
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2023/10/1     21:53                gnupg
-a----        2022/10/16     22:05           2051 mirrorlist.clang32
-a----        2022/10/16     22:05           2051 mirrorlist.clang64
-a----        2022/10/16     22:05           1985 mirrorlist.mingw
-a----         2023/10/1     22:48           2071 mirrorlist.mingw32
-a----         2023/10/1     22:48           2137 mirrorlist.mingw64
-a----         2023/10/1     22:48           2071 mirrorlist.msys
-a----        2022/10/16     22:05           2018 mirrorlist.ucrt64

国内源

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/

在开头添加国内源到 mirrorlist.msys & 2137 mirrorlist.mingw64 & 2071 mirrorlist.mingw32 文件中去

# See https://www.msys2.org/dev/mirrors

## Primary
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/

Server = https://mirror.msys2.org/msys/$arch/
Server = https://repo.msys2.org/msys/$arch/
  • 修改启动脚本msys2_shell.cmd
    在msys2的根目录中,可以找到msys2_shell.cmd脚本,该脚本可以用来启动msys2。用文本编辑器打开,将rem set MSYS2_PATH_TYPE=inherit修改为set MSYS2_PATH_TYPE=inherit,rem其实是注释,这个操作就是将这个注释打开。
    ps: 笔者这里在17行的位置,你不一定和笔者的位置一致。

修改后的

rem To export full current PATH from environment into MSYS2 use '-use-full-path' parameter
rem or uncomment next line
set MSYS2_PATH_TYPE=inherit

ps:未完,待续...

你可能感兴趣的:(常用汇总,ffmpeg)