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

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

[复制链接]
发表于 2022-9-14 09:24:18 | 显示全部楼层 |阅读模式
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本
* i% ?: `1 m/ R4 D; g0 H装ffmpeg之前需要安装各种解码器。+ _) t1 H/ B. k1 {
没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。
, [8 \1 @7 q! m$ z" E( U1.lame
  1. wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
    $ E' D" a; m9 U- }# s' ]# X5 ?: Z
  2. tar -zxvf lame-3.99.5.tar.gz- {  [- o" M1 F5 d' _7 X. N
  3. cd lame-3.99.5 + w4 Z6 \& ]( y+ F
  4. ./configure --enable-shared) M& R  O3 f* D- Q
  5. make $ s& H5 [' R$ L* H6 F* l( O8 q8 J
  6. make install
复制代码
执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH
; i9 O: T) O9 c3 T则需要我们先安装GCC。
2 m, {9 H) p! _# o! m
  1. yum install gcc
复制代码
安装完成后再执行一遍。
! h- T' e) H. o; k7 c9 J2.libogg
  1. wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz$ f, Z3 O; b5 Z
  2. tar -zxvf libogg-1.3.2.tar.gz
    ) ~: @& S& \* o, g- k+ [, X7 e
  3. cd libogg-1.3.2! W& C2 q5 ?) ?- F- T, }: k
  4. ./configure --enable-shared
    9 w2 P3 s5 _0 K* ~; L, t
  5. make 9 d5 o$ o, z, E6 X# i( t# E* I
  6. make install
复制代码
3.libvorbis
  1. #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装+ f% X# K9 c. `; H+ A
  2. wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz3 S: C3 s/ ]- o( m( _, A
  3. tar -zxvf libvorbis-1.3.5.tar.gz1 o0 v! @4 M; z  k0 t7 }( p
  4. cd  libvorbis-1.3.55 i( u3 x$ D  Q8 X5 ?/ ?
  5. ./configure --enable-shared
    . v9 U: s* M' J# U
  6. make
    + Z" ]* b. m& [6 A+ x' ^/ R
  7. make install
复制代码
6 b; X! }! O) p3 L, g" o9 T
执行“./configure --enable-shared”如果报以下错误:5 r" L: Q6 u( L
must have Ogg installed!7 h$ o! ~+ N' I( v
我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。
7 l8 x1 g, c; X3 U; L& X* M4 Q解决方案:" s' H2 L" W0 i3 Q6 C
  1. [root@localhost ~]#vi /etc/ld.so.conf) w. Z; E) U) m
  2. include /etc/ld.so.conf.d/*.conf  ( N8 X3 W+ Z. }% F
  3. /usr/local/lib) x* H' ~. X+ F/ b2 b& S- b
  4. [root@localhost ~]#ldconfig –v
复制代码
4.xvidcore
  1. wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
    ! N! j/ g" Z6 q- E) p
  2. tar -zxvf xvidcore-1.3.2.tar.gz
    2 R6 U& h$ B6 p9 O& }8 z
  3. cd xvidcore/build/generic
    4 a. d5 t1 l" C) N* v
  4. ./configure --enable-shared8 c' {' E5 k7 T$ A: E( `
  5. make - `4 m: Y0 l) ?
  6. make install
复制代码
5.x264$ G9 f6 I' o6 Z. o. ?3 ^9 y
b0afa659d6bbbc43d1e805c323c28ae2.jpg 0 ^: {/ W3 n4 A8 o2 B, ]9 d
4 H! u4 U2 [" ]! P2 y: n
libx264需要nasm的支持,nasm是一个编译器的角色。0 p# x. {- ~# V1 L% Z9 t
安装nasm:; q( z8 T8 u% U1 u- }4 s
  1. wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz: v! N# i  e/ O6 x* F
  2. tar -xvJf nasm-2.13.03.tar.xz
    , y$ U; ^4 P" O
  3. cd nasm-2.13.03
    % g" f8 `6 F. S5 G7 B2 D: A
  4. sed -e '/seg_init/d' \
    7 G, x: D1 ]2 h
  5. -e 's/pure_func seg_alloc/seg_alloc/' \
    . B! k  v- p7 h3 s
  6. -i include/nasmlib.h' e' e1 d+ o8 F3 g+ q" Z( ?
  7. ./configure --prefix=/usr &&
    " o9 N" z  ~* v1 H7 ^
  8. make
    " t+ ~5 z* b: `; U
  9. make install
复制代码
58d7b18423362b6c9f7c732170a0d7df.jpg 0 f9 q" g, I- D8 J; p( R
安装完成后再安装x264
% Z8 L+ m2 s+ j9 q' Y
  1. wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2
    3 [  c) n- \/ i
  2. tar -jxvf x264-snapshot-20190402-2245.tar.bz2& W% `0 R, e0 c6 ]6 }
  3. cd x264-snapshot-20190402-2245: Z5 c4 K- W0 f- t6 |3 J1 N6 O
  4. ./configure --enable-shared/ E6 g  t4 u& l& F1 B
  5. make . K9 D% y; X) o. y+ a2 Z9 [
  6. make install
复制代码
6.libdts: I, ], h) [( y1 g" @* X; b/ W
  1. wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
    1 t/ }- L' m$ d$ l+ Q# N5 R1 n: l
  2. tar -jxvf libdca-0.0.5.tar.bz2  Q4 H8 F! r# |! s
  3. cd libdca-0.0.50 N  G/ |* c7 ^3 p  a
  4. ./configure --enable-shared- Q6 R2 z- H- n
  5. make
    ! z6 ^# i. E+ P0 B8 U+ H7 [/ D
  6. make install
复制代码
7.faad2
, F& Q. _7 A( ]
  1. wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
    ) {$ H7 M* Y  r$ v& B
  2. tar -zxvf faad2-2.7.tar.gz6 j/ D# I4 M' ^( X" U! j6 ?
  3. cd faad2-2.7
    ( {3 }2 C" H& H$ F0 [
  4. ./configure --enable-shared6 j8 s2 h  m4 S7 i
  5. make
    : a. }+ L/ I" N9 s! r
  6. make install
复制代码
8.faac
! i/ a* E& ]  M# j
  1. wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
    , Z9 \. n+ v9 x/ [7 u7 h; j( s$ n- I+ X
  2. tar zxvf faac-1.28.tar.gz. q; d. ], e2 Q% C) a2 K  u
  3. cd faac-1.28: o% ^# g, z$ D
  4. ./bootstrap
    , \4 C; i. Q; y1 s
  5. ./configure --prefix=/usr/local/ --enable-shared9 l7 ?4 _) q4 P5 U/ w* x2 d
  6. make && make install
复制代码
执行./bootstrap报错:
2 N7 ?6 @% q; }; c. X( W. y
  1. [root@localhost faac-1.28]# ./bootstrap+ L. ^) |4 w' ~( ^- y
  2. ./bootstrap:行3: aclocal: 未找到命令0 @$ H( l7 |4 |: a& w! f
  3. ./bootstrap:行4: autoheader: 未找到命令
    - Y- X$ P6 l* n! p1 k7 ^3 b: U
  4. ./bootstrap:行8: libtoolize: 未找到命令
    0 n' R! b* U. E" u3 z
  5. ./bootstrap:行10: automake: 未找到命令
    - q9 a( i! w( U. I+ N
  6. ./bootstrap:行11: autoconf: 未找到命令
复制代码
解决方法:) R8 U8 |' w4 ]: W% x8 j5 }+ Q0 b% O; W
  1. yum -y install automake* g2 j6 L$ d2 Z9 z+ J) b  H; C
  2. yum -y install libtool
复制代码
执行make && make install报错:
( u9 D9 d1 M8 {9 ^9 E3 f
  1. make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”7 ?  A) \( C0 @2 p3 m0 Q
  2. source='3gp.cpp' object='3gp.o' libtool=no \
    ! r5 |' n' n: ]" k7 c
  3. DEPDIR=.deps depmode=none /bin/sh ../../depcomp \
    " F4 k( W- y1 P1 I
  4. g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include   -Wall  -c -o 3gp.o 3gp.cpp  z! w" u, o1 k
  5. ../../depcomp: 第 512 行:exec: g++: 未找到: z6 {' G) I5 e
  6. make[3]: *** [3gp.o] 错误 127* W; D: {* n, d
  7. make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”6 a' C, `5 d+ h* A1 M% ~
  8. make[2]: *** [all-recursive] 错误 1( b( }  ?' j, @( V) H) k4 s8 d
  9. make[2]: 离开目录“/root/Downloads/faac-1.28/common”8 r* M) K5 H( t! \9 N
  10. make[1]: *** [all-recursive] 错误 1
    : J7 n" [8 ~9 w% F  |
  11. make[1]: 离开目录“/root/Downloads/faac-1.28”
    " _, s  K4 ~" Q1 m
  12. make: *** [all] 错误 2
复制代码
解决方法( \% l0 K" p& l+ Q/ h2 q0 r5 s
  1. yum install -y gcc-c++
复制代码
执行make && make install时报错:
7 X& e7 W8 `9 I' ?. J2 m
  1. [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码
解决方法:  n2 u2 ]9 ?6 w4 V
  1. 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
    " }& n" G( b5 @7 s' F
  2. 解决方法:
    $ {% p& K) ~: K7 I
  3. 从123行开始修改此文件mpeg4ip.h,到129行结束。
    3 h. T( x7 P' d9 y! k: U% q
  4. 修改前:; G0 w8 u  j/ X6 N3 {9 U) u. j' p
  5. #ifdef __cplusplus6 [1 ~( U3 O( \  C! Y
  6. extern "C" {6 t2 E9 j, i" x' X: `3 a; Y
  7. #endif, W$ U( s5 M  c" c
  8. char *strcasestr(const char *haystack, const char *needle);
    % `# A( g+ N) Z" f6 C
  9. #ifdef __cplusplus: C. T( W- ~" e) Y5 l
  10. }, U2 I3 @7 c: n1 [. }& d5 `
  11. #endif
    & O) ?% H, ~( t: B

  12. ) R9 e; x$ K+ q5 {% g$ _! ^- p; L
  13. 修改后:& D+ w* W( @; q
  14. #ifdef __cplusplus
    ( C4 a8 e3 ~1 \* j# U6 v
  15. extern "C++" {. a; a& M0 ]7 a6 q' n7 j6 y
  16. #endif
    8 c$ x4 q# T& h" T+ b" g3 y8 m" e0 p& L
  17. const char *strcasestr(const char *haystack, const char *needle);
      O' T6 j# X! y" [0 H
  18. #ifdef __cplusplus
    2 v4 U- o8 `2 j8 o7 j' ~
  19. }* f: g/ s- q7 a) {3 D# Y1 k' c
  20. #endif
复制代码
9.amr-nb* X4 T* Z2 z9 R8 I) r4 m  @6 d! S
  1. wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2( d  D% X& n. h/ y1 A
  2. tar -jxvf amrnb-11.0.0.0.tar.bz2
    1 v/ A: b2 D7 }2 G: y, v
  3. cd amrnb-11.0.0.06 \9 h& E, _, A' ?7 R
  4. ./configure --enable-shared: n6 L- u& j4 K+ M' t
  5. make
    % j/ Q5 g3 @* R$ ?: g' h9 _
  6. make install
复制代码
执行./configure可能遇到的错误:
: r0 L6 S8 F3 x% n7 P2 Z# V) \
  1. configure: error: You need patch utility to prepare sources.
复制代码
解决方法:* {6 z5 n* u5 j) l8 [! s, o
  1. yum install patch
复制代码
10.amr-wb: |3 F; {5 N: \- a% e
  1.     wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2% f8 R5 @! D$ ^. }# y
  2.     tar -jxvf amrwb-11.0.0.0.tar.bz2, d, d) Y+ ~# k( L9 c
  3.     cd amrwb-11.0.0.0# M" p& c( ~* e1 G. s
  4.     ./configure --enable-shared
    ' B* X( {6 ?; O8 Q3 x- u% H! \
  5.     make
    * ^! c1 f1 R$ A" k
  6.     make install
复制代码
11.yasm
, I3 F7 G. L; M& [/ N& ?1 n2 I2 lffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。
: [, G, h: y) p- x1 e! i1 k1 o2 r
  1. yum -y install yasm
复制代码
12.ffmpeg
: K& _' Y  p" b8 n  U/ g6 h
  1. wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2
    9 M0 o# g1 J4 E' _
  2. tar -jxvf ffmpeg-4.1.3.tar.bz2
    ! K8 b3 A9 Q! T
  3. cd ffmpeg-4.1.36 O" u7 ]4 Y: G$ Y* y" T
  4. #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.
    , ^4 q5 j2 i& O$ P' V
  5. #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。7 K' O! o' @. S9 ?+ s
  6. ./configure --enable-shared --enable-gpl --enable-libx264: h# \, u2 z3 {" ]$ Q6 U) }
  7. #编译,需要较长时间,10分钟左右。
    7 S/ E" l8 Y, L8 F/ l& I6 V
  8. make
    * S" H6 M8 {4 Z9 L+ [6 C# W
  9. #安装- Z9 s( o4 g" S, p/ p
  10. make install
    & m% g) v; J$ {4 C! j
  11. #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下1 c9 C" ^5 d6 q5 b* U
  12. echo "/usr/local/lib" >> /etc/ld.so.conf
    6 _- G% ?  A: p. M0 w" @5 j. L1 Y5 m. Y
  13. echo "/usr/local/x264/lib" >> /etc/ld.so.conf) J! ?5 Y+ n/ J2 P# K" I
  14. #再执行ldconfig,更新ld.so.cache,使修改生效。6 U7 s# \$ y* y9 i# Y
  15. ldconfig' a  w) ]4 P: t/ g: Z. y
  16. #添加环境变量
    # K  L6 ~4 j7 w- _& t: R9 u
  17. export PATH=$PATH:/usr/local/lib3 i7 h4 n" s2 k: ?
  18. #最后执行ffmpeg -version查看版本。
复制代码
如果执行还会报错则查看下ffmpeg的依赖是否完整:
, z& `3 M  }9 c( {% u
  1. ldd /usr/local/bin/ffmpeg
复制代码
a217db0d5cbbb0a2755deecd73dd3080.jpg / g1 _+ F- c7 M
如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
: j. b& _* f; ~. W8 Z
  1. #切到编译的目录下. J3 `& C8 d& u8 n% g' b
  2. cd ffmpeg-4.1.30 l1 L1 ]8 a# v2 P
  3. make uninstall
复制代码
13.测试/ l& W' k2 v6 x0 ?  T2 L3 _
  1.     [root@localhost ~]# ffmpeg -i /root/Videos/111.avi  /root/Videos/1ew2q.mp46 _9 @8 z2 s/ F+ }8 B9 c
  2.     ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
    # g1 f+ X: C6 \, V# @/ A  |: d5 k8 A' K
  3.       built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)4 c" @( n# k# D5 h6 E
  4.       configuration: --enable-shared/ W6 w: _3 o" j
  5.       libavutil      56. 22.100 / 56. 22.100) V1 i3 c2 n* i" L/ t' b
  6.       libavcodec     58. 35.100 / 58. 35.100) [9 J; y! T" e. ?/ [5 T
  7.       libavformat    58. 20.100 / 58. 20.100
    / m+ \) `# B' [4 o7 v0 Y
  8.       libavdevice    58.  5.100 / 58.  5.1007 @* t" c9 ~. B* R7 C
  9.       libavfilter     7. 40.101 /  7. 40.101, h5 e' U% a) \" O/ U
  10.       libswscale      5.  3.100 /  5.  3.100
    , c6 Y- C, m' b. ?) [$ y; j0 Q
  11.       libswresample   3.  3.100 /  3.  3.100
    : ~1 ^+ r  N& A8 m2 h( w% Z
  12.     Input #0, avi, from '/root/Videos/111.avi':
      q  a6 n) T& O" k8 u6 s% V* d
  13.       Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s% g/ A. B/ r8 Z% ]" Q6 v
  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 tbc6 K7 H. t5 k2 C2 V/ G
  15.         Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
    : o" A3 a6 V6 e8 Z
  16.     Stream mapping:
    8 O% t& K" t- q
  17.       Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native)): a3 g" t9 t- b4 D' ^* l5 U! e
  18.       Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))% w9 C- g/ `6 P) B2 b3 p
  19.     Press [q] to stop, [?] for help
    % M: S5 I3 v: S3 r
  20.     Output #0, mp4, to '/root/Videos/1ew2q.mp4':
    1 m% P: N9 _4 `; V1 J
  21.       Metadata:
    . P; t& A' E; a( S  n7 J5 a
  22.         encoder         : Lavf58.20.100
    * L! a7 V4 W' ?; ?3 @
  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( i; P! n* _- t; G) Z) F
  24.         Metadata:. Y- d4 U; U  c3 w, ]5 A
  25.           encoder         : Lavc58.35.100 mpeg4/ T0 f9 G3 L% Y2 ~! m' ?- z' O
  26.         Side data:
    & N; ^! k7 n% z2 @6 L0 I( a
  27.           cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
    ) \/ ~6 _# Q3 {  Z; R2 |( `
  28.         Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
    0 B( s: S3 }% U$ p6 `
  29.         Metadata:
    9 B$ W0 F0 C$ H4 x& a+ v
  30.           encoder         : Lavc58.35.100 aac
    $ x+ `2 c- M8 I4 A
  31.     frame=  351 fps=0.0 q=12.3 Lsize=     870kB time=00:00:17.50 bitrate= 407.2kbits/s speed=  20x   
    1 L( j. |2 E# V- e+ J
  32.     video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%' ]7 t9 d5 S$ ~. o
  33.     [aac @ 0xc51f40] Qavg: 1530.201
复制代码
x264编译的指令如下:9 G# x6 Z6 {1 }' l. r
  1. ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码

2 a8 Q" l3 i) W1 p; m) N4 A/ g2 H
: p$ a+ o4 G8 ?! g
' O5 }; s3 L7 A  V9 h# n2 c0 m; N2 P
# B! f: O7 O, J' l7 i1 L" R
& n% z) x' |1 ]# q& A3 s7 ^- K# l  K8 s, s9 m6 \* V: z
! y- W6 ]3 l' w, w5 Q1 p

5 m$ m3 c" z* Z+ v0 z; h4 t
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-11-3 12:31 AM , Processed in 0.090774 second(s), 26 queries .

Powered by xyh-moon X3.5

© 2001-2026 Discuz! Team.

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