FFmpeg在Ubuntu下的编译

本文详细介绍了如何在Ubuntu环境下编译FFmpeg,包括准备编译环境、下载及配置FFmpeg、编写并执行编译脚本,以及解决常见错误的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FFmpeg在Ubuntu下的编译

环境

VMware Workstation14
Ubuntu 18.04.2LTS(安装流程参考
android-ndk-r19c
ffmpeg-4.2.1(解压)

从官网下载FFmpeg(文档编辑时版本 ffmpeg-4.1.4)
将下载下来的ffmpeg进行解压
(文档编辑时版本 ndk-14b)

编译前的准备工作

  1. 下载FFmpeg并解压到共享文件夹
  2. 去Android官网下载ndk,解压到共享文件夹;
  3. 进入已解压的ffmpeg文件目录,修改configure文件;
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'

修改为

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
  1. 编写build_android.sh的可执行文件(文件保存到FFmpeg解压的文件夹下);
#!/bin/bash
# 清空上次的编译
make clean
#你自己的NDK路径.
export NDK=/home/anjoiner/Documents/AnJoiner/ffmpeg/ndk
function build_android
{
echo "Compiling FFmpeg for $CPU"
./configure \
    --prefix=$PREFIX \
    --enable-neon \
    --enable-hwaccels \
    --enable-gpl \
    --enable-postproc \
    --enable-shared \
    --enable-jni \
    --enable-mediacodec \
    --enable-decoder=h264_mediacodec \
    --disable-static \
    --disable-doc \
    --enable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --enable-avdevice \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$CROSS_PREFIX \
    --target-os=android \
    --arch=$ARCH \
    --cpu=$CPU \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}

#armv8-a
ARCH=arm64
CPU=armv8-a
TOOLCHAIN=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
SYSROOT=$NDK/platforms/android-21/arch-$ARCH/
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU"
build_android

#armv7-a
ARCH=arm
CPU=armv7-a
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
SYSROOT=$NDK/platforms/android-21/arch-$ARCH/
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
build_android

#x86
ARCH=x86
CPU=x86
TOOLCHAIN=$NDK/toolchains/x86-4.9/prebuilt/linux-x86_64
SYSROOT=$NDK/platforms/android-21/arch-$ARCH/
CROSS_PREFIX=$TOOLCHAIN/bin/i686-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
build_android

#x86_64
ARCH=x86_64
CPU=x86-64
TOOLCHAIN=$NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64
SYSROOT=$NDK/platforms/android-21/arch-$ARCH/
CROSS_PREFIX=$TOOLCHAIN/bin/x86_64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU -msse4.2 -mpopcnt -m64 -mtune=intel"
build_android

  1. 安装必要的编译库;
sudo apt-get install make
sudo apt-get install gcc
  1. 执行FFmpeg源码的配置命./configure(build_android.sh执行前)

    执行该句命令,如果报错:nasm/yasm not found or too old.则需要安装yasm,可以执行命令sudo apt-get install yasm,或者按照提示执行./configure --disable-x86asm
    安装完成好,再次执行FFmpeg源码的配置命令,yasm的错误信息已消除,但出现如下警告信息:

WARNING: pkg-config not found, library detection may fail.

执行安装命令sudo apt-get install pkg-config

再次执行FFmpeg源码的配置命令./configure

  1. 执行编译FFmpeg命令./build_android.sh;
    如果出现/bin/bash^M: 解释器错误: 没有那个文件或目录,可以使用命令行 bash build_android.sh
    如果出现

    这是由于在Windows下添加命令语句,行末尾自动添加\r,需要修改为Linux的结尾,即去除\r。 可以执行命令行sed -i 's/\r$//' build.sh, 会把 build.sh 中的\r 替换成空白

ok,执行完编译命令./build_android.sh后,静等编译完成

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值