IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 音视频开源基础学习 - 编译ffmpeg -> 正文阅读

[系统运维]音视频开源基础学习 - 编译ffmpeg

安装MSYS2

MSYS2 (Minimal SYStem 2)是?个MSYS的独?改写版本,主要?于 shell 命令?开发环境。同时它也 是?个在Cygwin(POSIX 兼容性层) 和 MinGW-w64(从"MinGW-?成")基础上产?的,追求更好的互操 作性的 Windows 软件。

MSYS2 是MSYS的?个升级版,准确的说是集成了panman和Mingw-64的Cygwin升级版, 提供了bash shell等linux环境、版本控制软件(git/hg)和MinGW-w64 ?具链。与MSYS最?的区别是移植了Arch linux的软件包管理系统Pacman(其实是与Cygwin的区别)。

下载安装并继承vs环境

  1. 下载安装MSYS2(按照官?安装到??指定的?录下

  2. 安装完成之后,先把安装?录下的msys2_shell.cmd中注释掉的 rem set MSYS2_PATH_TYPE=inherit 改成 set MSYS2_PATH_TYPE=inherit ,这是为了将vs的环境继承给MSYS2。

下载地址:https://www.msys2.org/

修改源:打开安装路径/etc/pacman.d/

编辑 mirrorlist.mingw32 ,在?件开头添加:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/ 
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/

编辑mirrorlist.mingw64 ,在?件开头添加:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/ 
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/ 

编辑 mirrorlist.msys ,在?件开头添加:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/ 
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/ 

启动MSYS2

使用命令行并进入MSYS2的安装路径,然后执行

# 64位
 .\msys2_shell.cmd -mingw64
# 32位
 .\msys2_shell.cmd 
# 在新启动的MSYS窗口更新软件包
pacman -Sy

安装工具链

# mingw64
pacman -S mingw-w64-x86_64-toolchain
pacman -S make
pacman -S automake
pacman -S autoconf
pacman -S perl
pacman -S libtool
pacman -S mingw-w64-i686-cmake
pacman -S pkg-config
# 如果需要编译出ffplayer的话,还需要安装SDL 
pacman -S mingw-w64-x86_64-SDL2
# 重命名/usr/bin/link.exe,避免冲突
cd /usr/bin
mv link.exe link.bak
# yasm
pacman -S yasm
# 如果没有找到cl,link,代表VS
which cl link yasm cpp

设置中文支持,右键打开Option->Text找到local选择zh_CN;Character set 为UTF-8

image-20211001202208242

pacman -S nasm
cd /home/此处为你的用户名
mkdir ffmpeg
cd ffmpeg 
git clone https://gitee.com/mirrors_addons/x264.git
cd x264 
./configure --prefix=../build/libx264 --host=x86_64-w64-mingw64 --enable-static --extra-ldflags=-Wl,--output-def=libx264.def
make -j4
make install
cp ./libx264.def ../build/libx264/lib/
cd ../build/libx264/lib/
# 生成64位lib
lib /machine:X64 /def:libx264.def
# 生成32位lib
lib /machine:i386 /def:libx264.def

如果需要生成dll

git clone https://gitee.com/mirrors_addons/x264.git x264-dll
./configure --prefix=../build/libx264-dll --host=x86_64-w64-mingw32 -- enable-shared --enable-static --extra-ldflags=-Wl,--output-def=libx264.def

fdk-aac

git clone --depth 1 https://gitee.com/mirrors/fdk-aac.git
cd fdk-aac
./autogen.sh 
./configure --prefix=../build/libfdk-aac --enable- static --enable-shared
make -j4
make install

mp3

git clone --depth 1 https://gitee.com/hqiu/lame.git
./configure --prefix=../build/libmp3lame --disable-shared --disable-frontend --enable-static 
make
make install

libvpx

git clone --depth 1 https://github.com/webmproject/libvpx.git 
cd libvpx 
./configure --prefix=../build/libvpx --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm 
make -j4 
make install

ffmpeg

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
# 编译
./configure	\
    --prefix=/home/Hu/ffmpeg/build/ffmepg-4.4 \
    --arch=x86_64 \
    --enable-shared \
    --enable-gpl \
    --enable-libfdk-aac \
    --enable-nonfree \
    --enable-libvpx \
    --enable-libx264 \
    --enable-libmp3lame \
    --extra-cflags="-I/home/Hu/ffmpeg/build/libfdk-aac/include" \
    --extra-ldflags="-L/home/Hu/ffmpeg/build/libfdk-aac/lib" \
    --extra-cflags="-I/home/Hu/ffmpeg/build/libvpx/include" \
    --extra-ldflags="-L/home/Hu/build/ffmpeg/libvpx/lib" \
    --extra-cflags="-I/home/Hu/ffmpeg/build/libx264/include" \
    --extra-ldflags="-L/home/Hu/ffmpeg/build/libx264/lib" \
    --extra-cflags="-I/home/Hu/ffmpeg/build/libmp3lame/include" \
    --extra-ldflags="-L/home/Hu/ffmpeg/build/libmp3lame/lib"
    
make -j4
make install

qt中使用

  1. 将生成的ffmpeg-4.4拷贝到工程目录下

  2. 在pro中添加

    INCLUDEPATH +=$$PWD/ffmepg-4.4/include
    LIBS += $$PWD/ffmepg-4.4/bin/avformat.lib 
    LIBS += $$PWD/ffmepg-4.4/bin/avcodec.lib 
    LIBS += $$PWD/ffmepg-4.4/bin/avdevice.lib 
    LIBS += $$PWD/ffmepg-4.4/bin/avfilter.lib
    LIBS += $$PWD/ffmepg-4.4/bin/avutil.lib 
    LIBS += $$PWD/ffmepg-4.4/bin/swresample.lib
    LIBS += $$PWD/ffmepg-4.4/bin/swscale.lib
    

创建目录

在home目录下创建

ffmpeg_sources:用于下载源文件

ffmpeg_build: 存储编译后的库文件

bin:存储二进制文件(ffmpeg,ffplay,ffprobe,X264,X265等)

cd ~
mkdir ffmpeg_sources  ffmpeg_build bin

安装依赖

sudo apt-get update -qq && 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

编译与安装

本指南假定您要安装一些最常见的第三方库。每个小节为您提供安装该库所需的命令。

如果不需要某些功能,则可以跳过相关小节(如果不需要),然后在FFmpeg中删除相应的./configure选项。例如,如果不需要libvpx,请跳过该小节,然后从“ 安装FFmpeg”部分中删除–enable-libvpx。

**提示:**如果要在多核系统中加快编译速度,可以在每个make命令(例如make -j4)中使用-j选项。

建议都使用源码进行安装。

NASM

部分库使用到汇编程序。

如果你系统提供的库nasm版本>=2.13则可以直接使用命令进行安装

sudo apt-get install 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

部分库使用到该汇编库

如果你系统提供的库yasm版本 ≥ 1.2.0则可以直接使用命令进行安装:

sudo apt-get 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 --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
make && \
make install

libx264

H.264视频编码器。更多信息和使用范例参考H.264 Encoding Guide

要求编译ffmpeg时配置:–enable-gpl --enable-libx264.

如果你系统提供的 libx264-dev版本 ≥ 118 则可以使用命令直接安装:

sudo apt-get install libx264-dev

否则使用源码进行编译:

cd ~/ffmpeg_sources && \
git -C x264 pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/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.

如果你系统提供的 libx265-dev版本≥ 68 则可以使用命令直接安装:

sudo apt-get install libx265-dev libnuma-dev

否则使用源码进行编译:

sudo apt-get install mercurial libnuma-dev && \
cd ~/ffmpeg_sources && \
if cd x265 2> /dev/null; then hg pull && hg update && cd ..; else hg clone https://bitbucket.org/multicoreware/x265; 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.

如果你系统提供的libvpx-dev version ≥ 1.4.0则可以使用命令直接安装:

sudo apt-get install libvpx-dev

否则使用源码进行编译:

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 && \
PATH="$HOME/bin:$PATH" make && \
make install

libfdk-aac

AAC音频编码器. 更多信息和使用范例参考AAC Audio Encoding Guide

要求编译ffmpeg时配置:–enable-libfdk-aac ( 如果你已经配置了 --enable-gpl则需要加上–enable-nonfree).

如果你系统提供的 libfdk-aac-dev则可以使用命令直接安装:

sudo apt-get install libfdk-aac-dev

否则使用源码进行编译:

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 --prefix="$HOME/ffmpeg_build" --disable-shared && \
make && \
make install

libmp3lame

MP3音频编码器.

要求编译ffmpeg时配置:–enable-libmp3lame.

如果你系统提供的libmp3lame-dev版本≥ 3.98.3则可以使用命令直接安装:

sudo apt-get install libmp3lame-dev

否则使用源码进行编译:

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" --disable-shared --enable-nasm && \
PATH="$HOME/bin:$PATH" make && \
make install

libopus

Opus音频编解码器.

要求编译ffmpeg时配置:–enable-libopus.

如果你系统提供的libopus-dev 版本≥ 1.1则可以使用命令直接安装:

sudo apt-get install libopus-dev

否则使用源码进行编译:

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" --disable-shared && \
make && \
make install

libaom

AV1 视频编解码器:

Warning: libaom does not yet appear to have a stable API, so compilation of libavcodec/libaomenc.c may occasionally fail. Just wait a day or two for us to catch up with these annoying changes, re-download ffmpeg-snapshot.tar.bz2, and try again. Or skip libaom altogether.

要求编译ffmpeg时配置:–enable-libaom.

先不支持AV1 ,编译有问题。

cd ~/ffmpeg_sources && \
git -C aom pull 2> /dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom && \
mkdir -p aom_build && \
cd aom_build && \
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off -DENABLE_NASM=on ../aom && \
PATH="$HOME/bin:$PATH" make && \
make install

cd ~/ffmpeg_sources && \
git -C aom pull 2> /dev/null || git clone --depth 1 https://github.com/mozilla/aom.git && \
mkdir -p aom_build && \
cd aom_build && \
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off -DENABLE_NASM=on ../aom && \
PATH="$HOME/bin:$PATH" make && \
make install

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" ./configure \
  --prefix="~/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --extra-cflags="-I~/ffmpeg_build/include" \
  --extra-ldflags="-L~/ffmpeg_build/lib" \
  --extra-libs="-lpthread -lm" \
  --bindir="~/bin" \
  --enable-gpl \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-nonfree && \
PATH="~/bin:$PATH" make && \
make install && \
hash -r

然后重新登录系统或者在当前shell会话执行如下命令以识别新安装ffmpeg的位置:

source ~/.profile

现在已经完成编译和安装ffmpeg (also ffplay, ffprobe, lame, x264, & x265) 。该文档剩余章节主要讲如何更新和删除ffmepg。

编译完成后,ffmpeg_build ffmpeg_sources bin目录的大体情况

lqf@ubuntu:~/ffmpeg_build$ ls
bin  include  lib  share

lqf@ubuntu:~/ffmpeg_sources$ ls
fdk-aac               lame-3.100.tar.gz     opus        yasm-1.3.0.tar.gz
ffmpeg-4.2.1          libvpx                x264
ffmpeg-4.2.1.tar.bz2  nasm-2.14.02          x265
lame                  nasm-2.14.02.tar.bz2  yasm-1.3.0

lqf@ubuntu:~/bin$ ls
ffmpeg  ffplay  ffprobe  lame  nasm  ndisasm  vsyasm  x264  yasm  ytasm

使用

现在,您可以打开一个终端,输入ffmpeg命令,它应该执行新的ffmpeg。

如果你需要多个用户能同时使用你新编译的ffmpeg,则可以移动或者拷贝ffmpeg二进制文件从~/bin到/usr/local/bin。

测试ffplay是否可以使用(需要在图形方式进行测试)

ffplay rtmp://202.69.69.180:443/webcast/bshdlive-pc

如果能够正常播放则说明 ffplay能够编译成功使用。

文档

你可以使用 man ffmpeg以本地的方式访问文档:

echo “MANPATH_MAP $HOME/bin $HOME/ffmpeg_build/share/man” >> ~/.manpath

你可能必须注销系统然后重新登录man ffmpeg才生效。

HTML 格式的文档位于 ~/ffmpeg_build/share/doc/ffmpeg.

你也可以参考在线文档 online FFmpeg documentation,

ffmpeg定制

image-20211002222859894

image-20211002222916074
最近在跟一个的免费直播,讲音视频开发,讲得不错分享给大家

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-23 12:46:41  更:2021-11-23 12:47:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:53:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码