你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

ffmep介绍和开发环境搭建!

[复制链接]
gaosmile 发布时间:2020-12-17 22:52

从本篇文章开始,我将开始写一些自己学习音视频方面的学习笔记,记录自己的成长过程!

我们先来了解一下ffmpeg是什么吧?最官方的解释和介绍,当然是去ffmpeg官方看,ffmpeg官方地址:

https://www.ffmpeg.org/about.html
! h; B: h" K3 E2 G+ p& G4 g

微信图片_20201217224701.png

这里大概的说一下:

FFmpeg是领先的多媒体框架,能够解码,编码, 转码,mux,demux,流,过滤和播放人类和机器创建的几乎所有内容。它支持最模糊的古代格式,直至最前沿。无论它们是由某些标准委员会,社区还是公司设计的。它还具有高度的可移植性:FFmpeg可以在各种构建环境,机器体系结构和配置下,跨Linux,Mac OS X,Microsoft Windows,BSD,Solaris等编译,运行并通过我们的测试基础架构 FATE。

它包含可以由应用程序使用的libavcodec,libavutil,libavformat,libavfilter,libavdevice,libswscale和libswresample。与ffmpeg,ffplay和ffprobe一样,最终用户也可以使用它们进行转码和播放。

当然如果这些还不够你作为知识认知上来了解一个东西的话,可以再多看几篇文章,这里我就不再造轮子了,咋们接下来开始来搭建windows和Linux开发环境,正所谓:工欲善其事 必先利其器。可能搭建环境的时候,会遇到一些坑。

一、windows环境搭建:

其实这个礼拜我当时去搭建环境的时候,去网上找了一些博客资料,但是发现之前的网站打不开了,而且现在官网变化有点大,你可能看以前别的文章资料参考,按照操作来,去官网下载安装包,但是其实根本就不是那回事,如果没有仔细观察的话,现在官网下载windows包是这样的:

微信图片_20201217224704.png

1、环境搭建步骤;

(1)从官网下载安装包:

微信图片_20201217224707.png


; `* d' g8 O9 w9 C* q* |
微信图片_20201217224711.png

(2)开始解压安装包和文件说明:

我们把刚才下载下来的包进行解压:

微信图片_20201217224714.png

解压后有四个文件:bin里面是安装的应用程序以及一些动态链接库:

微信图片_20201217224717.png

doc文件里面是一些相关关于ffmpeg的html说明文档:

微信图片_20201217224720.png

include里面是一些相关库的头文件:

微信图片_20201217224723.png

lib里面是相关的库:

微信图片_20201217224727.png

(3)开始安装:

这里我们把bin文件下的这三个应用程序拷贝到你的c盘下的Windows目录下:

a、

微信图片_20201217224730.png

b、

微信图片_20201217224733.png

c、直接粘贴到到windows目录即可:

微信图片_20201217224737.png

现在我们打开命令提示符,检查一下ffmpeg是否安装成功:

微信图片_20201217224740.png

你会发现还缺乏一下动态链接,这个时候我们可以按照提示把刚才剩下的那些以“.dll”的文件拷贝到windows目录的SysWOW64目录即可:

微信图片_20201217224743.png


5 r9 k0 i  ^( k* r, }1 B# `9 b
微信图片_20201217224746.png

然后我们再测试一下ffmpeg的版本是多少:

ffmpeg -version+ V' T; x- r4 X6 m  R/ B

微信图片_20201217224749.png

注:估计这里可能有些人会遇到问题,还是不能查看,我这里后面还是采用了4.2.1的版本。

没错,如果你到了这里可以看到我上面一样的打印,那么恭喜,你的windows环境就搭建成功了

二、linux环境搭建:

这里我没有采用直接用命令的方式来下载ffmpeg,这里我参考了官网的源码安装步骤,可能会比较慢:

https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu( s0 A) Z3 O0 p  ^

1、首先在home目录下创建需要的目录(注这里最好和我一样的操作):

txp@txp-virtual-machine:~$ mdkir ffmpeg_sources ffmpeg_build bin
) T. J/ b! G9 h. D+ G! ]
, o2 L* `5 R* {  r5 c. \- _& j1 F

2、下载所要的依赖环境配置:

在下载之前,你最好把自己的ubuntu镜像服务器换成国内的比较好,速度会快很多(这里我用的是ubuntu16.04);同时在之前最好更新一下:

sudo apt install update: F* E8 L% \: c$ ?. V

然后直接进行下面操作:

sudo apt-get update -qq && sudo apt-get -y install \+ Z" g5 B7 q- x1 I# Z% i6 t
  autoconf \: H5 S/ n2 @2 g' S
  automake \' e+ |( W1 r3 A, d$ m
  build-essential \' L4 W- I2 m4 h# x* W  i" `
  cmake \
1 l( @! V7 q  F, Y6 s! r( j% C% b  git-core \
) K* y/ G. ^3 I9 ~  libass-dev \3 A' g4 b. I0 l
  libfreetype6-dev \$ n1 V7 H/ x( G! P
  libgnutls28-dev \
1 g: j+ \$ E7 Q% j) `& t  libsdl2-dev \5 N& Y: O9 a) O* J. I- ]
  libtool \
' G- l  y1 N, g# ~% l0 l& [1 z  libva-dev \
( h" E3 f" k% a* d+ t; c2 b  libvdpau-dev \
. |6 R/ X" c3 i, N' f  libvorbis-dev \, h# r) e  c" Z# {, O  w
  libxcb1-dev \0 r4 N( j+ g8 i- K; f4 \' h% D' {
  libxcb-shm0-dev \, @) M( R6 v. b+ J. l
  libxcb-xfixes0-dev \
6 j4 K2 v7 |2 \; o2 [, Q- p' \  pkg-config \
7 ]5 j6 U  H: v3 J, q  texinfo \0 Z1 f- |9 M, B# D. I- g2 [( e1 r
  wget \
, H: \+ S0 E5 _! p* w: p7 J  yasm \0 o% ~+ `4 v) v$ b5 V
  zlib1g-dev
* f- s4 w$ c9 J$ j. u: a) I

3、源码安装一些所需的库:

可以把这里下载的库统一放在我们刚才建立的ffmpeg目录下,方便管理!

a、NASM

cd ~/ffmpeg_sources && \
) W6 R8 \! p7 T9 s! `wget https://www.nasm.us/pub/nasm/rel ... asm-2.14.02.tar.bz2 && \
0 F1 g/ k+ y2 l4 Ytar xjvf nasm-2.14.02.tar.bz2 && \# G7 U( J0 b) g) `: ~7 B
cd nasm-2.14.02 && \) \3 x3 e- r4 w- ^
./autogen.sh && \6 e$ {6 G2 B  M! \: a
PATH="$HOME/binPATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
, N( O0 \0 v$ ~4 X* z& bmake && \
! X; L, s6 @. bmake install
' z% U  A/ a8 d% Y- P5 f; S

b、Yasm

cd ~/ffmpeg_sources && \
% A9 {' o1 i, P! C4 P; \* [8 Z2 Vwget -O yasm-1.3.0.tar.gz https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz && \1 z2 g7 V+ N& A# I9 T
tar xzvf yasm-1.3.0.tar.gz && \
6 ~/ b1 C0 o8 Ncd yasm-1.3.0 && \* W- C1 C  i7 \! i) k& C- s
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \  `) f5 F4 i/ Z, z2 Q2 p$ k# [
make && \
5 V# X2 [8 T" ?4 {9 p0 amake install1 C$ o: }1 h+ S. l0 {) z8 I

c、libx264

cd ~/ffmpeg_sources && \
6 Y- j  q; y0 C: ]# V; W5 Lgit -C x264 pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/x264.git && \
# H0 R3 j. b- i! n) E: t6 w7 G/ ucd x264 && \
, i8 q3 b! f7 D, \6 o5 A$ FPATH="$HOME/binPATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --enable-pic && \% l5 l$ h0 V; D; ]2 ?9 z
PATH="$HOME/binPATH" make && \
$ f% ]5 l' R* o5 P$ Pmake install) m  T* v7 _$ ^$ ^( {

d、libx265

sudo apt-get install libnuma-dev && \
, Y2 G2 p2 y& Q0 l( T. y4 C: `cd ~/ffmpeg_sources && \
; A+ t9 J- i$ pgit -C x265_git pull 2> /dev/null || git clone https://bitbucket.org/multicoreware/x265_git && \
+ W0 h: O) j' W* ?# c' Acd x265_git/build/linux && \) x0 Z9 g  d7 b
PATH="$HOME/binPATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off ../../source && \% V- J3 Z) ^6 P
PATH="$HOME/binPATH" make && \+ U  m. c, J: [, q, F
make install
+ }; A8 e" b/ }

e、libvpx

cd ~/ffmpeg_sources && \( ]+ M, |: g7 O( y* |" R8 E4 V) W
git -C libvpx pull 2> /dev/null || git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && \' Y# s& ^/ B' r
cd libvpx && \
& h! W  K1 X& n* _& }" V5 E4 OPATH="$HOME/binPATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm && \# f" i" P6 O4 b" a7 y( c. ^8 }8 t
PATH="$HOME/binPATH" make && \. G! a1 m( A, b+ ?6 l* g
make install  z* y; F; X9 D7 Q7 P9 n4 K% e

f、libfdk-aac

cd ~/ffmpeg_sources && \
; H' ?4 N  r, C; H4 }; w, d! agit -C fdk-aac pull 2> /dev/null || git clone --depth 1 https://github.com/mstorsjo/fdk-aac && \" j* Z! P# i! W7 Q
cd fdk-aac && \
8 X. y* x! I  J* s3 x/ K" ^autoreconf -fiv && \
- D/ k7 q" ~/ p9 s  I' h, V./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \
2 r) a9 S: B. P1 Kmake && \/ B6 s' \+ Z3 X7 u# ~
make install
! e' ~  D) g0 }2 O: J# ]3 I! z6 r

g、libmp3lame

cd ~/ffmpeg_sources && \* F6 a. @4 f1 q6 K- E* H
wget -O lame-3.100.tar.gz https://downloads.sourceforge.ne ... 0/lame-3.100.tar.gz && \3 p  B9 z6 m0 R) v$ B
tar xzvf lame-3.100.tar.gz && \
2 O# Q9 j, M0 d9 m; y# l; Zcd lame-3.100 && \. U$ r6 [' a. E1 t  g  S- q
PATH="$HOME/binPATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm && \, e3 D. p- q. h- D( A
PATH="$HOME/binPATH" make && \
! j) ]3 P6 f" a2 i5 ]make install
* B- |9 t0 {+ A8 J: _9 m

h、libopus

cd ~/ffmpeg_sources && \
. o6 G, C. @1 dgit -C opus pull 2> /dev/null || git clone --depth 1 https://github.com/xiph/opus.git && \
) |: y. \6 ~9 ~8 z8 T- K1 ~' ]cd opus && \# H) R' E" _0 P  T4 u- J" W3 v8 w
./autogen.sh && \5 Z# D/ b6 ^4 I$ t
./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \/ H( X. V, p- s
make && \/ b/ j8 ?$ P1 W- H1 w! T: d7 `; n
make install
+ s- e; j; @, H' U) v: z

i、libaom

cd ~/ffmpeg_sources && \
' B- A( r0 a; ^% b- h# pgit -C aom pull 2> /dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom && \
  x8 j' s+ t' }* Zmkdir -p aom_build && \
: ^$ N% D7 h/ g2 Kcd aom_build && \
& v# o5 s$ N7 e. [PATH="$HOME/binPATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off -DENABLE_NASM=on ../aom && \
8 s1 r5 N6 Q* p$ u: ]) i5 H! a, b0 [PATH="$HOME/bin:$PATH" make && \
% C. ?1 ~5 q8 h; o# ?make install
8 v3 N( ^7 }  g& a( o7 u: b+ b

注:这个暂时国内下载不了,服务器在外国。。。。。

o、libsvtav1

cd ~/ffmpeg_sources && \' U, U' C/ |! D, b. k$ s9 N7 J
git -C SVT-AV1 pull 2> /dev/null || git clone https://github.com/AOMediaCodec/SVT-AV1.git && \
5 C) Y  v$ v# r/ [mkdir -p SVT-AV1/build && \
9 y, N& ]. c' Q  acd SVT-AV1/build && \7 c; |; m2 J1 b+ Z
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DCMAKE_BUILD_TYPE=Release -DBUILD_DEC=OFF -DBUILD_SHARED_LIBS=OFF .. && \
4 s7 P/ b* k. N# s, hPATH="$HOME/bin:$PATH" make && \3 y" C4 {. I2 y  p
make install
( Z5 I0 O1 [2 r2 h, o5 P

最终我们可以下载ffmpeg目录看到下载的库文件;

微信图片_20201217224752.png

4、现在我们可以开始下载ffmpeg安装包并解压:

cd ~/ffmpeg_sources && \2 x0 ]/ I& O/ r/ _
wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && \
: ^9 z: Q4 \! L8 L+ i' K. G* o& vtar xjvf ffmpeg-snapshot.tar.bz2 && \  \- ?  e5 S- P) W  V3 K
cd ffmpeg && \
4 f# K$ s7 X( V1 sPATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
8 ^/ j! K) x  {7 ]$ M# P7 f- o  ?6 H5 n  --prefix="$HOME/ffmpeg_build" \. b& ]# T0 R# z* w! _
  --pkg-config-flags="--static" \/ ~' F( k( A* Z0 k4 K
  --extra-cflags="-I$HOME/ffmpeg_build/include" \
. }( |! t  i3 Z6 ?7 u% J  K  --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
4 i' G9 b8 R3 }7 k. R  --extra-libs="-lpthread -lm" \2 l1 m6 n) \6 f/ Z
  --bindir="$HOME/bin" \& Y" |/ F. x0 M1 C  }) ^6 d
  --enable-gpl \
2 P7 y4 L+ x6 Z& b5 V1 D8 {0 B  --enable-gnutls \6 ~+ t- @4 x, j  C
  --enable-libaom \, g8 j" `4 U" x) ^0 F: q: F% e6 p
  --enable-libass \
0 v; p6 \1 ~- I. v( i  --enable-libfdk-aac \* r' b, _' O& y: k+ U
  --enable-libfreetype \
4 V  W; a' T! l; Z  --enable-libmp3lame \
7 ?; g( b6 o0 o  @$ |  P. r( G  --enable-libopus \
) D* n0 h1 \# {7 G: v  --enable-libsvtav1 \
9 ~1 |+ d7 r# s! }2 `  --enable-libvorbis \: G' n& X; B' G* R
  --enable-libvpx \
# W9 N3 g4 V8 i  J  --enable-libx264 \4 X6 D& G4 u+ D  f5 a5 i1 Y
  --enable-libx265 \
9 V% p5 Q, P0 x, l; T0 N  --enable-nonfree && \( Q7 E* {: ]+ a+ u* N7 T. Y% P/ p& T
PATH="$HOME/bin:$PATH" make && \6 b# l# [1 N; ]4 ]
make install && \
' A: a8 p$ O0 ]) f3 U- ^1 chash -r
: r( J) b! S; n  ~% k

微信图片_20201217224756.png

注意:这里一定是在之前的那些库安装之后再操作这个步骤,不然有些库找不到,导致你编译报错,而且这里编译的时间蛮久的,大概十几分钟左右!

这里环境就搭建完了,下面我来测试一下环境是否搭建成功。记得我们得重新打开一个终端来操作,不然会显示操作失败:

微信图片_20201217224759.png

所以重新打开一个终端:

微信图片_20201217224803.png

最后我们来播放一个视频看看,是否真的有效果:

ffplay rtmp://202.69.69.180:443/webcast/bshdlive-pc5 @, o* a1 T: g

效果展示:

微信图片_20201217224807.png

当然你也可以播放你本地文件里面的视频,这里我就不演示了,很简单!

三、总结:

上面的环境搭建可能费点时间,不过还是不建议本地安装ffmpeg。


. _0 I- Q# {' f- N( s- k
赞 收藏 评论1 发布时间:2020-12-17 22:52

举报

1个回答
七哥 回答时间:2020-12-17 23:59:59
出现了好多的 “”
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版