当前位置: 首页 > article >正文

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


http://www.kler.cn/a/527175.html

相关文章:

  • PCA9685 一款由 NXP Semiconductors 生产的 16 通道、12 位 PWM(脉宽调制)控制器芯片
  • 玩转大语言模型——使用langchain和Ollama本地部署大语言模型
  • SpringBoot+Vue的理解(含axios/ajax)-前后端交互前端篇
  • 01. 计算机系统
  • 「 机器人 」扑翼飞行器控制策略浅谈
  • 10.3 LangChain实战指南:解锁大模型应用的10大核心场景与架构设计
  • 【二叉搜索树】
  • 2025-1-28-sklearn学习(47) (48) 万家灯火亮年至,一声烟花开新来。
  • Linux网络编程中的零拷贝:提升性能的秘密武器
  • 【PLL】参考杂散计算example
  • C++ 中的类(class)和对象(object)
  • P11467 网瘾竞赛篇之 generals 大法好
  • Java中的线程池参数(详解)
  • Python 学习进阶技术文档
  • Keepalived高可用集群入门学习
  • electron 应用开发实践
  • Android逆向(Mitmproxy)
  • 【自学笔记】JavaWeb的重点知识点-持续更新
  • Oracle11g数据库安装及建库教程
  • JavaScript 创建对象的8种方式?
  • Git进阶之旅:tag 标签 IDEA 整合 Git
  • 算法总结-数组/字符串
  • Linux 五种IO模型总篇(阻塞IO、非阻塞IO、信号驱动IO、多路复用IO(select、poll、epoll)、异步IO)
  • 仿真设计|基于51单片机的温湿度及甲醛检测报警系统
  • OPENPPP2 —— VMUX_NET 多路复用原理剖析
  • DeepSeek R1功能设计涉及的几个关键词