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

编译步骤

  • 安装x264
  • 安装SDL
  • 编译ffmpeg

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.solinux-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.0linux-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

打开msys2

使用命令行cmd或者powershell,或者msvc命令,你想继承谁的环境就用谁的命令行去打开。
如果是mingw编译,那么用cmd或者powershell都可以。
如果是msvc编译,那么用msvc的命令打开。

.\msys2_shell.cmd -mingw64			// 打开mingw64
.\msys2_shell.cmd -mingw32			// 打开mingw32
.\msys2_shell.cmd -msys				// 打开msys

mingw64

打开msys-mingw64之后,先更新pacman的包。

更新包
pacman -Sy 

安装基础依赖包

pacman -S mingw-w64-x86_64-toolchain
pacman -S git
pacman -S make
pacman -S automake 
pacman -S autoconf
pacman -S perl
pacman -S libtool
pacman -S mingw-w64-x86_64-cmake
pacman -S pkg-config 
pacman -S diffutils
pacman -S yasm
pacman -S nasm
安装x264
pacman -S mingw-w64-x86_64-x264
安装SDL

安装SDL和x264不同,SDL是需要注意版本的,笔者这里推荐安装2.0版本的。

pacman -Ss SDL			// 查新相关包
// 可能会列出非常多的包,这里安装mingw64 SDL 2.0版本的
......
mingw32/mingw-w64-i686-smpeg2 2.0.0-6SDL2 MPEG Player Library (mingw-w64)
mingw64/mingw-w64-x86_64-SDL 1.2.15+r419+gef3a6c05-1A library for portable low-level access to a video framebuffer, audio output, mouse, andkeyboard (mingw-w64)
mingw64/mingw-w64-x86_64-SDL2 2.28.3-1 [installed]A library for portable low-level access to a video framebuffer, audio output, mouse, andkeyboard (Version 2) (mingw-w64)
mingw64/mingw-w64-x86_64-SDL2_gfx 1.0.4-2SDL graphics drawing primitives and other support functions (Version 2) (mingw-w64)
mingw64/mingw-w64-x86_64-SDL2_image 2.6.3-2A simple library to load images of various formats as SDL surfaces (Version 2) (mingw-w64)
mingw64/mingw-w64-x86_64-SDL2_mixer 2.6.3-1A simple multi-channel audio mixer (Version 2) (mingw-w64)
mingw64/mingw-w64-x86_64-SDL2_net 2.2.0-1 [installed]A small sample cross-platform networking library (Version 2) (mingw-w64)
mingw64/mingw-w64-x86_64-SDL2_ttf 2.20.2-1A library that allows you to use TrueType fonts in your SDL applications (Version 2) (mingw-w64)
mingw64/mingw-w64-x86_64-SDL_gfx 2.0.26-1SDL Graphic Primitives (mingw-w64)
mingw64/mingw-w64-x86_64-SDL_image 1.2.12-8A simple library to load images of various formats as SDL surfaces (mingw-w64)
mingw64/mingw-w64-x86_64-SDL_mixer 1.2.12-9A simple multi-channel audio mixer (mingw-w64)
mingw64/mingw-w64-x86_64-SDL_net 1.2.8-2A small sample cross-platform networking library (mingw-w64)
mingw64/mingw-w64-x86_64-SDL_ttf 2.0.11-6A library that allows you to use TrueType fonts in your SDL applications (mingw-w64)
mingw64/mingw-w64-x86_64-sdl12-compat 1.2.68-1SDL 1.2 runtime compatibility library using SDL 2.0
mingw64/mingw-w64-x86_64-smpeg 0.4.5-5SDL MPEG Player Library (mingw-w64)
mingw64/mingw-w64-x86_64-smpeg2 2.0.0-6SDL2 MPEG Player Library (mingw-w64)
ucrt64/mingw-w64-ucrt-x86_64-SDL 1.2.15+r419+gef3a6c05-1A library for portable low-level access to a video framebuffer, audio output, mouse, andkeyboard (mingw-w64)
ucrt64/mingw-w64-ucrt-x86_64-SDL2 2.28.3-1A library for portable low-level access to a video framebuffer, audio output, mouse, andkeyboard (Version 2) (mingw-w64)
......// 从上面可以看到,我们需要的安装SDL为mingw64/mingw-w64-x86_64-SDL2_net 2.2.0-1 [installed]
pacman -S mingw-w64-x86_64-SDL2_net			// 安装SDL
ffmpeg

进入ffmpeg目录,查看到configure执行文件

jie@LAPTOP-TDJ5MUQ6 MINGW64 ~/ffmpeg
$ ls -l
total 5948
-rw-r--r-- 1 jie None     418 Oct  1 23:27 CONTRIBUTING.md
-rw-r--r-- 1 jie None   18092 Oct  1 23:27 COPYING.GPLv2
-rw-r--r-- 1 jie None   35147 Oct  1 23:27 COPYING.GPLv3
-rw-r--r-- 1 jie None   26526 Oct  1 23:27 COPYING.LGPLv2.1
-rw-r--r-- 1 jie None    7651 Oct  1 23:27 COPYING.LGPLv3
-rw-r--r-- 1 jie None     277 Oct  1 23:27 CREDITS
-rw-r--r-- 1 jie None   74753 Oct  1 23:27 Changelog
-rw-r--r-- 1 jie None     596 Oct  1 23:27 INSTALL.md
-rw-r--r-- 1 jie None    4376 Oct  1 23:27 LICENSE.md
-rw-r--r-- 1 jie None   31223 Oct  1 23:27 MAINTAINERS
-rw-r--r-- 1 jie None    6549 Oct  1 23:27 Makefile
-rw-r--r-- 1 jie None    1810 Oct  1 23:27 README.md
-rw-r--r-- 1 jie None       6 Oct  1 23:27 RELEASE
-rw-r--r-- 1 jie None    1076 Oct  1 23:27 RELEASE_NOTES
drwxr-xr-x 1 jie None       0 Oct  1 23:27 compat
-rw-r--r-- 1 jie None   20076 Oct  1 23:30 config.asm
-rw-r--r-- 1 jie None   20690 Oct  1 23:30 config.h
-rw-r--r-- 1 jie None   68687 Oct  1 23:30 config_components.h
-rwxr-xr-x 1 jie None  269339 Oct  1 23:27 configure
drwxr-xr-x 1 jie None       0 Oct  1 23:35 doc
drwxr-xr-x 1 jie None       0 Oct  1 23:30 ffbuild
-rwxr-xr-x 1 jie None  325632 Oct  1 23:35 ffmpeg.exe
-rwxr-xr-x 1 jie None 1613628 Oct  1 23:35 ffmpeg_g.exe
-rwxr-xr-x 1 jie None  153600 Oct  1 23:35 ffplay.exe
-rwxr-xr-x 1 jie None  843463 Oct  1 23:35 ffplay_g.exe
-rwxr-xr-x 1 jie None  183808 Oct  1 23:35 ffprobe.exe
-rwxr-xr-x 1 jie None  935909 Oct  1 23:35 ffprobe_g.exe
drwxr-xr-x 1 jie None       0 Oct  1 23:35 fftools
drwxr-xr-x 1 jie None       0 Oct  1 23:35 libavcodec
drwxr-xr-x 1 jie None       0 Oct  1 23:35 libavdevice
drwxr-xr-x 1 jie None       0 Oct  1 23:35 libavfilter
drwxr-xr-x 1 jie None       0 Oct  1 23:35 libavformat
drwxr-xr-x 1 jie None       0 Oct  1 23:35 libavutil
drwxr-xr-x 1 jie None       0 Oct  1 23:35 libpostproc
drwxr-xr-x 1 jie None       0 Oct  1 23:35 libswresample
drwxr-xr-x 1 jie None       0 Oct  1 23:35 libswscale
drwxr-xr-x 1 jie None       0 Oct  1 23:27 presets
drwxr-xr-x 1 jie None       0 Oct  1 23:27 tests
drwxr-xr-x 1 jie None       0 Oct  1 23:27 tools

编译 & 安装

./configure --enable-shared --enable-libx264 --enable-gpl --enable-sdl2 --enable-ffplay
make -j 8
make install

ps: 这里安装到的msys-mingw64的环境里面去的,如果你想在外面执行,还需要自行找到相关的库和头文件进行手动打包。

兼容性说明
如果目标对象是以C语言编译出来的,那么在windows平台,mingw和msvc都是可以通用的。它们之间不会产生,符号链接上的歧义。
所以,即便是mingw编译出来的ffmpeg也是可以由msvc使用的。不过msvc和mingw库的后缀命名有些不同,mingw以.a为后缀,而msvc则是以.lib作为后缀,但两者是一样的。
不过为了方便使用,你最好还是复制链接文件然后重命名一下给msvc使用。
比如以笔者这样子,作为参考示例,.lib的文件都是我复制.dll.a文件然后重命名一下而已。

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         2023/10/1     23:35         112410 libavcodec.dll.a
-a----         2023/10/1     23:35         112410 libavcodec.lib
-a----         2023/10/1     23:35          13518 libavdevice.dll.a
-a----         2023/10/1     23:35          13518 libavdevice.lib
-a----         2023/10/1     23:35          42286 libavfilter.dll.a
-a----         2023/10/1     23:35          42286 libavfilter.lib
-a----         2023/10/1     23:35         103864 libavformat.dll.a
-a----         2023/10/1     23:35         103864 libavformat.lib
-a----         2023/10/1     23:35         384570 libavutil.dll.a
-a----         2023/10/1     23:35         384570 libavutil.lib
-a----         2023/10/1     23:35           7514 libpostproc.dll.a
-a----         2023/10/1     23:35           7514 libpostproc.lib
-a----         2023/10/1     23:35          17288 libswresample.dll.a
-a----         2023/10/1     23:35          17288 libswresample.lib
-a----         2023/10/1     23:35          22050 libswscale.dll.a
-a----         2023/10/1     23:35          22050 libswscale.lib

虽然C语言不区分,mingw和msvc编译出来的库,都可以给识别不会产生符号命名歧义。但是c++是严格区分的,mingw编译出来的库就是无法被msvc进行链接。根本原因是,mingw和msvc厂商之间,符号命名规则不同,因此无法兼容。
啊啊啊,你问笔者,如果有一个对接甲方,只提供了msvc的sdk,但是公司使用的是mingw,那么该怎么办呢?
方式一,让甲方提供一个mingw的版本。
方式二,用msvc创建一个c动态库进行内部调用甲方的sdk,然后mingw调用c动态库,以一个c动态库作为中间适配。


ffmpeg命令行

ffmpeg命令格式ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
ffmpeg是一个视频文件编辑的软件,它不是用来播放文件的,适合文件转换,封装,提取之类的操作。如果你需要播放文件,可以使用ffplay进行播放。

查看帮助

// 查看命令行帮助 > 是重定向,你也可以不重定向
ffmpeg -h > ffmpeg_h.txt					// 打印一部分帮助
ffmpeg -h long > ffmpeg_h_long.txt			// 打印更多帮助
ffmpeg -h full > ffmpeg_h_full.txt			// 打印完整帮助// 他们之间的文件大小差距是这样的
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         2023/10/3      9:41          10548 ffmpeg_h.txt
-a----         2023/10/3      9:44        1817436 ffmpeg_h_full.txt
-a----         2023/10/3      9:44          23578 ffmpeg_h_long.txt

常用操作

// 通过重新编码媒体流,将输入媒体文件转换为不同的格式
ffmpeg -i [input.avi] [output.mp4]// 强制设置帧数 -r
ffmpeg -i input.avi -r [24] [output.mp4]// 设置码率 -b:v
ffmpeg -i input.avi -b:v [64k] [output.mp4]// 设置分辨率 -s 
ffmpeg -i [.\SampleVideo_720x480_30mb.mkv] -s [1920x1080] [jie_1920x1080.mp4]// 设置分辨率,-s 不重新编码 -codec copy,copy就是拷贝
ffmpeg -i [.\SampleVideo_720x480_30mb.mkv] -s [1920x1080] -codec [copy] [jie_1920x1080_copy.mp4]

ps:未完,待续...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147596.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

leetCode 376.摆动序列 贪心算法

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 &…

QT 之数据库 QSqlQuery CURD 实战

零、参考文档 https://doc.qt.io/archives/qt-6.0/qsqldatabase.html 一、开发环境 Ubuntu 20.04 QT6.0 Microsoft SQL Server 2022 Developer Edition (64-bit) 先修改 /etc/odbc.ini 的数据源配置,指定连接数据库 vdb, sudo vim /etc/odbc.ini[mss…

基于SpringBoot的社区医院管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

程序员的重复劳动陷阱

https://kb.cnblogs.com/page/627035/ 同样是一样的计算机专业毕业,进入职场的职位和工作都差不多,为何有些程序员短短几年就成长为全能选手或领域专家,有些程序员还在做CRUD? 程序员的重复劳动陷阱 不知道大家有没有这样的感觉…

leetCode 121. 买卖股票的最佳时机 贪心算法

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。…

SpringBoot注册web组件

目录 前言 一、注册Servlet组件 1.1 使用SpringBoot注解加继承HttpServet类注册 1.2 通过继承HttpServet类加配置类来进行注册 二、注册Listener组件 2.1 使用SpringBoot注解和实现ServletContextListener接口注册 2.2 ServletContextListener接口和配置类来进行注册 …

Linux shell编程学习笔记6:查看和设置变量的常用命令

上节我们介绍了变量的变量命名规则、变量类型、使用变量时要注意的事项,今天我们学习一下查看和设置变量的一些常用命令,包括变量的提升,有些命令在之前的实例中已经使用过了。 一、 echo :查看变量的值 语法格式:ech…

PCL 计算点云中值

目录 一、算法原理2、主要函数二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 计算点云坐标的中值点,首先对点云坐标进行排序,然后计算中值。如果点云点的个数为奇数…

【iptables 实战】07 iptables NAT实验

在上一节中,我们将两个网段的机器,通过中间机器的网络转发,能达到互通。再来回顾一下这个网络连接的图 上一节我们在防火墙实验中,设置了主机B的的转发规则,我们先清空主机B的转发规则 [rootlocalhost ~]# iptables…

springboot整合es

springboot整合es 1.引入依赖&#xff08;springboot2.3.x版本可以兼容elasticsearch7.x版本。&#xff09; <parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.3.6.R…

记录:Unity脚本的编写2.0

目录 前言控制方法键盘控制鼠标控制虚拟控制器控制 平移和旋转 前言 前面记录了一些简单的unity脚本用来控制unity中对象模型的移动&#xff08;或者不能叫控制&#xff0c;毕竟它是开启之后自己在跑的&#xff09;&#xff0c;那么让模型可以根据用户的操作来进行变化的方法自…

vue 使用 创建二维数组响应数据 渲染 echarts图标

目前我遇到的情况就是用动态的二维数组数据渲染echarts图标&#xff0c;我们从后端收到的接口一般是个一维数组&#xff0c;需要手动构建并且保证响应式。接下来我做了个案例 一、案例总逻辑 1. 先创建一个vue项目 2. 添加 echarts依赖 3. 模拟数据请求&#xff0c;构建二维数组…

串口数据包收发

数据包 把属于同一批的数据进行打包和分割&#xff0c;方便接收方进行识别 HEX数据包 思路&#xff1a;一个数据规定四个字节&#xff0c;以0xFF为包头&#xff0c;0xFE为包尾&#xff0c;当检测到0xFF时&#xff0c;接下来四个数据就是数据&#xff0c;接收到0xFE时&#x…

Win10系统中GPU深度学习环境配置记录

运行环境 系统&#xff1a;Win10 处理器 Intel(R) Core(TM) i7-9700K CPU 3.60GHz 3.60 GHz 机带 RAM 16.0 GB 设备 ID A18D4ED3-8CA1-4DC6-A6EF-04A33043A5EF 产品 ID 00342-35285-64508-AAOEM 系统类型 64 位操作系统, 基于 x64 的处理器 显卡&#xff1a;NVIDIA GeF…

pycharm一直没显示运行步骤,只是出现waiting for process detach

pycharm一直没显示运行步骤&#xff0c;只是出现waiting for process detach&#xff1b;各类音乐免费软件&#xff1b;最棒的下载torch-geometric-CSDN博客&#xff08;不太推荐&#xff09;我强烈推荐这个&#xff1a;_waiting for process detachhttps://blog.csdn.net/weix…

2023年汉字小达人市级比赛在线模拟题来了,四种练习助力好成绩

2023年第十届汉字小达人比赛区级自由报名活动已于9月30日结束&#xff0c;尽管最终晋级市级比赛的名单还需要在11月初发布&#xff08;有一些学校的校级选拔还没结束&#xff09;&#xff0c;但是许多小朋友已经开始准备市级比赛了。 根据往年的经验&#xff0c;实际比赛也是在…

Android 活动Activity

目录 一、启停活动页面1.1 Activity的启动和结束1.2 Activity的生命周期1.3 Activity的启动模式 二、在活动之间传递消息2.1 显式Intent和隐式Intent2.2 向下一个Activity发送数据2.3 向上一个Activity返回数据 三、补充附加信息3.1 利用资源文件配置字符串3.2 利用元数据传递配…

国庆加速度!新增功能点锁定功能,敏捷开发新增估算功能,助力项目快速突破!

大家好&#xff0c;CoCode开发云旗下Co-Project V3.6智能项目管理平台正式发布&#xff0c;平台新增功能点锁定功能、敏捷开发模式新增估算板块和两种估算方式。 功能点锁定功能进一步提高了项目估算的灵活性和准确性&#xff0c;有利于提高项目估算效率&#xff1b;而敏捷开发…

数据分析:人工智能篇

文章目录 第三章 数据可视化库matplotlib3.1 matplotlib基本绘图操作3.2 plot的线条和颜色3.3 条形图分析3.4 箱型图分析3.5 直方图分析3.6 散点图分析3.7 图表的美化 第四章 数据预测库Sklearn4.1 sklearn预测未来4.2 回归数据的预测4.2.1 回归数据的切分4.2.2 线性回归数据模…

【小尘送书-第六期】《巧用ChatGPT轻松玩转新媒体运营》AI赋能运营全流程,帮你弯道超车、轻松攀登运营之巅

大家好&#xff0c;我是小尘&#xff0c;欢迎你的关注&#xff01;大家可以一起交流学习&#xff01;欢迎大家在CSDN后台私信我&#xff01;一起讨论学习&#xff0c;讨论如何找到满意的工作&#xff01; &#x1f468;‍&#x1f4bb;博主主页&#xff1a;小尘要自信 &#x1…