ubuntu18.04的交叉编译环境,请看我的另一篇博客:https://blog.csdn.net/linyibin_123/article/details/131214295。
如果不想编译可以直接下载我编译好的库:https://download.csdn.net/download/linyibin_123/87966470
1)下载:
git clone https://code.videolan.org/videolan/x264.git
2)配置:
PREFIX_X264=/home/yibin/ffmpeg/build/libx264-build-x86
./configure --cross-prefix=i686-w64-mingw32- --host=i686-w64-mingw32 --enable-pic --enable-static --prefix=/home/yibin/ffmpeg/build/libx264-build-x86
首次配置libx264库 可能出现:Found no assembler 问题。
解决的办法是:将 --disable-asm 添加到命令行,或者安装nasm
3)编译:
make && make install
http://ftp.videolan.org/pub/videolan/x265/
libx265编译需要用到cmake,按如下命令进行cmake环境安装:
sudo apt install cmake
sudo apt-get install cmake-curses-gui
参考:https://blog.csdn.net/m0_37554445/article/details/123727198
1)解压:
tar zxvf x265_3.2.1.tar.gz
2)在x265_3.2/build 目录下新建文件夹:build_i686,然后在新建的文件里创建文件:build.cmake,编辑内容如下:
#!cmake
# this one is important
SET(CMAKE_SYSTEM_NAME Windows)
SET(cross_prefix i686-w64-mingw32-)
# specify the cross compiler
SET(CMAKE_C_COMPILER ${cross_prefix}gcc)
SET(CMAKE_CXX_COMPILER ${cross_prefix}g++)
SET(CMAKE_RC_COMPILER ${cross_prefix}windres)
SET(CMAKE_ASM_NASM_COMPILER nasm)
SET(CMAKE_CXX_FLAGS "-static-libgcc -static-libstdc++ -static -O3 -s")
SET(CMAKE_C_FLAGS "-static-libgcc -static-libstdc++ -static -O3 -s")
SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "-static-libgcc -static-libstdc++ -static -O3 -s")
SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "-static-libgcc -static-libstdc++ -static -O3 -s")
3)命令输入:
PREFIX_X265=/home/yibin/ffmpeg/build/libx265-build-x86
cmake -DCMAKE_TOOLCHAIN_FILE=build.cmake -DCMAKE_INSTALL_PREFIX=${PREFIX_X265} -DENABLE_SHARED=0 -DENABLE_PIC=1 ../../source
make
make install
4)修改生成的x265.pc,新增-lstdc++ -lgcc -lgcc -static
Libs: -L${libdir} -lx265 -lstdc++ -lgcc -lgcc -static
Libs.private: -lstdc++ -lgcc -lgcc
libfaac是一个aac音频编码库,可将采集到的PCM数据编码为aac数据。与MP3相比,AAC是一种编码效果更高,编码音质更好的音频编码格式。FFMpeg可以组成AAC的三种编码器有:aac: FFmpeg本身的AAC编码实现、libaac: 第三方的AAC编码器、libfdk_aac: 第三方的AAC编码器。FDK-AAC库是FFMpeg支持的第三方编码库中质量最高的AAC编码库。
1)下载
git clone https://github.com/mstorsjo/fdk-aac.git
2)配置
./configure --host=i686-w64-mingw32 --prefix=/home/yibin/ffmpeg/build/libfdkaac-build-x86 --enable-static --disable-shared --with-mp4v2=no
3)编译
make && make install
开源字库,是一个开源、高质量、可扩展、可定制、可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括点阵字、TrueType、OpenType、Type1、CID、CFF、Windows FON/FNT、X11 PCF等。libfreetype用于ffmpeg滤镜功能。
freetype2依赖的开发包是zlib, bzip2, libpng, harfbuzz,所以要先安装这些库
1)下载:
http://www.zlib.net/
2)配置:
export CC=i686-w64-mingw32-gcc
./configure --prefix=/home/yibin/ffmpeg/build/zlib-build-x86 --static
3) 编译:
make -j8 && make install
export CC=“”
1)下载:http://download.savannah.gnu.org/releases/freetype/
2)配置:
export PKG_CONFIG_PATH=/home/yibin/ffmpeg/build/libpng-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/zlib-build-x86/lib/pkgconfig
./configure --host=i686-w64-mingw32 CC=i686-w64-mingw32-gcc --prefix=/home/yibin/ffmpeg/build/freetype2-build-x86
3)编译:
make -j8 && make install
libfontconfig是一款字体配置和自定义软件库。
依赖expat。
1)下载:
http://distfiles.macports.org/expat/
2)配置编译:
./configure --without-tests --without-examples --prefix=/home/yibin/ffmpeg/build/expat-build-x86 --host=mingw32 CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++
make && make install
1)下载
https://www.freedesktop.org/software/fontconfig/release/
2)配置编译:
export CC=i686-w64-mingw32-gcc
./configure --host=i686-w64-mingw32 --prefix=/home/yibin/ffmpeg/build/libfontconfig-build-x86 FREETYPE_LIBS='-lfreetype -L/home/yibin/ffmpeg/build/freetype2-build-x86/lib' FREETYPE_CFLAGS=-I/home/yibin/ffmpeg/build/freetype2-build-x86/include/freetype2
1)下载
https://www.linuxfromscratch.org/blfs/view/svn/general/fribidi.html
2) 配置编译:
export CC=i686-w64-mingw32-gcc
./configure --host=i686-w64-mingw32 --prefix=/home/yibin/ffmpeg/build/libfribidi-build-x86 --enable-static --disable-shared
export PKG_CONFIG_PATH=/home/yibin/ffmpeg/build/libx264-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/libx265-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/libfdkaac-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/zlib-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/libpng-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/freetype2-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/libfribidi-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/expat-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/libfontconfig-build-x86/pkgconfig
注意:加入 libx264与libx265就不能启用编译ffplay,可能是SDL库与libx264、libx265库冲突导致
./configure --enable-static --enable-shared --enable-version3 --enable-gpl --enable-libx264 --extra-cflags="-I/home/yibin/ffmpeg/build/libx264-build-x86/include" --extra-ldflags="-L/home/yibin/ffmpeg/build/libx264-build-x86/lib -static" --enable-libx265 --extra-cflags="-I/home/yibin/ffmpeg/build/libx265-build-x86/include" --extra-ldflags="-L/home/yibin/ffmpeg/build/libx265-build-x86/lib" --enable-asm --enable-nonfree --enable-openssl --enable-protocols --enable-protocol=https --extra-cflags="-I/home/yibin/ffmpeg/build/openssl-build-x86/include/openssl" --extra-ldflags='-static-libgcc' --extra-ldflags="-L/home/yibin/ffmpeg/build/openssl-build-x86/lib" --disable-pthreads --enable-w32threads --enable-cross-compile --target-os=mingw32 --arch=x86 --enable-small --prefix=/home/yibin/ffmpeg/build/ffmpeg-build-x86 --extra-version=avbuild --disable-doc --enable-runtime-cpudetect --disable-ptx-compression --enable-mediafoundation --disable-vulkan --disable-postproc --disable-htmlpages --cross-prefix=i686-w64-mingw32- --disable-indevs --disable-outdevs --disable-debug --enable-hwaccels --enable-dxva2 --enable-libfreetype --extra-cflags="-I/home/yibin/ffmpeg/build/freetype2-build-x86/include" --extra-ldflags="-L/home/yibin/ffmpeg/build/freetype2-build-x86/lib" --enable-libfdk-aac --extra-cflags="-I/home/yibin/ffmpeg/build/libfdkaac-build-x86/include" --extra-ldflags="-L/home/yibin/ffmpeg/build/libfdkaac-build-x86/lib" --enable-libfontconfig --extra-cflags="-I/home/yibin/ffmpeg/build/libfontconfig-build-x86/include" --extra-ldflags="-L/home/yibin/ffmpeg/build/libfontconfig-build-x86/lib" --enable-libfribidi --extra-cflags="-I/home/yibin/ffmpeg/build/libfribidi-build-x86/include/fribidi" --extra-ldflags="-L/home/yibin/ffmpeg/build/libfribidi-build-x86/lib" --pkg-config-flags="--static"
以上配置说明:
1)–extra-ldflags=“-L/home/yibin/ffmpeg/build/libx264-build-x86/lib -static”
ffmpeg默认链接的是动态库,所以会出现该编译错误:
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_param_default,函数 _X264_init 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_param_parse,函数 _X264_init 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_param_cleanup,函数 _X264_close 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_param_default_preset,函数 _X264_init 中引用了该符号
在–extra-ldflags中加了“-static”可以解决。
2)–pkg-config-flags=“–static”
加入–pkg-config-flags=“–static” 可以解决ffmpeg对第三方库静态链接问题.
make && make install
查看 FFmpeg 已安装的编码器:
ffmpeg -encoders
ffmpeg -i input-h265.mp4 -c:v libx264 -x264-params threads=1:br:1000:maxrate=1000:minrate=1000:bufsize=1000 out.mp4
ffmpeg -i input-h264.mp4 -c:v libx265 -x265-params threads=1:br:1000:maxrate=1000:minrate=1000:bufsize=1000 out.mp4
ffmpeg -i iuput.wav -c:a libfdk_aac -b:a 128k output.m4a
FFmpeg使用libfdk_aac将input.wav转为恒定码率为128kbit/s 编码为AAC的output.m4a音频文件
相关使用看:https://zhuanlan.zhihu.com/p/605496943
可以用:ffmpeg --help filter=drawtext 查看滤镜功能参数。
如果想要使用drawtext,编译时需要加上–enable-libfreetype。
如果要选择多种字体,需要加上–enable-libfontconfig。
如果还需要字体变形,需要加上–enable-libfribidi。
1)添加文字:
ffmpeg -i input-h264.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':x=20:y=20" output.mp4
2)添加图片:
ffmpeg -i input.mp4 -vf "movie=logo.png[wm]; [in][wm]overlay=30:10[out]" output.mp4
参考:
https://blog.csdn.net/migu123/article/details/129314333 https://blog.csdn.net/u014552102/article/details/104442111
librtmp是一个开源的基于C语言的库,提供了一个连接RTMP服务器,发送和接收RTMP流的API。它可以用来开发流媒体播放器,网络直播等应用。它的主要特点是快速、稳定和低延迟。
librtmp支持RTMP,RTMPS,RTMPE和RTMPTE加密协议等多种协议。除此之外,它还支持PProxy,PPlayer和appspot的代理服务器协议。在Linux下,使用librtmp开发的应用可以支持Windows,Android等多种系统平台。
librtmp的核心代码是基于ffmpeg中的libavformat库实现的。它依赖于libz, libssl, libcrypto等第三方库,需要自行编译安装。
下载:
git clone git://git.ffmpeg.org/rtmpdump
编译:
make CROSS_COMPILE=i686-w64-mingw32- INC=“-I/home/yibin/ffmpeg/build/openssl-build-x86/include -I/home/yibin/ffmpeg/build/zlib-build-x86/include” XLDFLAGS=“-L/home/yibin/ffmpeg/build/openssl-build-x86/lib -L/home/yibin/ffmpeg/build/zlib-build-x86/lib” SYS=mingw32 prefix=/home/yibin/ffmpeg/build/rtmp-build-x86 install
mp3编码库
CFLAGS=-DFORCEINLINE= ./configure --host=i686-w64-mingw32 --prefix=/home/×××/Desktop/ffmpeg282/opensdk --enable-static --disable-shared --disable-frontend
make
make install
“Speex编解码器的libspeex包囊括了所有的语音编码和解码函数。libspeexdsp静态库,库里面包含了预处理器、声学回音消除器、重采样器、自适应抖动缓冲器等相关的函数。 testdenoise:测试噪音抑制。 testecho:测试声学回音消除。
Xvid MPEG-4 Part 2 的封装
libtheora选项 对品质和码率产生影响
“libvorbis是Xiph 组织自行研发的音频压缩解压编码器,一般将 Vorbis 数据封装到 ogg 文件里面,这个库是用来解码和编码 Vorbis 音频数据的,但是,还需要 libogg 来将经过编码的音频数据从 ogg 文件里面释放出来才行,也就是说,需要配合 libogg 和 libvorbis 一起使用,才能解码出 ogg 文件里面的音频数据
./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --enable-static --disable-shared
“OpenJPEG是一种基于C语言的开源编解码器,用于压缩和解压缩JPEG2000图像。与其他图像格式不同,JPEG2000具有高压缩率、高质量、多分辨率和无损压缩等特点,被广泛应用于医学图像处理、卫星遥感图像处理、高清视频传输等领域。 OpenJPEG不仅提供了基本的编解码功能,还支持数据流式处理、各种压缩选项以及与其他格式的转换等多种高级功能。
Ogg全称是OGGVobis(oggVorbis)是一种音频压缩格式,类似于MP3等的音乐格式。Ogg是完全免费、开放和没有专利限制的。OggVorbis文件的扩展名是".ogg"。Ogg文件格式可以不断地进行大小和音质的改良,而不影响旧有的编码器或播放器。
./configure --host=i686-w64-mingw32 --prefix=/home/×××/Desktop/ffmpeg282/opensdk --enable-static --disable-shared
make
make install
参考下:
https://blog.csdn.net/haiyangyunbao813/article/details/107829583
https://github.com/lu-zero/mfx_dispatch
autoreconf -i
./configure --host=i686-w64-mingw32
make -j$(nproc)
make install DESTDIR=/usr/x86_64-w64-mingw32
./configure --cross-prefix=i686-w64-mingw32- --host=i686-w64-mingw32 --prefix=/home/yibin/ffmpeg/build/libmfx-build-x86 --enable-static --disable-shared
https://github.com/Intel-Media-SDK/MediaSDK/releases
qsv依赖mfx库, libmfx 是 Intel 的专有库,用于在 Linux 和 Windows 上使用 Quick Sync 硬件。在 Windows 上,它是比使用 DXVA2/D3D11VA 访问之外的更高级功能的主要方式,尤其是编码。在 Linux 上,它有一些不同的功能集,有助于某些需要最大吞吐量的用例。