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

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

[复制链接]

989

主题

92

回帖

5万

积分

管理员

积分
55362
发表于 2022-9-14 09:24:18 | 显示全部楼层 |阅读模式
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本
# V" x" L7 l2 [3 w装ffmpeg之前需要安装各种解码器。
+ L  h8 |: W. y3 m* `1 L没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。+ [6 p  V6 B0 c8 e" C
1.lame
  1. wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz6 b4 S8 |6 {/ f( E0 S% N
  2. tar -zxvf lame-3.99.5.tar.gz; ~1 {! R( Q% j2 T5 B
  3. cd lame-3.99.5
    ! e7 h+ F) C+ W  v; t# f9 [
  4. ./configure --enable-shared
    % R: N* l! t* w, l
  5. make
    & z7 Y! O4 ?: `& e; X* n: E6 T$ _
  6. make install
复制代码
执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH8 f) a! S4 e) o; `8 J. x* r6 a
则需要我们先安装GCC。& L( K* ~7 J% F2 U
  1. yum install gcc
复制代码
安装完成后再执行一遍。
) Y: D) C. u; a! f% ?  ~2 A2.libogg
  1. wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz# s: |3 I* l6 W7 Z. C" J* P
  2. tar -zxvf libogg-1.3.2.tar.gz5 t$ j7 L$ C$ [/ W, D1 ^3 L
  3. cd libogg-1.3.2% ?( r7 _% k' _4 j' x: u6 M
  4. ./configure --enable-shared' T' q" u, o6 }  h' h, L5 u
  5. make 2 h8 o5 w* V3 M7 `+ B8 L
  6. make install
复制代码
3.libvorbis
  1. #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装" d& L7 y0 w7 l
  2. wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz( @4 a! a) F: c, u+ }+ a
  3. tar -zxvf libvorbis-1.3.5.tar.gz
    0 N$ e# ~: `7 {) J# S5 X- n$ a' N
  4. cd  libvorbis-1.3.5
      }) X8 N% k" P, N: H: ~
  5. ./configure --enable-shared
    3 j0 ~' T, Z  i+ [' L7 K1 Q
  6. make
    : V) b5 K; m6 {+ C" N
  7. make install
复制代码
5 o) V) |, k$ B" {0 y- g
执行“./configure --enable-shared”如果报以下错误:
# p9 @$ b0 b; B( I7 e1 Hmust have Ogg installed!" R( h& @- k( s/ r
我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。; A' G2 b( T& @) @- \% _
解决方案:
# ~- B( ~3 ~  G: R/ R% v/ J3 j( G0 y
  1. [root@localhost ~]#vi /etc/ld.so.conf
    3 g' i4 V( w$ z
  2. include /etc/ld.so.conf.d/*.conf  
    4 I+ h( q, w# H
  3. /usr/local/lib  |7 k5 V+ \' B& V; a+ ]7 J) B4 c
  4. [root@localhost ~]#ldconfig –v
复制代码
4.xvidcore
  1. wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz$ c4 }7 K6 f! `7 R% L. C4 ?; T
  2. tar -zxvf xvidcore-1.3.2.tar.gz : @6 ]$ r3 P# \5 Y$ P
  3. cd xvidcore/build/generic
    $ d$ }" I) T( Z2 L0 T
  4. ./configure --enable-shared3 o/ h8 F8 ]+ D$ D: i4 k9 ]
  5. make 7 k2 T& m) e) _$ E% i# g  ]
  6. make install
复制代码
5.x264
' k$ l$ V6 C! l. l8 T b0afa659d6bbbc43d1e805c323c28ae2.jpg
7 U0 G7 y& q; b, u/ o
; Y8 j" j0 k/ z& n
libx264需要nasm的支持,nasm是一个编译器的角色。
6 q. m( j- u) X7 W+ ?+ a安装nasm:8 F3 F6 v5 q' J0 X* v+ {
  1. wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
    ' r$ Y5 q; V. ^( |
  2. tar -xvJf nasm-2.13.03.tar.xz7 ?7 Q: k  W7 D7 m" h9 N- U/ I& A
  3. cd nasm-2.13.031 w1 n3 B% ~# i
  4. sed -e '/seg_init/d' \+ ]- {( H' ~0 m' T/ {. [5 |
  5. -e 's/pure_func seg_alloc/seg_alloc/' \* y( U% z; N7 w) C* ^" X& Y
  6. -i include/nasmlib.h
    8 @# b, ?& y' K" Z/ |% |
  7. ./configure --prefix=/usr &&, r  _+ ]: [$ h" K4 ^5 u
  8. make$ n1 _* Q% ^+ X* E: Y
  9. make install
复制代码
58d7b18423362b6c9f7c732170a0d7df.jpg
& C6 \% w! \; X安装完成后再安装x264
+ G; m1 w, _% g9 t0 a' x! }
  1. wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz24 ?; r" c7 c: B5 i: l. ^$ L
  2. tar -jxvf x264-snapshot-20190402-2245.tar.bz2$ h3 l/ }+ r5 u9 F8 v
  3. cd x264-snapshot-20190402-2245
    $ z1 s: n% c* Y' L" @
  4. ./configure --enable-shared
    # Y& f) J! @" N- Y; v
  5. make 9 Q7 ]6 `) r& G! |. I9 Z. T7 V
  6. make install
复制代码
6.libdts0 p' d: f6 y$ I5 b
  1. wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2: b' e' D  V; E1 |7 o9 `  `; G% U5 [
  2. tar -jxvf libdca-0.0.5.tar.bz2
    & F, g0 \7 L- u* M
  3. cd libdca-0.0.54 }7 z3 X; W4 A: e
  4. ./configure --enable-shared7 Q0 |2 a1 u* m; l; V+ U
  5. make
    7 F8 |2 a9 ?  P* y- C# t8 ?
  6. make install
复制代码
7.faad2
, G$ o9 K- Q* S* y( b
  1. wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz9 }2 r2 I0 f& M1 G7 C( }& o- r" D
  2. tar -zxvf faad2-2.7.tar.gz; T! X& _6 ^1 ]9 B/ k- O
  3. cd faad2-2.78 u% ~! ?: W6 ]
  4. ./configure --enable-shared
    7 G3 F$ E# O' G- ~$ W" U4 `
  5. make
    ! p4 ~" S" C. @/ T; t# p+ `
  6. make install
复制代码
8.faac
6 n/ ^8 L4 l. D" ]- B
  1. wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
    " z1 Z) }1 i& {9 a  ]- |
  2. tar zxvf faac-1.28.tar.gz( ^& P, `+ K) `9 a- k, p' X
  3. cd faac-1.28
    0 z5 ?  m; ]# Y' ^
  4. ./bootstrap
    1 t; Z+ s5 o' K7 A5 b' C3 y
  5. ./configure --prefix=/usr/local/ --enable-shared
    ( r4 o) y" S! E& j* _
  6. make && make install
复制代码
执行./bootstrap报错:
' v3 M2 s3 J  {0 s2 r5 p2 h" [. }. C6 T
  1. [root@localhost faac-1.28]# ./bootstrap
    * c; f  b: H" Q* A7 i1 o! z& Z
  2. ./bootstrap:行3: aclocal: 未找到命令
    / U1 c' r0 f% b( ^
  3. ./bootstrap:行4: autoheader: 未找到命令5 z! \3 t  i- ]
  4. ./bootstrap:行8: libtoolize: 未找到命令' ?8 Y  O5 q9 p0 X
  5. ./bootstrap:行10: automake: 未找到命令
    + ]+ ~) S9 S4 ?! u
  6. ./bootstrap:行11: autoconf: 未找到命令
复制代码
解决方法:. W% ^. H. a& E/ s; j5 D
  1. yum -y install automake6 c3 {) G. Q, h& Q2 V  q# H8 A
  2. yum -y install libtool
复制代码
执行make && make install报错:
6 W, t0 p) Q. w+ j! d6 q2 h& v
  1. make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”
    ) I# E$ ?1 E/ h2 h  U7 s
  2. source='3gp.cpp' object='3gp.o' libtool=no \
    5 g3 o" q& S: `% O) H5 b# z
  3. DEPDIR=.deps depmode=none /bin/sh ../../depcomp \9 D) i0 U& g& ~5 |
  4. g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include   -Wall  -c -o 3gp.o 3gp.cpp
    % y) z+ s, `9 L- {
  5. ../../depcomp: 第 512 行:exec: g++: 未找到
    . b5 K. p) K( @9 m( K& ]
  6. make[3]: *** [3gp.o] 错误 127
      c# g: E$ J2 F' X3 Z. n8 k$ P( f
  7. make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”. r5 ~: n8 @3 F6 S8 o
  8. make[2]: *** [all-recursive] 错误 19 w+ D# f  H9 j& c4 k0 I
  9. make[2]: 离开目录“/root/Downloads/faac-1.28/common”
    # Y: \% k( G3 Q! t* e4 ^7 z
  10. make[1]: *** [all-recursive] 错误 1
    , F7 `( q8 y! c& q7 ?
  11. make[1]: 离开目录“/root/Downloads/faac-1.28”. K0 F( q( E" `  c
  12. make: *** [all] 错误 2
复制代码
解决方法) Z$ ~4 G- |+ c3 j6 W# c' A
  1. yum install -y gcc-c++
复制代码
执行make && make install时报错:  V* @1 T5 T% b( A) x: b7 W9 ^) n
  1. [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码
解决方法:6 u% z! h4 H' p) Z% |& ^- v
  1. 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
    . ~5 W0 T% W/ k3 P: C  U1 _
  2. 解决方法:
    5 I  F" g: k! {: I% S# {6 A
  3. 从123行开始修改此文件mpeg4ip.h,到129行结束。
    1 ]. ]" x/ `" n& K. ~
  4. 修改前:
    ( N0 n8 p0 }! U) ~
  5. #ifdef __cplusplus
    ! Y" a/ B) ~+ F
  6. extern "C" {
    ; r4 s4 l3 D$ r1 t2 K  s# Y; \
  7. #endif
    ( g# `; v. n' O1 f4 |4 \& \1 A, p
  8. char *strcasestr(const char *haystack, const char *needle);7 y+ f' h' r0 [" \: \
  9. #ifdef __cplusplus+ T  l+ K! y' V' q) [' `( C
  10. }
    1 h# o. c7 n, [( N
  11. #endif6 \. m" `( y  s( Q, M8 Q& q
  12. ' L4 {6 x$ X. X2 O, Y
  13. 修改后:
    ; S: u0 b) k+ z6 G
  14. #ifdef __cplusplus% N8 L8 R0 X7 \( M  P) \( G
  15. extern "C++" {
    / U2 o6 e. \( R$ o0 q
  16. #endif
    / N- C) K+ i9 V; A
  17. const char *strcasestr(const char *haystack, const char *needle);2 r. E: E- j9 f  I
  18. #ifdef __cplusplus. Q1 `7 f2 x5 X8 m* U( B2 H2 f
  19. }% P7 A& t% H( C
  20. #endif
复制代码
9.amr-nb. I6 G$ f# Z( |# g; _
  1. wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2; V! v; S! D+ T
  2. tar -jxvf amrnb-11.0.0.0.tar.bz2
    2 X9 J3 T' M' {4 E0 s/ D1 O) i
  3. cd amrnb-11.0.0.0" @" I  d! _& }; c
  4. ./configure --enable-shared# T1 B5 E, e" v' v3 M( G
  5. make 8 l$ y" v8 k4 o; x8 t* k
  6. make install
复制代码
执行./configure可能遇到的错误:
( R9 K1 k) x0 A$ `7 P6 ]) B
  1. configure: error: You need patch utility to prepare sources.
复制代码
解决方法:
1 }7 d3 N) Q  u# F
  1. yum install patch
复制代码
10.amr-wb
' t; T* a! |/ c* [% C  Y- {
  1.     wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2: @* V" f  T4 g$ ]6 b- Y
  2.     tar -jxvf amrwb-11.0.0.0.tar.bz2
    $ x1 i, L2 Z8 e0 p
  3.     cd amrwb-11.0.0.0
    4 X5 X' }! \' P! X
  4.     ./configure --enable-shared
    1 q6 @1 W  K3 ?& X/ V# b
  5.     make 9 M( T7 l  d& R7 J' b$ ~& D
  6.     make install
复制代码
11.yasm
8 u2 j; a8 _8 N5 ^- N$ M8 x* Z  Uffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。# [! W3 s' A" A6 |# [
  1. yum -y install yasm
复制代码
12.ffmpeg; A- H3 r7 |; `( w+ e$ }
  1. wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz20 h0 ~) y. S9 t" W: K8 \% K
  2. tar -jxvf ffmpeg-4.1.3.tar.bz2
    5 X: K9 [8 `! F4 R
  3. cd ffmpeg-4.1.3
    3 _1 ~; \9 h- E+ Y  x; E: @) v0 B
  4. #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.% x5 ^" a. w9 Z, s% t/ \# J
  5. #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。
    1 l5 T7 G4 E- z# ~$ z8 @3 q
  6. ./configure --enable-shared --enable-gpl --enable-libx264+ h% O2 z8 S0 P9 R- L. w
  7. #编译,需要较长时间,10分钟左右。
    # a0 R& n$ c4 u" ^8 y& V
  8. make) N3 X2 g, H# q
  9. #安装
    ; L7 x  D7 x; }, S
  10. make install
    , g3 [+ g5 \- v' P6 @; @; I* I
  11. #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下& n. G( `# Z' H. ?
  12. echo "/usr/local/lib" >> /etc/ld.so.conf/ I# u4 v2 |% G+ L3 M/ x7 m
  13. echo "/usr/local/x264/lib" >> /etc/ld.so.conf
    0 g8 s* k0 J6 l" M0 F
  14. #再执行ldconfig,更新ld.so.cache,使修改生效。8 y+ O* W, w, a  P3 P' Q% W( ]
  15. ldconfig
    2 S+ ~: T. B2 w. L  i
  16. #添加环境变量; V, r, |$ i% T- K; K
  17. export PATH=$PATH:/usr/local/lib
    - y$ ^( i* \9 \
  18. #最后执行ffmpeg -version查看版本。
复制代码
如果执行还会报错则查看下ffmpeg的依赖是否完整:! a" Y" a7 ~0 f% i; }  k/ t
  1. ldd /usr/local/bin/ffmpeg
复制代码
a217db0d5cbbb0a2755deecd73dd3080.jpg 0 ^$ P: k5 {* \; \1 d& z3 M: w" e
如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
3 h( S; a- t" v9 ]
  1. #切到编译的目录下% D( g9 G  F* s: G, E. F: t% m! ]- k
  2. cd ffmpeg-4.1.3) d' F0 d: ^% y9 I
  3. make uninstall
复制代码
13.测试
5 I) f5 [) |, Y" I% K! ?6 h' {
  1.     [root@localhost ~]# ffmpeg -i /root/Videos/111.avi  /root/Videos/1ew2q.mp4: M5 w3 y* @# N& U8 |, k
  2.     ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
    . L# a/ f* A$ D7 M
  3.       built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)
    7 N: ]& R3 @" r2 V7 _
  4.       configuration: --enable-shared1 U3 Q3 g2 p* p7 T- E7 X8 A; [
  5.       libavutil      56. 22.100 / 56. 22.1005 _( ], E6 {% F7 H1 c7 P- o
  6.       libavcodec     58. 35.100 / 58. 35.100
    6 r# L1 P- t9 S0 U' r
  7.       libavformat    58. 20.100 / 58. 20.100
    . c# }( O" |2 t
  8.       libavdevice    58.  5.100 / 58.  5.100
    7 b4 I" Y+ G. D1 Z9 F8 M6 P; X9 V
  9.       libavfilter     7. 40.101 /  7. 40.101! z' s% H, V9 \% W# U
  10.       libswscale      5.  3.100 /  5.  3.1009 ]( D0 v9 M: D" }+ V! G
  11.       libswresample   3.  3.100 /  3.  3.100
    # l% @6 g! M' z# I+ V3 s/ n* |
  12.     Input #0, avi, from '/root/Videos/111.avi':( i' {+ R3 D- Y; J3 h% Z) Z
  13.       Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s
    8 d5 z, v% J7 z# K- _& {9 t
  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+ w4 I8 X1 A# A# x: p
  15.         Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s* A4 D6 C' ]3 J1 A4 C
  16.     Stream mapping:
      x/ \& J9 Z- N, t6 q7 Z. P* k4 l
  17.       Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
    - F$ i0 B. I5 P3 q) v) F
  18.       Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))6 k8 S. ]$ u* C. u0 M+ e' \
  19.     Press [q] to stop, [?] for help2 S! f! K; s% d" f' L8 Y7 T
  20.     Output #0, mp4, to '/root/Videos/1ew2q.mp4':
    + {9 [- t2 q( u  N
  21.       Metadata:. z# N7 o: X: W
  22.         encoder         : Lavf58.20.100
    ; N4 E" Q! L  b  i
  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: O& u) Y4 T2 p( Y1 o/ \! h
  24.         Metadata:4 G, M  ?! I3 ~9 r8 z
  25.           encoder         : Lavc58.35.100 mpeg4
    ' s* x) h# ]0 F( \! K
  26.         Side data:, O& _3 K) X3 ^! \! g# {* |
  27.           cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -18 u$ s3 Z, |9 s- b
  28.         Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
    6 v! L; d% I7 b- ~/ w* Q; p; L
  29.         Metadata:! |% _+ Q5 z$ ?: u! L: V
  30.           encoder         : Lavc58.35.100 aac* }3 M" e+ G, [
  31.     frame=  351 fps=0.0 q=12.3 Lsize=     870kB time=00:00:17.50 bitrate= 407.2kbits/s speed=  20x   
    9 _/ E$ R0 G4 B2 f8 S$ o( t" g
  32.     video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%
    % |8 q6 y' K- f& Z
  33.     [aac @ 0xc51f40] Qavg: 1530.201
复制代码
x264编译的指令如下:" h  i' v3 i6 S& g; W% A' w
  1. ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码
* Z- T6 I/ s4 i0 C6 m! P# D$ S

- o. @! ]; `1 Q$ Q+ e1 T1 Y6 G
. u) `+ h8 z; W8 W( ^8 t" A( D9 K/ s: [6 G: a
! D+ R: f7 t! \. Z! I. y$ [6 |8 t
% F8 l. N1 p) v: A5 A9 X

; m& C! U$ ~) D# y. b8 j& ?) X" Z
3 @1 ], t3 l- d/ f. D
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-5-6 12:17 PM , Processed in 0.121346 second(s), 25 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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