ffmpeg开发环境搭建(ubuntu18.04 和mac)

news2024/11/20 20:31:24

文章目录

  • 1、MAC开发环境
    • 1.1、安装brew
    • 1.2、 Homebrew使⽤
    • 1.3、下载FFmpeg 4.2版本
    • 1.4、安装第三方库
    • 1.5、 安装SDL2
    • 1.6、配置编译ffmpeg
  • 2、ubuntu18.04开发环境搭建
    • 2.1、安装Qt5.12
    • 2.2、开始编译ffmpeg

1、MAC开发环境

1.1、安装brew

根据提示,输⼊密码就可以⼀步⼀步装成功。 如果之前没有安装xcode,则会提示安装xcode,安装完xcode后,我们需要再次安装brew

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

1.2、 Homebrew使⽤

安装:brew install 软件名,
例:brew install git 搜索:brew search 软件名,
例:brew search git 卸载:brew uninstall 软件名,
例:brew uninstall git 更新所有:brew update 注意:因为brew update会通过git命令来更新,
所以必须先安装git 更新具体软件:brew upgrade 软件名 ,
例:brew upgrade git

1.3、下载FFmpeg 4.2版本

git clone git://source.ffmpeg.org/ffmpeg.git
码云
git clone https://gitee.com/mirrors/ffmpeg.git
cd ffmpeg

# 查看版本
git branch -a

# 选择4.2版本
git checkout remotes/origin/release/4.2

1.4、安装第三方库

brew install --build-from-source automake
brew install fdk-aac
brew install lame
brew install libass
brew install libtool
brew install libvorbis
brew install libvpx
brew install libvo-aacenc
brew install opencore-amr
brew install openjpeg
brew install opus
brew install speex
brew install texi2html
brew install x264
brew install --build-from-source x265
brew install xvid
brew install yasm
brew install freetype
brew install pkg-config 
brew install schroedinger
brew install shtool
brew install --build-from-source theora
brew install --build-from-source wget

1、安装过程中,如果出现缺少xcode-select --install

xcode-select --install	// 安装命令
xcode-select --version	// 查看版本

// 恢复默认设置(需要sudo权限)
sudo xcode-select --reset

2、再次尝试下载,如果出现

Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP. Hide these hints with HOMEBREW

export HOMEBREW_NO_INSTALL_CLEANUP=TRUE

再次重新下载

1.5、 安装SDL2

 brew install --build-from-source sdl2

1.6、配置编译ffmpeg

./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --disable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-static --enable-shared --enable-openssl
./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --disable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --extra-cflags=-I/usr/local/Homebrew/Cellar/opencore-amr/0.1.6/include --extra-ldflags=-L/usr/local/Homebrew/Cellar/opencore-amr/0.1.6/lib --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libspeex --enable-libtheora --extra-cflags=-I/usr/local/Homebrew/Cellar/theora/1.1.1/include --extra-ldflags=-L/usr/local/Homebrew/Cellar/theora/1.1.1/lib --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-static --enable-shared --enable-openssl

出现错误:
ERROR: libmp3lame >= 3.98.3 not found

# 然后在执行编译指令
brew install lame

1、编译:

make -j4
sudo make install

2、配置环境变量

export PATH="$PATH:/usr/local/ffmpeg/bin"
source ~/.base_profile

2、ubuntu18.04开发环境搭建

2.1、安装Qt5.12

qt5.12网址下载

https://download.qt.io/archive/qt/5.12/5.12.10/

在这里插入图片描述
1、进入安装包路径
cd (刚才下载存放的目录下)

2、安装包赋权限
sudo chmod +x qt-opensource-linux-x64-5.12.10.run

3、开始安装。
sudo ./qt-opensource-linux-x64-5.12.10.run

在这里插入图片描述
4、启动qt

cd /opt/Qt5.12.10/Tools/QtCreator/bin
./qtcreator

5、如果出现报错

Got keys from plugin meta data ("xcb")
QFactoryLoader::QFactoryLoader() checking directory path "/opt/Qt5.12.10/Tools/QtCreator/bin/platforms" ...
loaded library "/opt/Qt5.12.10/Tools/QtCreator/lib/Qt/plugins/platforms/libqxcb.so"
qt.qpa.xcb: could not connect to display
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.

Aborted (core dumped)

解决方法

# 修改配置文件
vim ~/.bashrc

# 在最末尾添加如下语句,会在执行程序时,列出详细的错误提示:
export QT_DEBUG_PLUGINS=1

# 刷新配置文件
source ~/.bashrc

继续运行,如果仍然有错误继续执行:

1、这个错误信息表明在启动应用程序时,无法加载 Qt 平台插件 “xcb”。可能会有几个原因导致这个问题出现,其中一个可能是缺少一个或多个必需的库文件。你可以采取以下步骤来解决问题:
检查是否已安装 xcb 相关的库文件。在 Ubuntu 系统上,你可以使用以下命令进行安装:
Copy

sudo apt-get install libxcb-xinerama0
确保你的环境变量中包含了正确的 Qt 库路径。你可以使用以下命令来查看 Qt 库路径:

echo $LD_LIBRARY_PATH
在输出中,你应该能够看到包含 Qt 库的路径。如果没有,你可以使用以下命令将它添加到环境变量中:
export LD_LIBRARY_PATH=/path/to/Qt/lib:$LD_LIBRARY_PATH
请确保将上面的 /path/to/Qt/lib 替换为你的 Qt 库路径。

确保你的 DISPLAY 环境变量已经设置。在终端中输入以下命令来检查 DISPLAY 环境变量的值:

echo $DISPLAY
如果没有输出,或者输出为空,则表示 DISPLAY 环境变量没有设置。你可以使用以下命令将其设置为默认值:

export DISPLAY=:0
如果你使用的是远程桌面连接,则需要将 DISPLAY 变量设置为远程桌面服务器的 IP 地址和端口号。

2.2、开始编译ffmpeg

1、创建目录
在home目录下创建
ffmpeg_sources:用于下载源文件
ffmpeg_build: 存储编译后的库文件
bin:存储二进制文件(ffmpeg,ffplay,ffprobe,X264,X265等)
cd ~
mkdir ffmpeg_sources ffmpeg_build bin

2、安装依赖

更新
sudo apt-get update
安装需要的组件
sudo apt-get -y install
autoconf
automake
build-essential
cmake
git-core
libass-dev
libfreetype6-dev
libsdl2-dev
libtool
libva-dev
libvdpau-dev
libvorbis-dev
libxcb1-dev
libxcb-shm0-dev
libxcb-xfixes0-dev
pkg-config
texinfo
wget
zlib1g-dev

补充安装:
sudo apt-get install libasound2-dev
sudo apt-get install libgl1-mesa-dev
sudo apt-get install libglew-dev
sudo apt-get install libglm-dev

3、编译与安装

# NASM
# 部分库使用到汇编程序。
# 使用源码进行安装
cd ~/ffmpeg_sources && \
wget https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.bz2 && \
tar xjvf nasm-2.14.02.tar.bz2 && \
cd nasm-2.14.02 && \
./autogen.sh && \
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
make && \
make install


# Yasm
# 部分库使用到该汇编库
# 使用源码进行安装:
cd ~/ffmpeg_sources && \
wget -O yasm-1.3.0.tar.gz https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz && \
tar xzvf yasm-1.3.0.tar.gz && \
cd yasm-1.3.0 && \
./configure   CFLAGS="-fPIC" CPPFLAGS="-fPIC"  --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
make && \
make install

# libx264
# H.264视频编码器。更多信息和使用范例参考H.264 Encoding Guide
# 要求编译ffmpeg时配置:--enable-gpl --enable-libx264.
# 使用源码进行编译:
cd ~/ffmpeg_sources && \
git -C x264 pull 2> /dev/null || git clone --depth 1 https://github.com/mirror/x264.git && \
cd x264 && \
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --enable-pic && \
PATH="$HOME/bin:$PATH" make && \
make install

# libx265
# H.265/HEVC 视频编码器, 更多信息和使用范例参考H.265 Encoding Guide。
# 要求编译ffmpeg时配置:--enable-gpl --enable-libx265.
# 使用源码进行编译:
sudo apt-get install mercurial libnuma-dev && \
cd ~/ffmpeg_sources && \

if cd x265 2> /dev/null; then git pull && cd ..; else git clone https://gitee.com/mirrors_videolan/x265.git; fi && \
cd x265/build/linux && \
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off ../../source && \
PATH="$HOME/bin:$PATH" make && \
make install

# libvpx
# VP8/VP9视频编解码器。 更多信息和使用范例参考VP9 Video Encoding Guide 。
# 要求编译ffmpeg时配置: --enable-libvpx.
# 使用源码进行编译:
cd ~/ffmpeg_sources && \
git -C libvpx pull 2> /dev/null || git clone --depth 1 https://github.com/webmproject/libvpx.git && \
cd libvpx && \
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm --enable-pic && \
PATH="$HOME/bin:$PATH" make && \
make install

# libfdk-aac
# AAC音频编码器. 更多信息和使用范例参考AAC Audio Encoding Guide。
# 要求编译ffmpeg时配置:--enable-libfdk-aac ( 如果你已经配置了 --enable-gpl则需要加上--enable-nonfree).
# 使用源码进行编译:
cd ~/ffmpeg_sources && \
git -C fdk-aac pull 2> /dev/null || git clone --depth 1 https://github.com/mstorsjo/fdk-aac && \
cd fdk-aac && \
autoreconf -fiv && \
./configure CFLAGS="-fPIC" CPPFLAGS="-fPIC" --prefix="$HOME/ffmpeg_build"   && \
make && \
make install

# libmp3lame
# MP3音频编码器.
# 要求编译ffmpeg时配置:--enable-libmp3lame.
# 使用源码进行编译:
cd ~/ffmpeg_sources && \
git clone  --depth 1 https://gitee.com/hqiu/lame.git && \
cd lame && \
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"  --enable-nasm --with-pic && \
PATH="$HOME/bin:$PATH" make && \
make install

# libopus
# Opus音频编解码器.
# 要求编译ffmpeg时配置:--enable-libopus.
# 使用源码进行编译:
cd ~/ffmpeg_sources && \
git -C opus pull 2> /dev/null || git clone --depth 1 https://github.com/xiph/opus.git && \
cd opus && \
./autogen.sh && \
./configure --prefix="$HOME/ffmpeg_build"  -with-pic&& \
make && \
make install

4、编译FFmpeg

cd ~/ffmpeg_sources && \
wget -O ffmpeg-4.2.1.tar.bz2 https://ffmpeg.org/releases/ffmpeg-4.2.1.tar.bz2 && \
tar xjvf ffmpeg-4.2.1.tar.bz2 && \
cd ffmpeg-4.2.1 && \
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" CFLAGS="-O3 -fPIC" ./configure \
  --prefix="$HOME/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --extra-cflags="-I$HOME/ffmpeg_build/include" \
  --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
  --extra-libs="-lpthread -lm" \
  --bindir="$HOME/bin" \
  --enable-gpl \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-pic \
  --enable-shared   \
  --enable-nonfree && \
PATH="$HOME/bin:$PATH" make && \
make install && \
hash -r

如果出现ERROR: libmp3lame >= 3.98.3 not found错误

sudo apt-get install libmp3lame-dev

5、测试使用

./ffmpeg -version

在这里插入图片描述

1、编辑和修改/etc/ld.so.conf
sudo vim /etc/ld.so.conf

/root/ffmpeg_build/lib
  1. 使环境变量生效然后:
    sudo ldconfig
    在这里插入图片描述
    3、如果命令行没有提示
    将bin目录添加到环境变量中
vi /etc/environment

# 添加一行
PATH="$PATH:/root/bin"

# 刷新
source /etc/environment

ffmpeg -version

6、支持FFmpeg 代码 Debug

刚才的工程可以运行,但不能debug。解决此问题,首先认定一点,生成的可执行程序中,ffmpeg 不包含调试信息,调试信息在 ffmpeg_g 中,debug 要选择 ffmpeg_g。
另外,./config选项也是确定包含调试信息的核心,需要在config中添加:
-–enable-debug=3:开启debug调试
-–disable-asm:禁用 asm 优化
–disable-optimizations:禁用优化,以便调试时按函数顺序执行。
–-disable-stripping:禁用剥离可执行程序和共享库,即调试时可以进入到某个函数进行单独调试。
采用以下命令重新config:
先clean

make clean
./configure \
  --prefix="$HOME/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --extra-cflags="-I$HOME/ffmpeg_build/include" \
  --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
  --extra-libs="-lpthread -lm" \
  --bindir="$HOME/bin" \
  --enable-gpl \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-pic \
  --enable-shared   \
  --enable-nonfree \
  --enable-debug=3 \
  --disable-optimizations \
  --disable-asm \
  --disable-stripping && \
PATH="$HOME/bin:$PATH" make && \
make install && \
hash -r

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/632885.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Putty的Linux远程登录教程(Windows系统,虚拟机)

一、前言 本文为Windows10系统,且将Windows作为client,在VMware中安装了Ubuntu作为Server,使用Putty软件进行连接(写作时间:2023.6.11)。 二、Putty下载与安装 步骤一:点击以下链接&#xff0…

chatgpt赋能python:Python中如何取出字符串中的数字

Python中如何取出字符串中的数字 Python作为一种高级编程语言,可以让处理数字和字符串变得相对简单。在字符串中含有数字信息时,取出数字对于一些分析任务来说尤为关键。那么,如何在Python中取出字符串中的数字呢? 什么是正则表…

C#,码海拾贝(41)——求解“线性最小二乘问题”的“广义逆法”之C#源代码

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary> /…

chatgpt赋能python:Python发送邮件的完整指南

Python发送邮件的完整指南 如果您想通过Python发送电子邮件&#xff0c;则需要进行一些基本设置。例如&#xff0c;您需要了解SMTP服务器的详细信息&#xff0c;配置帐户凭据以及定义电子邮件的内容。本文将指导您完成这些步骤&#xff0c;并为您提供一个完整的Python代码示例…

有可以在游泳戴的耳机吗?适合游泳佩戴的耳机推荐

1.南卡Runner Pro4S骨传导游泳耳机 作为国内骨传导天花板品牌的南卡其发布的新产品Runner Pro 4S与之前的Pro 3和Pro 4在佩感方面没有太大改变&#xff0c;依旧舒适牢固&#xff0c;不会发生掉落的情况&#xff0c;实测重量31.7g&#xff0c;几乎是无感佩戴&#xff0c;毫无负担…

ZooKeeper 的架构是怎样的?

前言 本文隶属于专栏《大数据技术体系》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见大数据技术体系 正文 ZooKeeper 的架构图主要包含以下几个部分&…

chatgpt赋能python:Python中如何取出字符串中的字符

Python中如何取出字符串中的字符 在Python编程中&#xff0c;经常会涉及到需要对字符串中的字符进行操作&#xff0c;比如提取某些特定的字符等。那么&#xff0c;Python中如何取出字符串中的字符呢&#xff1f;本文将为您进行详细介绍。 1. 使用索引 在Python中&#xff0c…

Rust每日一练(Leetday0027) 单词搜索、删除重复项II、搜索旋转排序数组II

目录 79. 单词搜索 Word Search &#x1f31f;&#x1f31f; 80. 删除有序数组中的重复项 II Remove-duplicates-from-sorted-array-II &#x1f31f;&#x1f31f; 81. 搜索旋转排序数组 II Search-in-rotated-sorted-array-II &#x1f31f;&#x1f31f; &#x1f31…

Shell编程循环语句(for、while、until)

目录 一、for 循环 1.用法和特点 2.执行指定次数 3.遍历和迭代 &#xff08;1&#xff09;遍历 &#xff08;2&#xff09;迭代 4.操作实例 二、 while 循环 1.用法和特点 2.操作实例 三、until 循环 1.用法和特点 2.操作实例 一、for 循环 1.用法和特点 读取不…

chatgpt赋能python:Python如何去除列表中重复的元素?

Python如何去除列表中重复的元素&#xff1f; 在Python编程中&#xff0c;经常会遇到需要操作列表的情况。而有时候列表中会出现重复的元素&#xff0c;这会给后续的数据处理带来麻烦。那么如何去除列表中重复的元素呢&#xff1f;下面将为大家介绍几种方法。 1. 使用set()函…

Golang每日一练(leetDay0093) 丢失的数字、整数转换英文表示

目录 268. 丢失的数字 Missing Number &#x1f31f; 273. 整数转换英文表示 Integer To English Words &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日…

北邮国院物联网Software Engineering软件工程笔记

主要依照课上ppt的面向考试学习。 pdf文件获取&#xff1a;添加文章末尾微信公众号&#xff1a;灰海宽松&#xff0c;后台回复“软件工程”获取文件。 文章目录 Introductionsoftware typesgood software featureswhat is software engineering?4 layersWhy important?Genera…

Django、数据库----------ORM框架

目录 1.安装第三方模块 2.ORM 1.自己创建数据库 2.django连接数据库 3.django操作表 创建表&#xff1a;在models.py文件中 删除表以及修改表 在表中新增列时&#xff0c;由于已存在列中可能已有数据&#xff0c;所以新增列必须要指定新增列对应的数据 Django开发操作数…

vector 迭代器失效问题

vector 迭代器失效 迭代器的主要作用就是让算法能够不用关心底层数据结构&#xff0c;其底层实际就是一个指针&#xff0c;或者是对指针进行了封装&#xff0c;比如&#xff1a;vector的迭代器就是原生态指针T* 。因此迭代器失效&#xff0c;实际就是迭代器底层对应指针所指向…

总结896

学习目标&#xff1a; 月目标&#xff1a;6月&#xff08;线性代数强化9讲&#xff0c;背诵15篇短文&#xff0c;考研核心词过三遍&#xff09; 周目标&#xff1a;线性代数强化3讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测 每日必复习&#xff08;5分钟&#xff09;…

读改变未来的九大算法笔记09_指尖的精灵

1. 人类很有可能“在未来像过去所做过的一样行事” 2. 计算机科学领域并不仅仅是编程 2.1. 编程知识是计算机科学家所必需的&#xff0c;但它却只是前提 2.2. 要应用并试验算法&#xff0c;计算机科学研究者就需要将算法转换成计算机程序&#xff0c;而每个程序都由Java、C或…

AMC12和高考数学哪个更难?知识点有哪些不同?

AMC12和高考数学哪个更难&#xff1f;知识点有哪些不同&#xff1f;今天小编给大家来详细介绍一下&#xff01; 难度对比 从难度上看&#xff0c;高考数学的计算量更大&#xff0c;并且知识点比AMC10/12超前&#xff0c;需要用到极限和微积分的知识。 反观AMC10/12不需要用到…

LinkedHashMap源码

介绍 LinkedHashMap是HashMap的子类 Key和Value都允许空有序key可重复可覆盖&#xff0c;value可重复非线程安全可用于实现LRU public class LinkedHashMap<K,V>extends HashMap<K,V>implements Map<K,V>LinkedHashMap的原理图&#xff1a; LinkedHashMa…

【Jetpack】Room 中的销毁重建策略 ( 创建临时数据库表 | 拷贝数据库表数据 | 删除旧表 | 临时数据库表重命名 )

文章目录 一、销毁 和 重建策略二、销毁 和 重建策略 核心要点1、创建 Migration 迁移类 - 重点2、配置 Migration 迁移类3、修改数据库版本号4、修改实体类数据类型 三、完整代码示例1、数据库版本 3 代码示例RoomDatabase 数据库类完整代码Student 实体类完整代码执行结果 2、…

chatgpt赋能python:Python编程爱好者必备:如何参加线上比赛

Python编程爱好者必备&#xff1a;如何参加线上比赛 作为一名拥有10年Python编程经验的工程师&#xff0c;我非常喜欢参加线上编程比赛。在这些比赛中&#xff0c;我可以与全球的编程爱好者一起竞技&#xff0c;展现自己编程的优势和挑战自己的能力。在这篇SEO文章中&#xff…