FFmpeg(7.1版本)在Ubuntu18.04上的编译
一、从官网上下载FFmpeg源码
官网地址:Download FFmpeg
点击Download Source Code 下载源码到本地电脑上
二、解压包
tar -xvf ffmpeg-7.1.tar.xz
三、配置configure
1.准备工作
安装编译支持的软件
① sudo apt-get install nasm //常用的汇编器,用于编译某些需要汇编代码的软件,比如FFmpeg。
2. 创建build.sh脚本
build.sh
#! /bin/bash
SYSTEM=`uname` # 用于显示操作系统名称
MY_DIR=`pwd` # 获取当前目录的绝对路径
PREFIX=${MY_DIR}/out # 输出目录,用于存放生成好的二进制文件
cpu_num=`cat /proc/stat | grep cpu[0-9] -c` # 用于获取当前系统的cpu数量
CLONE_GIT_COMMAND="git clone " # git clone
# enableShared=[treu/false]
enableShared=true # true编译动态库,false编译静态库(全局配置)
startTime=`date +%Y%m%d-%H:%M:%S`
startTime_s=`date +%s`
if [ -e "out" ]; then
rm -rf out
fi
mkdir out
mkdir out/bin
#. build_pkg_config.sh
#. build_libfdk_aac.sh
#. build_libmp3lame.sh
#. build_libopus.sh
#. build_sdl2.sh
#. build_yasm.sh
#. build_libvpx.sh
#. build_libx264.sh
#. build_libx265.sh
# mac --cc=clang
# 禁用编译器优化选项 --disable-optimizations
# 编译libmp3lame需要使用到--extra-cflags和--extra-ldflags属性
# build FFmpeg start
PATH=$PATH:$PREFIX/lib # 设置环境变量,将$PREFIX/bin目录下的可执行二进制文件设置进去,方便调用
PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig"
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
FFMPEG="FFmpeg"
# 通用配置
COMMON_FFMPEG_CONFIGURE_COMMAND="./configure
--prefix=$PREFIX
--extra-cflags=-I$PREFIX/include
--extra-ldflags=-L$PREFIX/lib
--pkg-config-flags="--static"
--extra-libs="-lpthread"
--enable-ffplay
--enable-gpl
--enable-version3
--disable-optimizations
--enable-debug
--enable-nonfree
--enable-filter=delogo
"
if [[ "$enableShared" == true ]]; then
COMMON_FFMPEG_CONFIGURE_COMMAND=$COMMON_FFMPEG_CONFIGURE_COMMAND"
--enable-shared
--disable-static
"
else
COMMON_FFMPEG_CONFIGURE_COMMAND=$COMMON_FFMPEG_CONFIGURE_COMMAND"
--enable-static
--disable-shared
"
fi
# linux配置
LINUX_FFMPEG_CONFIGURE_COMMAND=$COMMON_FFMPEG_CONFIGURE_COMMAND"
--disable-libx264
--disable-libx265
--disable-libfdk-aac
--disable-libmp3lame
--disable-libopus
--disable-libvpx
"
# mac配置
MAC_CONFIGURE_COMMAND=$COMMON_FFMPEG_CONFIGURE_COMMAND"
--enable-libfdk-aac
--enable-libx264
--enable-libmp3lame
--enable-hardcoded-tables
--host-cflags=
--host-ldflags=
--cc=clang
"
#FFMPEG_GIT_URL="git@github.com:FFmpeg/FFmpeg.git"
#if [ ! -e $FFMPEG ]; then
# echo "==========================clone FFmpeg=========================="
# $CLONE_GIT_COMMAND$FFMPEG_GIT_URL
#fi
echo "==========================build ffmpeg=========================="
if [[ $SYSTEM == "Darwin" ]]; then
$MAC_FFMPEG_CONFIGURE_COMMAND
else
$LINUX_FFMPEG_CONFIGURE_COMMAND
fi
make clean
make -j${cpu_num}
make install
echo "==========================ffmpeg build successful!=========================="
endTime=`date +%Y%m%d-%H:%M:%S`
endTime_s=`date +%s`
sumTime=$[ $endTime_s - $startTime_s ]
echo "Total Compilation Time $sumTime seconds"
echo "==========================test ffmpeg!=========================="
if [[ "$enableShared" == true ]]; then
export LD_LIBRARY_PATH=$MY_DIR/out/lib/
cd $MY_DIR/out/bin
./ffmpeg -version
else
cd $MY_DIR/out/bin
./ffmpeg -version
fi
3.运行脚本,编译
① 添加执行权限:
chmod 777 build.sh
② 运行:
./build.sh
③ 运行成功后,编译结果如下:
④ 在out目录下,有四个目录,他们分别是:
bin目录:生成的可执行文件存放的地方
include目录:头文件存放的地方
lib目录:编译好的动态库或者静态库存放的地方
share目录:其它的资源文件
四、ffmpeg-7.1的源码和编译的脚本上传到gitee,方便大家参考学习!
gitee地址:ffmpeg: 音视频
commit ad3b2a67bd6e87860d764603bba5eb0617ca5334