找回密码
 立即注册
搜索
查看: 356|回复: 0

Centos7安装ffmpeg(视频格式转换)

[复制链接]

991

主题

92

回帖

5万

积分

管理员

积分
55457
发表于 2022-9-14 09:24:18 | 显示全部楼层 |阅读模式
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本! V2 c8 @3 L2 o* D& c" V& {+ l
装ffmpeg之前需要安装各种解码器。
* Y' p2 G, \+ F* w) d! ~没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。1 E; k: ]9 ~4 ^
1.lame
  1. wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
    1 q" `& V0 s' \, i. X% t" T
  2. tar -zxvf lame-3.99.5.tar.gz
    - c, g+ C3 o% G3 y; e) d
  3. cd lame-3.99.5
    * p4 C. _$ L0 |2 h
  4. ./configure --enable-shared, R1 y, e% k, c% S/ \
  5. make & m; I( U: S6 ?( A( w
  6. make install
复制代码
执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH
* ?1 b8 M' P: A' A9 }则需要我们先安装GCC。5 M; h- y& K3 m- B
  1. yum install gcc
复制代码
安装完成后再执行一遍。" i9 `' d/ U4 o5 X
2.libogg
  1. wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz$ C# G% l( j: {# {
  2. tar -zxvf libogg-1.3.2.tar.gz+ z  A# t, Q3 h2 y9 X
  3. cd libogg-1.3.2$ u+ w* u$ I& u) C1 M, k, M6 W
  4. ./configure --enable-shared
    5 H  s3 F% M7 X7 [; t
  5. make # ~# K* X& p8 _+ h' E$ o
  6. make install
复制代码
3.libvorbis
  1. #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装
    1 }0 v  S' F, |/ L6 z5 t  X& K* @
  2. wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz: j/ f1 d* u9 w% I
  3. tar -zxvf libvorbis-1.3.5.tar.gz- |. H3 Y; N0 Q2 o
  4. cd  libvorbis-1.3.5$ m& ^9 E$ G6 d3 B( N  D- u5 r
  5. ./configure --enable-shared' l3 k- E$ d/ n& k' ^3 X* U4 `
  6. make # m- V( K+ _- u2 m6 C
  7. make install
复制代码
/ W. H! B8 n9 `! u+ G
执行“./configure --enable-shared”如果报以下错误:* {; h) q4 ^) R  m. z- n
must have Ogg installed!5 J& Y, M$ Q% j- [
我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。
$ w' K2 p1 N$ j4 C# [解决方案:
' D2 [8 g* n6 T: x0 R2 g, _# ?
  1. [root@localhost ~]#vi /etc/ld.so.conf
    4 c0 ?+ W1 u9 x& }! t
  2. include /etc/ld.so.conf.d/*.conf  
    , b9 \; f1 j5 g! _% J: x
  3. /usr/local/lib0 W, F/ D$ f3 y
  4. [root@localhost ~]#ldconfig –v
复制代码
4.xvidcore
  1. wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz/ r# F1 E. ?7 f: l9 I8 g% W
  2. tar -zxvf xvidcore-1.3.2.tar.gz
    + e$ Y  b! Z' I( e7 m8 ^- H1 b" p
  3. cd xvidcore/build/generic4 M( f( q, B& C8 T
  4. ./configure --enable-shared
    3 |- `  U# v  F+ ?9 F6 L
  5. make
    7 u5 K3 r3 v! \& ~! L9 K6 P/ s5 J; y
  6. make install
复制代码
5.x264
- i4 o  ]: \3 C* L/ } b0afa659d6bbbc43d1e805c323c28ae2.jpg , x! P7 p- A: |! y" E, d
; d2 `+ A( A/ s8 Z$ A
libx264需要nasm的支持,nasm是一个编译器的角色。
4 f) Q' X+ u2 i- t. v$ R& Z安装nasm:6 w3 T1 E0 B7 Q8 R3 g( @
  1. wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
    - p  o& l! U( Q; D- B! G( t5 }) e( r
  2. tar -xvJf nasm-2.13.03.tar.xz
    8 o3 v/ v; k+ O  h' ]0 l
  3. cd nasm-2.13.03' y* k1 o, ~( t( f7 G& L2 j
  4. sed -e '/seg_init/d' \
    8 b* k: d) m) x) Q* h
  5. -e 's/pure_func seg_alloc/seg_alloc/' \  N. q" z/ C9 L; U9 T  K' F% c
  6. -i include/nasmlib.h
    + H4 w( l) A* D) Z
  7. ./configure --prefix=/usr &&0 T2 k/ P, V/ d
  8. make9 [  R* _4 _8 v# j2 |4 J2 t
  9. make install
复制代码
58d7b18423362b6c9f7c732170a0d7df.jpg
5 S* h: e! s: w7 J$ j" L# b8 y9 t安装完成后再安装x2645 S( f! E+ I3 D" R: b
  1. wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2* D* |9 e8 F: O! G6 G; l2 C
  2. tar -jxvf x264-snapshot-20190402-2245.tar.bz2! a, c( {$ Q/ G
  3. cd x264-snapshot-20190402-22455 K- S7 F. l5 ?. G  z
  4. ./configure --enable-shared
    % z: {% G, Z8 Z1 x1 ]" v
  5. make % b- d* e( E% @* S
  6. make install
复制代码
6.libdts
7 U- S7 G4 O) |4 n2 |, W; `
  1. wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
    3 u; s8 P. Y+ ^: o5 i; v+ E
  2. tar -jxvf libdca-0.0.5.tar.bz2
    7 U( {$ s. u5 l
  3. cd libdca-0.0.5+ v$ \% x" b3 l2 I" L' i; R
  4. ./configure --enable-shared
    # v2 |, g4 E* P3 {- x. I+ K5 n
  5. make
    - V" {/ L( }$ U% i* j
  6. make install
复制代码
7.faad26 q$ Y& O8 ~) _! r  z  K* b% k
  1. wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz$ `, z7 O- L9 W3 ^& T. o; [
  2. tar -zxvf faad2-2.7.tar.gz
    9 y' b" E8 _- F' r: E% Q9 W& \, Y
  3. cd faad2-2.7" W8 u) D+ [: a+ D! \
  4. ./configure --enable-shared$ n, ]: E! c5 C0 A8 D
  5. make . O' H8 z2 M% h
  6. make install
复制代码
8.faac
' ]6 X  e; }) ]6 V; F. U8 M6 Z: P
  1. wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz# j& u; T3 k' R, P; I
  2. tar zxvf faac-1.28.tar.gz
    - U6 a* i  T5 u; [( V
  3. cd faac-1.28
    6 `6 l0 t; o' h& Z6 A; `
  4. ./bootstrap
    3 L% x9 ^6 R$ G2 Z: [( L
  5. ./configure --prefix=/usr/local/ --enable-shared) z. W/ C% \# u
  6. make && make install
复制代码
执行./bootstrap报错:
, l; _1 T- P( Y* k8 W2 X
  1. [root@localhost faac-1.28]# ./bootstrap
    $ e9 y/ V- z/ H4 o& k. u
  2. ./bootstrap:行3: aclocal: 未找到命令
    ( ^. _% C* x" [6 O1 I' G! V
  3. ./bootstrap:行4: autoheader: 未找到命令* w  f* h: C5 M* v( u, Z
  4. ./bootstrap:行8: libtoolize: 未找到命令  p! }3 Q: q& s  `
  5. ./bootstrap:行10: automake: 未找到命令: u) p' |+ P. [# _. W, Q) E! C( s
  6. ./bootstrap:行11: autoconf: 未找到命令
复制代码
解决方法:( b4 e0 q! G/ t4 c; R: c5 E
  1. yum -y install automake0 d. [; g: S5 o, o) Q2 Q
  2. yum -y install libtool
复制代码
执行make && make install报错:
/ i2 b& [9 {" H/ r. O/ ~  V
  1. make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”
    . J* k1 ?  c* P  Z. V' b! \# c
  2. source='3gp.cpp' object='3gp.o' libtool=no \
    % J5 e2 H. l' t1 S( w
  3. DEPDIR=.deps depmode=none /bin/sh ../../depcomp \
    1 D' z( Y7 v+ \/ o+ U; H
  4. g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include   -Wall  -c -o 3gp.o 3gp.cpp  v9 }$ q" V- q3 X) f
  5. ../../depcomp: 第 512 行:exec: g++: 未找到
    3 e1 f* O$ O* E" F, e3 v! n
  6. make[3]: *** [3gp.o] 错误 127
    4 H" I; T$ ^2 A8 U8 [+ m6 Q* G- G1 d6 I
  7. make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”
    9 o. t: G9 S+ c$ J  d
  8. make[2]: *** [all-recursive] 错误 1
    * ^/ o( s; \+ u
  9. make[2]: 离开目录“/root/Downloads/faac-1.28/common”( O1 h3 O! @- K/ ~$ o* S
  10. make[1]: *** [all-recursive] 错误 17 v  @( w4 T+ ~% V
  11. make[1]: 离开目录“/root/Downloads/faac-1.28”
    ) m6 i, F0 D3 `# L  L
  12. make: *** [all] 错误 2
复制代码
解决方法- p  D1 v& r( R9 o/ a2 ]; B
  1. yum install -y gcc-c++
复制代码
执行make && make install时报错:4 I  B* A* A+ ^7 h
  1. [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码
解决方法:
! O7 k3 S0 H2 J: G1 K
  1. 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
    9 D- p- }  ^! ^3 C
  2. 解决方法:
    & J1 n9 M) U" c5 k
  3. 从123行开始修改此文件mpeg4ip.h,到129行结束。
    ) e  K4 L. k, o5 S
  4. 修改前:0 N" `2 x% e! f5 z+ w
  5. #ifdef __cplusplus
    : v7 k9 |! P" c2 n: ?3 N  r" [( ~
  6. extern "C" {7 z$ j6 Q( v/ \# y4 F1 H* r3 U4 t
  7. #endif6 U, n3 K: c5 q" c" F- w3 Z
  8. char *strcasestr(const char *haystack, const char *needle);
    ) k& @0 Y( _8 u7 {  ?
  9. #ifdef __cplusplus
    ; L& d  o% [& O7 v6 G0 h4 x
  10. }
    - y8 k6 X; K- }2 Q$ l
  11. #endif
    : K% {- g2 x  ^! s2 [1 k

  12. + H) z8 U$ F* {1 b$ w6 I2 z) }. K- Y
  13. 修改后:
    - \7 E1 s- r+ ^& y/ U1 Z( [' u! Q
  14. #ifdef __cplusplus
    0 m( w& r. N! M0 J3 m
  15. extern "C++" {
    . W) {: Q' O3 e/ L
  16. #endif9 x; h4 }" t6 q8 r" y3 q- ?
  17. const char *strcasestr(const char *haystack, const char *needle);( t$ |' \+ i2 ]" N2 `9 j
  18. #ifdef __cplusplus2 y. p* x1 I5 `3 U+ a
  19. }+ Q$ M9 Q. r) ?& [1 N7 H; t
  20. #endif
复制代码
9.amr-nb3 c) t1 y; U# ?6 U
  1. wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2" {" Q4 ~7 T6 m
  2. tar -jxvf amrnb-11.0.0.0.tar.bz2* F/ U, [9 H" x: a& _; P
  3. cd amrnb-11.0.0.06 z% q( v; t/ i& Y
  4. ./configure --enable-shared% n4 G9 A3 V1 R* e: J. P5 \  k5 K
  5. make
    0 u* E! r4 L( w9 n# U
  6. make install
复制代码
执行./configure可能遇到的错误:+ m  l. {# [; F6 N; L3 d2 B
  1. configure: error: You need patch utility to prepare sources.
复制代码
解决方法:
# Y$ z+ R! n( q6 f) l
  1. yum install patch
复制代码
10.amr-wb
( y' v8 F, h, @0 D6 M0 \4 V# v
  1.     wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2
    9 x/ {+ b3 N( Q- Z8 q- D; M! ^9 g' {
  2.     tar -jxvf amrwb-11.0.0.0.tar.bz2- |4 _2 m0 d" G8 w+ X7 {) H- c
  3.     cd amrwb-11.0.0.0
    ) ~  U  Y1 f8 V) Q2 Q# `6 p
  4.     ./configure --enable-shared
    # `" L1 ~! `, X( o2 ]2 n/ m" b
  5.     make
    ; O! x9 a2 B; l7 N; E) L
  6.     make install
复制代码
11.yasm
- G+ ]; `3 ?* L# u- x9 C9 Fffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。
& J0 G6 H( l+ n4 L( F% g4 r
  1. yum -y install yasm
复制代码
12.ffmpeg
5 b: Y. V' Y5 h; p! z( n& U
  1. wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2/ [6 x5 C2 _3 a2 e/ c* @
  2. tar -jxvf ffmpeg-4.1.3.tar.bz2- n8 l% w& D  D9 a6 F
  3. cd ffmpeg-4.1.3' f* x0 M* b0 W
  4. #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.% D5 P8 u. y4 z) t
  5. #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。2 e# Z' e% H) s+ p$ h( A
  6. ./configure --enable-shared --enable-gpl --enable-libx264
    : ~3 B& U& _$ W7 P6 N
  7. #编译,需要较长时间,10分钟左右。
    * A; m# R0 y0 e
  8. make* X; b4 I8 T9 @/ Z9 ]0 P
  9. #安装
    2 o( \  k8 D2 _: s5 A) {
  10. make install* G% W" o7 @- n4 s
  11. #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下5 F' _: g7 g5 \) {
  12. echo "/usr/local/lib" >> /etc/ld.so.conf2 _$ j. l/ ~' k+ F
  13. echo "/usr/local/x264/lib" >> /etc/ld.so.conf/ j  {* c( {. a/ j8 S# r) J( T
  14. #再执行ldconfig,更新ld.so.cache,使修改生效。% C  b! q* g" ]0 d0 r: I$ I
  15. ldconfig! S9 g' }. Q: I8 G7 P4 k" P* N, y6 y
  16. #添加环境变量
    2 q; I/ g7 w% _8 d5 Y* x4 V
  17. export PATH=$PATH:/usr/local/lib( g7 k3 P, B) U" ~4 e
  18. #最后执行ffmpeg -version查看版本。
复制代码
如果执行还会报错则查看下ffmpeg的依赖是否完整:
2 ]" Q; M3 G2 d; l% ]
  1. ldd /usr/local/bin/ffmpeg
复制代码
a217db0d5cbbb0a2755deecd73dd3080.jpg
# D* L# b: D  v! d* U如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
. i0 {) Y# c; i
  1. #切到编译的目录下  l7 o) n" c* W7 O! y7 ?
  2. cd ffmpeg-4.1.37 R4 m7 |6 `1 T( \. k* g
  3. make uninstall
复制代码
13.测试
' b( x/ O; Z# G, m$ J
  1.     [root@localhost ~]# ffmpeg -i /root/Videos/111.avi  /root/Videos/1ew2q.mp4
    + G( _; b, Y7 h% G% D+ Z& N
  2.     ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
    * }3 x1 u* g' D. C0 [; `- [
  3.       built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)
    3 g; `$ D; [4 E) Q
  4.       configuration: --enable-shared1 b6 D( T5 V& [5 f6 Q
  5.       libavutil      56. 22.100 / 56. 22.100: c" C. U3 I2 W5 {* h. ]7 W) X
  6.       libavcodec     58. 35.100 / 58. 35.100
    8 N" v  E- ]. T3 I
  7.       libavformat    58. 20.100 / 58. 20.1000 T" W% t, b9 u2 `8 ^, |
  8.       libavdevice    58.  5.100 / 58.  5.100, G; Z# x" z. e# W6 h# `' ^  ?
  9.       libavfilter     7. 40.101 /  7. 40.101
    ' i; Y% I' {- v& l0 d/ x
  10.       libswscale      5.  3.100 /  5.  3.1006 D) i( n- q- _
  11.       libswresample   3.  3.100 /  3.  3.100
    0 \* e7 \2 X* Q) v+ \4 `
  12.     Input #0, avi, from '/root/Videos/111.avi':9 F- m8 s  A3 N6 Q
  13.       Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s- u% s+ S8 n; _4 y
  14.         Stream #0:0: Video: mpeg4 (Simple Profile) (DIVX / 0x58564944), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 1250 kb/s, 20 fps, 20 tbr, 20 tbn, 20 tbc
    : u$ D9 z) T5 c3 a( l
  15.         Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
    3 d  Y- I( l6 I2 L
  16.     Stream mapping:
    2 e) Z* V: X. ~
  17.       Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
    6 H" y; y- {5 p5 l. ?, q
  18.       Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))8 B/ Z- K7 G! B4 `: U
  19.     Press [q] to stop, [?] for help8 X) d5 `$ c5 h2 A, O
  20.     Output #0, mp4, to '/root/Videos/1ew2q.mp4':8 B$ y% A4 E* o6 @
  21.       Metadata:
    - Y, I# a5 {5 |; I* y
  22.         encoder         : Lavf58.20.100* ?( m7 K: z! [% b4 Z) R8 G% h
  23.         Stream #0:0: Video: mpeg4 (mp4v / 0x7634706D), yuv420p(progressive), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 20 fps, 10240 tbn, 20 tbc3 }; m4 @7 m+ w" D: v8 v* n3 V
  24.         Metadata:7 H" n" s! r2 x/ ^' I
  25.           encoder         : Lavc58.35.100 mpeg4
    ) ^: w  Z, C7 {! `- S
  26.         Side data:0 _3 N& F  u9 a* b, E* W  v) H; q
  27.           cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
    " A* Z8 ^# d& f% p$ |0 x/ E% R) Z
  28.         Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s( P1 K/ |$ w; l, t4 q  b( d
  29.         Metadata:
    $ m+ X. O. h) u& R
  30.           encoder         : Lavc58.35.100 aac; ?* E2 h8 k) {/ Z8 U- E8 t
  31.     frame=  351 fps=0.0 q=12.3 Lsize=     870kB time=00:00:17.50 bitrate= 407.2kbits/s speed=  20x   
    % O# q& a+ M2 h% G! ~7 |- W8 k
  32.     video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%
    2 ~- X, D! Y0 K( f6 F4 M
  33.     [aac @ 0xc51f40] Qavg: 1530.201
复制代码
x264编译的指令如下:' N  u2 b: P( r) x* Q- ?$ L
  1. ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码

7 _# ]8 p9 M7 R/ s: ?
7 b( q. O. K( E/ ^4 y: O  c4 o& F
5 |( _" G5 [% t3 e+ Z

) D  o. s0 ^$ J: g( @0 [) X3 f
# R; e5 j6 L$ b$ O1 I- C% ]. ?; x
- k, z8 I8 `" z) p' t4 u  I7 D+ ~+ ]
! Q& A. T+ s8 N+ j4 b2 _
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-8-5 10:21 AM , Processed in 0.109731 second(s), 26 queries .

Powered by xyh-moon X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表