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

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

[复制链接]

991

主题

92

回帖

5万

积分

管理员

积分
55457
发表于 2022-9-14 09:24:18 | 显示全部楼层 |阅读模式
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本
7 |& N9 V- c2 P& W. I- \8 N, m装ffmpeg之前需要安装各种解码器。1 ~. y5 g, G, V- t3 @" x
没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。
9 W" U3 o  _/ B: U- E1.lame
  1. wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
    * W; P5 j) n0 \, k8 r
  2. tar -zxvf lame-3.99.5.tar.gz: ~6 f& j. D0 g8 X
  3. cd lame-3.99.5
    . I0 d# X1 h" G0 D0 `  c+ Z
  4. ./configure --enable-shared
    9 `* a' {# Z% A2 a$ C8 Q: E
  5. make # P! \/ w4 P* T' w7 d8 r( m% e
  6. make install
复制代码
执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH
2 |- d- B1 V6 [  D! m: j7 m; Z1 P/ O则需要我们先安装GCC。1 P0 T! d1 L6 j' P% X( a+ L
  1. yum install gcc
复制代码
安装完成后再执行一遍。
# ?- a9 n& y: t4 B" v2.libogg
  1. wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz) V6 ~' }2 _  T* h
  2. tar -zxvf libogg-1.3.2.tar.gz, a% o7 W6 @" Z8 u) t3 S& t
  3. cd libogg-1.3.27 r0 d( B0 H  V% C1 t2 h
  4. ./configure --enable-shared
    ' o% `7 u" ^$ _& _8 G
  5. make 0 y2 C& P! [! w; s4 B: |$ i+ t
  6. make install
复制代码
3.libvorbis
  1. #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装
    # g  r2 u4 {" A, Q& i, }
  2. wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
    3 `" r3 @8 [3 I/ X0 t9 ?
  3. tar -zxvf libvorbis-1.3.5.tar.gz2 E9 \8 ]- [3 F
  4. cd  libvorbis-1.3.5  c; K6 K) q  f2 u- w  |: O$ q
  5. ./configure --enable-shared/ I! B, s" ?: B7 t" a5 I  l. T! l
  6. make , |- I( d: C- ~% X& N0 Y; D$ i
  7. make install
复制代码
6 O2 n# t6 D$ u: t# t% `
执行“./configure --enable-shared”如果报以下错误:: U# r% X, b4 X* A$ _! |2 j
must have Ogg installed!
* V& i& @6 h# m& o% h我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。
6 S# s) ?6 v$ M  H: N解决方案:
$ b6 B2 G2 H9 Q2 s: M
  1. [root@localhost ~]#vi /etc/ld.so.conf
    & z4 T6 T6 A( G
  2. include /etc/ld.so.conf.d/*.conf  
    / C  o3 N$ Z( n' g6 O3 b
  3. /usr/local/lib
    - h1 W. F+ `, N6 ]
  4. [root@localhost ~]#ldconfig –v
复制代码
4.xvidcore
  1. wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz8 W2 [8 o) q, F
  2. tar -zxvf xvidcore-1.3.2.tar.gz
    , I) Y- U+ x1 \+ P
  3. cd xvidcore/build/generic
    . W$ t. Y. C! V1 Q
  4. ./configure --enable-shared
    : W( B/ ~9 L% v/ ]5 _# X- Q
  5. make
    8 x) J! C% L: e# Z2 a2 Z2 g
  6. make install
复制代码
5.x264, }8 h) N) K/ X% m) u* g
b0afa659d6bbbc43d1e805c323c28ae2.jpg 4 @6 h: Y" k5 o9 p6 u9 E+ _" T
2 W# }, `. z$ ~/ k
libx264需要nasm的支持,nasm是一个编译器的角色。
' a4 A( \' y+ d+ R- G安装nasm:
7 L$ X; z. E8 N
  1. wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
    " T' t) F1 Z$ K7 ^* ^! H
  2. tar -xvJf nasm-2.13.03.tar.xz$ _, [) `5 ~& u: C* [
  3. cd nasm-2.13.03
    ' Y1 E+ i1 w6 t' a  u8 p
  4. sed -e '/seg_init/d' \3 S  i5 O9 B6 L  \
  5. -e 's/pure_func seg_alloc/seg_alloc/' \
    / L6 R! W  D; J) @* j. p+ {9 G. [
  6. -i include/nasmlib.h; V( I7 ]* _! n: K
  7. ./configure --prefix=/usr &&
    * r' c( a- f) J+ E! Q9 L' \/ Z1 n
  8. make+ F& ]) j4 k# o
  9. make install
复制代码
58d7b18423362b6c9f7c732170a0d7df.jpg
  r8 L2 Z9 y" R4 v; c+ Y安装完成后再安装x264, z' c1 O! l) d/ d' A: R
  1. wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2/ P5 j# B+ z. K
  2. tar -jxvf x264-snapshot-20190402-2245.tar.bz2+ O2 e) O) V. ]9 n5 Y2 T& Z7 @* x
  3. cd x264-snapshot-20190402-2245
    - }- P2 F9 v+ a( a; c0 h9 Z8 Y5 S4 d
  4. ./configure --enable-shared
    + x" V" ?8 ~& ~0 F
  5. make
    2 M+ L) c; @0 }
  6. make install
复制代码
6.libdts
5 y5 x" V% b. t1 ]8 b& ^" e5 J
  1. wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
    & g& S' }( @( p  f
  2. tar -jxvf libdca-0.0.5.tar.bz29 e& K7 c' M( t3 }! h' W. A
  3. cd libdca-0.0.5
    : E8 y3 \$ X2 I4 z/ S
  4. ./configure --enable-shared2 q( f' E0 M1 a% b5 M
  5. make
    * s9 t8 ^. `2 g9 i; v9 ]9 q3 [, k
  6. make install
复制代码
7.faad2: ?: w9 G% @4 T0 c" j4 o
  1. wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
    ( h2 U; ~% t5 E1 e) Q$ M7 C. [& L
  2. tar -zxvf faad2-2.7.tar.gz
      b" E" c1 k( ^8 \, z4 Y8 J
  3. cd faad2-2.7& E  O/ Q& R. |) t  w. S! M+ M4 |
  4. ./configure --enable-shared+ G( S% c7 c4 D$ V" S+ w, i4 R
  5. make " r* C$ b( `0 C  f! m( ^* l" u# J( W% ~
  6. make install
复制代码
8.faac0 O1 \# N! [' ?" {' W
  1. wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
      X9 l$ Y4 q* H$ |! {: Y
  2. tar zxvf faac-1.28.tar.gz# e  K# J, c( z! W9 j) H; j0 X
  3. cd faac-1.28
    : u3 J% h% F- _8 @
  4. ./bootstrap. U, j+ w: A% `1 g1 k1 q# s8 ~: {
  5. ./configure --prefix=/usr/local/ --enable-shared
    2 F% X1 f- V% m1 i7 {9 v" g8 q
  6. make && make install
复制代码
执行./bootstrap报错:
) a5 a7 m% {: B7 B6 L
  1. [root@localhost faac-1.28]# ./bootstrap. F# B4 x2 I7 Z1 ~8 @
  2. ./bootstrap:行3: aclocal: 未找到命令: Y& Y! \- Y, e/ X4 A- t) |
  3. ./bootstrap:行4: autoheader: 未找到命令
    " P& l5 r. Z; g, a6 i2 F
  4. ./bootstrap:行8: libtoolize: 未找到命令$ P# M# W0 F4 A
  5. ./bootstrap:行10: automake: 未找到命令
    $ k$ `& J4 A' T. j* b$ J% Q/ d
  6. ./bootstrap:行11: autoconf: 未找到命令
复制代码
解决方法:; C: k4 z. N1 c2 G  z: p+ u
  1. yum -y install automake
      r  u; r$ |3 g% w
  2. yum -y install libtool
复制代码
执行make && make install报错:
& K2 c" B  l4 K1 ~3 y" a$ F+ y
  1. make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”3 ~' E3 t0 g, h5 p# C
  2. source='3gp.cpp' object='3gp.o' libtool=no \+ b& ]9 j7 P# v3 F; t
  3. DEPDIR=.deps depmode=none /bin/sh ../../depcomp \
    ( M7 U/ }* w. g, U7 H) J4 \' g
  4. g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include   -Wall  -c -o 3gp.o 3gp.cpp6 D9 x+ Y5 N/ d8 n
  5. ../../depcomp: 第 512 行:exec: g++: 未找到
    * \+ j7 A/ M- I( q) s8 C
  6. make[3]: *** [3gp.o] 错误 127
    ) Z1 R0 p3 b" s" C' F' x
  7. make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”  H; P* m! M8 D2 _, B
  8. make[2]: *** [all-recursive] 错误 1% ?" Y# L, [" B" N- h5 s
  9. make[2]: 离开目录“/root/Downloads/faac-1.28/common”
    . Q7 u( q, F7 m  E+ O4 Q3 |" I
  10. make[1]: *** [all-recursive] 错误 1
      C7 Z: d, G$ F) b# x7 Z: }; s: p) q
  11. make[1]: 离开目录“/root/Downloads/faac-1.28”
    " J; d9 b$ k! Z! _5 x
  12. make: *** [all] 错误 2
复制代码
解决方法
0 M# N2 ^* D5 J/ o& A( D9 Z9 z
  1. yum install -y gcc-c++
复制代码
执行make && make install时报错:
4 j/ p& A& @% I% c3 o- ~; o' ~" G
  1. [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码
解决方法:
3 b% \9 _0 i6 T9 q
  1. 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
    + {! M2 ~6 t- P" p
  2. 解决方法:
    3 @  d/ U* t- X% g- h
  3. 从123行开始修改此文件mpeg4ip.h,到129行结束。
    3 {! Q- c7 |9 M
  4. 修改前:
    1 S% X8 \( }" \. Q  G
  5. #ifdef __cplusplus
    , T9 z0 g! i( [1 h
  6. extern "C" {* i1 e$ M* X$ C' `# _* k8 t+ V9 Z
  7. #endif
    6 a: \0 W, Q* F$ b' `% X2 H; n
  8. char *strcasestr(const char *haystack, const char *needle);
    6 `- l. r, {, t  i# p
  9. #ifdef __cplusplus; T' A* G+ c& M4 f# ^
  10. }0 @: Y6 Q3 t* `3 Q' W4 X! K
  11. #endif' ^, A! X$ S3 a* H. e! Q

  12. 4 n9 f, Z- Z2 s3 p
  13. 修改后:( V, m% V5 I+ m0 m( O) `5 l
  14. #ifdef __cplusplus5 |! z/ b6 i( }5 N& n7 Z+ @
  15. extern "C++" {, e7 F6 y! F# P# R9 o
  16. #endif
    5 o3 [7 P( I/ f- X) V1 N! \
  17. const char *strcasestr(const char *haystack, const char *needle);; G' [5 [" X: W1 f: ^8 ~6 d% t
  18. #ifdef __cplusplus4 }4 L$ L. u: w# c! D
  19. }
    $ V% a% j# \2 j
  20. #endif
复制代码
9.amr-nb
. p8 D% p9 m2 j3 o6 `) ^% k9 w
  1. wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2
    ! l) [! B7 A9 ]+ t
  2. tar -jxvf amrnb-11.0.0.0.tar.bz2
      y  l+ T5 \& P
  3. cd amrnb-11.0.0.06 @6 e6 ~( o6 w9 m1 H
  4. ./configure --enable-shared
    : ]5 J; @# b9 ~
  5. make
    6 W% D( l# }, E  B+ L" F) J' D: _
  6. make install
复制代码
执行./configure可能遇到的错误:& {, g6 r( l- Y. |; ?! w- L6 S. h
  1. configure: error: You need patch utility to prepare sources.
复制代码
解决方法:
% A0 S% }" K( R7 H& H8 B
  1. yum install patch
复制代码
10.amr-wb
( K: W# m( o4 ~1 l) U
  1.     wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2
    6 K' l$ K9 `9 m+ z
  2.     tar -jxvf amrwb-11.0.0.0.tar.bz2
    2 g5 z8 _# U% I9 C$ D7 T
  3.     cd amrwb-11.0.0.0
    0 g3 M) e' G6 c- a
  4.     ./configure --enable-shared  o6 O$ I6 }# d  F1 x: `
  5.     make ( s6 Y  h& G1 V1 `# |+ G1 y
  6.     make install
复制代码
11.yasm
. @' Y1 D5 @8 h) Y. Zffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。
+ X( g" ^7 _$ s7 Y2 ~; C
  1. yum -y install yasm
复制代码
12.ffmpeg- z* l3 k; W  b6 R' r
  1. wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz28 y; w& H$ _6 e* O. U( S1 L" k# E1 U% H
  2. tar -jxvf ffmpeg-4.1.3.tar.bz2
    % w; r8 h5 @" f% T2 R
  3. cd ffmpeg-4.1.31 s0 \' |  w, R3 n' L0 L/ i
  4. #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.$ p. b+ |/ |& h) V) N
  5. #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。
    ! d" N' M0 e( g5 P: _, j% l# y
  6. ./configure --enable-shared --enable-gpl --enable-libx264
    % |. [$ Q2 O! Z4 C+ W# Z1 z1 Z
  7. #编译,需要较长时间,10分钟左右。
    & V$ \5 P  e% P/ s. v/ W* J# P; `
  8. make' J6 I( [/ e9 f( w
  9. #安装
    . A9 _) g- D, h/ r, p& l' _- `
  10. make install
    ' w, }9 R) t' A/ @: K- Z- z
  11. #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下
    : {7 z0 H, y4 |: I, z! r& W- G, ?# z4 C
  12. echo "/usr/local/lib" >> /etc/ld.so.conf* i7 A# m' s- z. R
  13. echo "/usr/local/x264/lib" >> /etc/ld.so.conf2 i3 w4 o2 ?* U' D
  14. #再执行ldconfig,更新ld.so.cache,使修改生效。
    ' [6 ^9 V/ J" p! C5 i
  15. ldconfig; X5 a- V& x1 }, Z  U) {1 Z
  16. #添加环境变量* `5 k$ O1 e+ n( o* J
  17. export PATH=$PATH:/usr/local/lib
    / H& x$ e. E% o" x2 ]! W% z, |: a
  18. #最后执行ffmpeg -version查看版本。
复制代码
如果执行还会报错则查看下ffmpeg的依赖是否完整:
8 h! d( R* v- N0 j) O* _% Q  h  t3 U
  1. ldd /usr/local/bin/ffmpeg
复制代码
a217db0d5cbbb0a2755deecd73dd3080.jpg . U0 V8 J  Z- e2 ]
如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:& k6 V! D! Y6 w4 ?, ^! o
  1. #切到编译的目录下
    7 i4 a* H3 M3 U6 }5 z6 Q) {
  2. cd ffmpeg-4.1.3
    - C6 T4 N$ S; \% {$ E3 Q
  3. make uninstall
复制代码
13.测试
( G* K3 f2 m2 s6 F4 Y
  1.     [root@localhost ~]# ffmpeg -i /root/Videos/111.avi  /root/Videos/1ew2q.mp4
    6 {- H% L7 d  m$ w5 g3 o
  2.     ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
    1 Z5 Y1 }9 }# F: I3 W0 U
  3.       built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)) c( z' t1 J6 u1 I6 {, H* k3 ~
  4.       configuration: --enable-shared) Y. D+ W  ~- K0 @# l5 X
  5.       libavutil      56. 22.100 / 56. 22.100& J2 Z) f& r$ t; K$ `/ Z2 F
  6.       libavcodec     58. 35.100 / 58. 35.100
    ' Y# a- g# Z$ o, Y1 q
  7.       libavformat    58. 20.100 / 58. 20.1000 ]: {+ n5 \8 h  f
  8.       libavdevice    58.  5.100 / 58.  5.100* o7 u* Q9 @% A" m% Q
  9.       libavfilter     7. 40.101 /  7. 40.1019 F  P( ^) w, l* U# t
  10.       libswscale      5.  3.100 /  5.  3.100
    & ]/ |' q  ~* K- r& H9 [# T% ^
  11.       libswresample   3.  3.100 /  3.  3.100( r! Z3 X3 U' g# T
  12.     Input #0, avi, from '/root/Videos/111.avi':0 C) x7 g: ^- _( F4 i( P# k% b
  13.       Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s- f( d, S  |1 M% S: C" w7 ]
  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 tbc5 v! G  F5 o0 R8 Z# l; k
  15.         Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
    1 z0 P0 z- {% K1 Q9 n; @6 F5 ?$ X
  16.     Stream mapping:
    , L7 c1 \9 A, Q  \- ?( y
  17.       Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
    7 q! }5 N8 ^8 V- B9 C6 Z8 `2 e
  18.       Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))7 C) O7 V' C- T! @
  19.     Press [q] to stop, [?] for help9 f' _' y8 f6 w3 _. R, @5 H3 Z6 f
  20.     Output #0, mp4, to '/root/Videos/1ew2q.mp4':
    0 w7 W' K2 z! E/ e+ T- W
  21.       Metadata:
    ' w) Q6 ^" f' K8 }4 o& ]
  22.         encoder         : Lavf58.20.100. G: t4 v& k- c0 a1 m5 ^; P
  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 tbc- ?- |4 {, R7 B" h1 w" f7 p) D
  24.         Metadata:
    % Z5 K+ d" x& r7 ~
  25.           encoder         : Lavc58.35.100 mpeg4: B+ T/ X- v6 _$ q7 I' G# E- J
  26.         Side data:% c( S0 F1 y6 W9 X4 X7 O6 \* y
  27.           cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1$ Y6 w4 r0 L6 ]3 h- j
  28.         Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s/ O* w0 O% A8 U, g/ K' B4 j6 [
  29.         Metadata:
    2 [3 z0 }! z. G
  30.           encoder         : Lavc58.35.100 aac, J0 R, [7 [2 f7 l; t
  31.     frame=  351 fps=0.0 q=12.3 Lsize=     870kB time=00:00:17.50 bitrate= 407.2kbits/s speed=  20x    ( J1 n# e$ t( E3 b
  32.     video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%  K( E4 F, \1 N+ z' e) X  l
  33.     [aac @ 0xc51f40] Qavg: 1530.201
复制代码
x264编译的指令如下:, W) ]. k0 R5 f6 s4 [
  1. ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码
6 Q% ]* {6 t! K, Q9 f" r

, C4 p" m+ ?) b5 E- O
" E: D& f( f+ k0 P: ?. y7 p
- |3 a) O# F! r$ \" S
) J+ j$ |1 a" C  }
9 h9 ]  H/ O# O" X# [7 A' Y4 ?  {7 u
- X3 D+ F! t$ d  R4 i' Q# @8 o) Z7 f0 @4 j0 V
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-8-5 10:19 AM , Processed in 0.101097 second(s), 25 queries .

Powered by xyh-moon X3.5

© 2001-2026 Discuz! Team.

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