Ubuntu环境下编译FFmpeg的流程 短命女 2023-01-01 02:52 210阅读 0赞 **Ubuntu环境下编译FFmpeg的流程** 1. **在Windows10系统下,安装Ubuntu系统** 不需要安装虚拟机,使用Window10自带的ubuntu引导程序安装ubuntu系统。 安装步骤: 1. ,控制面板->程序->启用或关闭Windows功能 打开 适用于Linux的Windows子系统 选项。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbjIwMDQ0MTQwNDEw_size_16_color_FFFFFF_t_70][] 1. 在Microsoft Store中搜索ubuntu,如果有多个版本,建议选择\*\*.04的版本是最稳定的,除了\*\*.04版本,可能还会有\*\*.10版本。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbjIwMDQ0MTQwNDEw_size_16_color_FFFFFF_t_70 1][] 1. 选择之后,就进入安装过程。。。,中间要输入用户名密码,等待完成。 1. **环境配置** 1. ,替换软件源,就是把ubuntu默认的国外的源替换成国内的源,如清华、阿里的,目的是更新软件时更快。vim /etc/apt/sources.list deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse 可以事先把原来的内容做个备份,这里是更换的阿里的源,需要注意的是要根据ubuntu的不同版本,来替换。 1. 更新软件库 sudo apt update sudo apt upgrad 如果需要中文版,可以去安装中文语言包。如需图形界面,也要另外安装。 1. 由于win10自带的ubuntu不包含gcc,g++,需要另外安装。 sudo apt install gcc 安装后,可以测试编译下HelloWorld.c, 如不能正常编译: 1. 查看盘符: Ubuntu下,查看对应window的盘符:/mnt/d,/mnt/c Window下查看ubuntu的文件系统: C:\\Users\\jianlin\\AppData\\Local\\Packages\\CanonicalGroupLimited.Ubuntu20.04onWindows\_79rhkp1fndgsc\\LocalState\\rootfs 1. **编译FFmpeg** 1. 下载 Git clone [https://github.com/FFmpeg/FFmpeg.git][https_github.com_FFmpeg_FFmpeg.git] 因为要用NDK编译用于android平台的FFmpeg,要下载linux的android sdk 1. 在FFmpeg目录下,创建编译脚本 build\_bash.sh 1. 编译脚本 这里只编译了arm64-v8a平台的库。 脚本中的编译选择,如要支持那些格式的编解码,要编译静态库,还是动态库,都在FFmpeg目录下的configure文件中。 -extra-cflags fPIC,编译共享库时,告诉编译器产生与位置无关的代码, -mfpu=neon-vfp4 ARM平台的指令编译优化,NEON+VFP结构 -mfloat-abi=hard or softfp, -marm -O0~3 开启编译器优化,-O0为不优化,-O3为最高级别的优化 -mthumb 使编译器生成THUMB指令 -mthumb-interwork 使编译器生成支持ARM和Thumb指令集之间相互调用的代码,默认是-mno-thumb-interwork 以下是脚本代码: #!/bin/bash NDK=/home/jianlinwang/android-ndk/android-ndk-r21b TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64 API=26 #--enable-debug=3 --disable-debug function build_android { echo "Compiling FFmpeg for $CPU" ./configure \ --target-os=android \ --logfile=$FILE \ --prefix=$PREFIX \ --bindir=$DIR \ --enable-neon \ --enable-hwaccels \ --enable-gpl \ --disable-debug \ --disable-postproc \ --enable-shared \ --enable-static \ --enable-jni \ --enable-small \ --enable-mediacodec \ --enable-decoder=h264_mediacodec \ --disable-doc \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-avdevice \ --disable-symver \ --cross-prefix=$CROSS_PREFIX \ --arch=$ARCH \ --cpu=$CPU \ --cc=$CC \ --cxx=$CXX \ --enable-cross-compile \ --sysroot=$SYSROOT \ --extra-cflags="-Os -fPIC -DANDROID -marm $OPTIMIZE_CFLAGS" \ --extra-ldflags="$ADDI_LDFLAGS" \ $ADDITIONAL_CONFIGURE_FLAG make clean make make install echo "The Compilation of FFmpeg for $CPU is completed" cp -avx $PREFIX/ /mnt/d/FFmpeg-build/$CPU cp -avx $DIR/ /mnt/d/FFmpeg-build/$CPU cp -f $FILE /mnt/d/FFmpeg-build/$CPU } #armv-7a ARCH=arm CPU=armv7-a CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++ SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi- PREFIX=$(pwd)/android/$CPU OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mthumb -mfpu=neon -march=$CPU" FILE=$(pwd)/android/config.log DIR=$(pwd)/android/bin build_android #armv8-a ARCH=arm64 CPU=armv8-a CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++ SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android- PREFIX=$(pwd)/android/$CPU OPTIMIZE_CFLAGS="-mfloat-abi=hard -mfpu=neon-vfp4 -mthumb-interwork -march=$CPU" FILE=$(pwd)/android/config.log DIR=$(pwd)/android/bin #build_android 1. 编译结果 Bin目录下是可执行文件(这个需要编译window平台下的版本才好用) Include 项目中导入ffmpeg库时,需要导入的头文件 Lib 静态库,动态库 Share 使用范例代码 Config.log 编译log,从这里log可以看出,编译出的库对编解码格式的支持情况。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbjIwMDQ0MTQwNDEw_size_16_color_FFFFFF_t_70 2][] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbjIwMDQ0MTQwNDEw_size_16_color_FFFFFF_t_70]: /images/20221120/bc93b53bd58a4a3aac28ce9e5449fead.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbjIwMDQ0MTQwNDEw_size_16_color_FFFFFF_t_70 1]: /images/20221120/6e292d857e774bdb9caa71a4bde1314c.png [https_github.com_FFmpeg_FFmpeg.git]: https://github.com/FFmpeg/FFmpeg.git [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbjIwMDQ0MTQwNDEw_size_16_color_FFFFFF_t_70 2]: https://img-blog.csdnimg.cn/20201230191827629.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbjIwMDQ0MTQwNDEw,size_16,color_FFFFFF,t_70
还没有评论,来说两句吧...