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

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

[复制链接]

985

主题

92

回帖

5万

积分

管理员

积分
53561
发表于 2022-9-14 09:24:18 | 显示全部楼层 |阅读模式
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本& Q0 X# [, B  g" H+ U$ x7 w7 c
装ffmpeg之前需要安装各种解码器。
$ `9 a/ a( M9 z4 H1 y4 s4 @9 |没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。
- T! `) @, ^1 D8 N1.lame
  1. wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz* F' {  \, k) O" ^6 x
  2. tar -zxvf lame-3.99.5.tar.gz, E1 r3 Y' m# `
  3. cd lame-3.99.5
    ) _& C2 y, z. U; K
  4. ./configure --enable-shared
    , x: \1 N( U1 F: z+ ?; i( g* t
  5. make % c, h/ ~2 Y, A9 l4 F) }4 |5 K
  6. make install
复制代码
执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH: r& W+ M# k6 Z2 z# h# [2 c
则需要我们先安装GCC。, [; s, }* H# X
  1. yum install gcc
复制代码
安装完成后再执行一遍。9 x$ q& F* L# i/ [  }2 `
2.libogg
  1. wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
    9 V, Y" Q/ u. x5 e4 M. c  j3 k9 _* b
  2. tar -zxvf libogg-1.3.2.tar.gz
    ' J. h$ m7 o7 ?8 g& A4 ~
  3. cd libogg-1.3.2
    9 Y% L' ?/ Y/ k  T9 A
  4. ./configure --enable-shared: i. g1 u; R$ S% l$ f% m' W
  5. make 5 I9 Q$ v  {" J3 s
  6. make install
复制代码
3.libvorbis
  1. #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装
    : F  ?. T0 C; _
  2. wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz. O- i6 `$ I4 Q
  3. tar -zxvf libvorbis-1.3.5.tar.gz( @/ }: q( O: R% n9 c2 v3 c* h
  4. cd  libvorbis-1.3.5
      R: D) h* g  A  n1 O9 [
  5. ./configure --enable-shared/ r3 B8 Y4 q6 Y- r8 r! h
  6. make 0 S4 j5 g' G9 N0 F, n/ [5 ?
  7. make install
复制代码

7 ?5 f! j/ [8 M" g执行“./configure --enable-shared”如果报以下错误:
" v, I  w1 N& T- a7 f) \& Qmust have Ogg installed!
- G7 m; ]& V6 ~- O' D& N5 i我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。# v* X1 @  X& W! T8 S
解决方案:
: ^+ j5 [! V. _+ W& r. j; p
  1. [root@localhost ~]#vi /etc/ld.so.conf+ X1 ^2 `: a4 J: q
  2. include /etc/ld.so.conf.d/*.conf  & }/ f& X; K$ E( C
  3. /usr/local/lib2 H/ }) `# T3 {! G, P6 j6 u
  4. [root@localhost ~]#ldconfig –v
复制代码
4.xvidcore
  1. wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz4 E3 G0 J+ T7 T; Z, K
  2. tar -zxvf xvidcore-1.3.2.tar.gz
    4 X$ e# _. m% u9 m' b
  3. cd xvidcore/build/generic; v1 Y( ~% j5 o& N2 E- D/ i
  4. ./configure --enable-shared
    & S! ?7 e, {' p* B7 M1 G1 ~
  5. make
    9 e2 {( p+ Y1 V
  6. make install
复制代码
5.x2640 G1 x, _2 z7 Z  b4 j* w
b0afa659d6bbbc43d1e805c323c28ae2.jpg 3 u" K- b. Q' t; C1 m7 j  A9 `

8 a/ I- w9 w! C, k  G. z: e) A" alibx264需要nasm的支持,nasm是一个编译器的角色。
; Q8 ^) v( T# B安装nasm:
1 i3 _, ?' q) F1 B3 [
  1. wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
    & D; Z2 O% m* ?1 q2 [" B+ Y: s& G
  2. tar -xvJf nasm-2.13.03.tar.xz
    0 H- }$ `) j( B& l
  3. cd nasm-2.13.037 ]; c5 x# U6 M( [% o# z0 P: i
  4. sed -e '/seg_init/d' \
    . B/ @7 q+ ~: _2 \8 Y# i
  5. -e 's/pure_func seg_alloc/seg_alloc/' \
    0 d- K. t2 j; e$ g2 F' X
  6. -i include/nasmlib.h; l. T! }7 k, ]( H
  7. ./configure --prefix=/usr &&& l4 _5 S8 y5 U: `
  8. make$ U- a% j2 h. x& s' J8 W1 U
  9. make install
复制代码
58d7b18423362b6c9f7c732170a0d7df.jpg % \- s9 J& f. S( C! I( S3 R! H
安装完成后再安装x264' M! ?  z( [& M8 ?4 Q
  1. wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2
    ( I1 E8 u  I; e1 K3 U
  2. tar -jxvf x264-snapshot-20190402-2245.tar.bz2$ y, J' {( \2 R  T3 n3 \. }
  3. cd x264-snapshot-20190402-2245# U1 y; c6 h1 M. }
  4. ./configure --enable-shared
    ; _$ i& T3 L5 l4 i  k$ `' J
  5. make ! P2 k5 Q+ X1 F1 s, S+ w; v
  6. make install
复制代码
6.libdts: V* b1 F7 m! E+ \# }
  1. wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2+ H% k4 g0 {/ K4 H0 h
  2. tar -jxvf libdca-0.0.5.tar.bz28 {2 M3 _) P+ w) `3 X
  3. cd libdca-0.0.5
    ( y1 ^# v# d& U# ]
  4. ./configure --enable-shared0 g3 f8 y$ m; E) M$ {  b$ U8 q
  5. make ! H) c- S6 k0 J/ P
  6. make install
复制代码
7.faad2" H" g7 W1 h' C- \) a
  1. wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
    ( ^1 y' B. W4 h
  2. tar -zxvf faad2-2.7.tar.gz
    6 Q' S- Z( m+ s3 w- q" w8 x. _
  3. cd faad2-2.7
    9 b6 c" s" g# s! f* C! ]7 M8 u
  4. ./configure --enable-shared
    3 Z  B$ z' _& Q" }2 O1 }
  5. make
    & O( |: y0 X- r) d) j4 e" F/ P
  6. make install
复制代码
8.faac
3 A. I* n/ V9 s$ Y
  1. wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz7 R/ M/ Q" G" F9 V8 P. B8 K
  2. tar zxvf faac-1.28.tar.gz
    9 x2 X1 E9 b6 a/ i* p& A, O! D
  3. cd faac-1.28; I' M1 B% {/ Q) J+ f6 J
  4. ./bootstrap9 \) \, M) a$ Z5 A: |  S3 R6 O
  5. ./configure --prefix=/usr/local/ --enable-shared
    ' T. e! x, A' @
  6. make && make install
复制代码
执行./bootstrap报错:$ j$ O. c. X) Y, X, t
  1. [root@localhost faac-1.28]# ./bootstrap% _4 {  a$ K1 j$ O7 b2 t
  2. ./bootstrap:行3: aclocal: 未找到命令
    / K) K2 s( _+ @$ r$ H9 C' t2 O1 [
  3. ./bootstrap:行4: autoheader: 未找到命令% Y1 d. N1 U) N0 i7 k8 q+ N2 L
  4. ./bootstrap:行8: libtoolize: 未找到命令
    4 r& D4 c2 V  `( `$ y# b2 L: e( S
  5. ./bootstrap:行10: automake: 未找到命令
    . l& w1 F- }% q9 k8 Q- M( T
  6. ./bootstrap:行11: autoconf: 未找到命令
复制代码
解决方法:
" M! `/ j3 _6 T, j7 i1 C2 M
  1. yum -y install automake0 n* h3 m/ g. U- ?2 i
  2. yum -y install libtool
复制代码
执行make && make install报错:2 w; Y+ L  M6 r
  1. make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”9 C+ t: V6 O+ h* b- k. F: _. {. z* \
  2. source='3gp.cpp' object='3gp.o' libtool=no \3 V- s& z9 W  _
  3. DEPDIR=.deps depmode=none /bin/sh ../../depcomp \6 v. V5 K/ I. `$ ?+ O1 q
  4. g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include   -Wall  -c -o 3gp.o 3gp.cpp
    # H' }5 K2 e! i; H7 D
  5. ../../depcomp: 第 512 行:exec: g++: 未找到
    4 ]3 U9 {9 Q- ]9 t# o' k/ Y
  6. make[3]: *** [3gp.o] 错误 127
    ; Q$ n5 T$ H! V' Z
  7. make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”" j# U1 J; z9 _  Z0 v
  8. make[2]: *** [all-recursive] 错误 1  ^; l# [9 x4 F& K+ {) c) z
  9. make[2]: 离开目录“/root/Downloads/faac-1.28/common”
    7 M. L" ~; ^. R% W) B2 n( `
  10. make[1]: *** [all-recursive] 错误 1
    ) k6 g9 A% ~/ D/ u9 J9 Q# g
  11. make[1]: 离开目录“/root/Downloads/faac-1.28”! W5 Q  `; d7 @: S) J& U4 O' e
  12. make: *** [all] 错误 2
复制代码
解决方法
1 c3 u9 \; }- m# E: A& I
  1. yum install -y gcc-c++
复制代码
执行make && make install时报错:2 @! }* [5 F; ~( ~) l5 f
  1. [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码
解决方法:, G( v( D. |- H6 q% i- }, T/ s
  1. 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
    ; S. J2 |& I8 x2 l; w
  2. 解决方法:
    , N0 {/ `7 ?) d0 }
  3. 从123行开始修改此文件mpeg4ip.h,到129行结束。* w2 b+ `& {/ B8 a' w
  4. 修改前:  p7 Q, c8 J/ g9 ^
  5. #ifdef __cplusplus/ ^, B' d$ _- W  E; u
  6. extern "C" {! A2 Y6 f  T8 I0 `
  7. #endif1 a' K( [  Z/ D* E$ `
  8. char *strcasestr(const char *haystack, const char *needle);- e, t: P% k4 t, \2 R2 O+ ?; {' G
  9. #ifdef __cplusplus; R5 M) C% F* ~! p4 o, S) X
  10. }8 |4 b4 ?) M- y2 ]
  11. #endif
    * `/ F: ^# N# X9 ~2 }

  12. * M7 f5 n6 @  ]8 v" b& @
  13. 修改后:
    ; b8 s" c: Q* H
  14. #ifdef __cplusplus
    2 \3 ~3 F" M5 s* g4 Z% R9 W; G
  15. extern "C++" {7 n8 f) R1 k7 k7 a& X
  16. #endif* U/ D& D; `9 @+ X7 p1 X% c! ]+ u
  17. const char *strcasestr(const char *haystack, const char *needle);7 z0 f$ o* p; T2 u5 I$ B
  18. #ifdef __cplusplus# M( _- p: D$ Z1 y, Q/ h# Q$ _
  19. }1 p: F5 S+ r0 N5 \2 }4 i5 L  {. S- d
  20. #endif
复制代码
9.amr-nb
! k1 ~0 x1 O3 N( o
  1. wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2' A5 q7 }+ I/ h. `5 O5 M" H+ H
  2. tar -jxvf amrnb-11.0.0.0.tar.bz2
    ; `. }! O8 c- i* N; H- z
  3. cd amrnb-11.0.0.06 m! ^+ ?$ w4 \4 b& ]6 @: j
  4. ./configure --enable-shared
    + P7 R6 Q: j. [8 }4 w+ O' q. e, _0 o
  5. make
    0 e6 B1 |# X4 ]. L
  6. make install
复制代码
执行./configure可能遇到的错误:) O+ G& {! r8 W3 m- u8 X
  1. configure: error: You need patch utility to prepare sources.
复制代码
解决方法:
, v  {3 m. t" `% t4 H7 K/ ?
  1. yum install patch
复制代码
10.amr-wb$ w6 H/ ^9 `' u
  1.     wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2
    9 p9 l- z2 R" X+ ~! d
  2.     tar -jxvf amrwb-11.0.0.0.tar.bz24 I/ f7 }) G$ n1 y  n( b) }) {
  3.     cd amrwb-11.0.0.07 M! y0 M$ W/ j2 G1 Q  c
  4.     ./configure --enable-shared
    & V5 K; Y' J7 \, _" E
  5.     make 2 p$ s% H/ A* E- i7 v7 P
  6.     make install
复制代码
11.yasm
" X) r$ d& q! f; J5 ?ffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。% D: x& r( n! G
  1. yum -y install yasm
复制代码
12.ffmpeg
" }  M$ g8 O. b8 V6 P! y( m; x
  1. wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2
    ; g$ k1 }4 ]. w4 E+ [
  2. tar -jxvf ffmpeg-4.1.3.tar.bz2
    4 q/ q. s! _- ?: S3 U% [1 B
  3. cd ffmpeg-4.1.3
    ' h1 W2 L: X- r( Q5 m7 j. H% M
  4. #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.3 [2 }4 @9 A* ]- ]& q; q. p
  5. #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。
    & ?% j: V5 T0 {2 `$ O
  6. ./configure --enable-shared --enable-gpl --enable-libx2641 S5 w0 X  V. W0 q" m
  7. #编译,需要较长时间,10分钟左右。* i5 i& V7 X% u5 N; O/ S, d
  8. make
    2 T* J" M$ m* t/ {0 |1 e  y7 g7 I
  9. #安装
    ) o' p- \, Q* \7 W% J
  10. make install
    2 ]8 {# o, t0 n& d$ D
  11. #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下
    , ^# k" r; v0 O+ h" I& L
  12. echo "/usr/local/lib" >> /etc/ld.so.conf( [3 T0 p- `( V1 m) E& d! ^; y. i
  13. echo "/usr/local/x264/lib" >> /etc/ld.so.conf% Y! i! X  P# x$ @. S' J- B/ p
  14. #再执行ldconfig,更新ld.so.cache,使修改生效。- E/ Q; K) n" b" @
  15. ldconfig* M1 B5 D1 u3 c8 s: x" Y
  16. #添加环境变量
    1 t; N0 u2 X. ]# S
  17. export PATH=$PATH:/usr/local/lib
    / ]+ ^$ C$ C/ `8 Z7 U
  18. #最后执行ffmpeg -version查看版本。
复制代码
如果执行还会报错则查看下ffmpeg的依赖是否完整:# N; D8 k" v3 Y0 D' O
  1. ldd /usr/local/bin/ffmpeg
复制代码
a217db0d5cbbb0a2755deecd73dd3080.jpg
  V; ^. j9 [7 N, f$ Q  w如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:& ]1 C3 q4 a2 ^" f: \1 J, L
  1. #切到编译的目录下" v0 T. d2 [: v5 q
  2. cd ffmpeg-4.1.3
      d9 k+ ^1 A1 x- ]$ w# v3 J
  3. make uninstall
复制代码
13.测试6 V/ _6 Y" Y5 w/ F4 d; O6 `( U
  1.     [root@localhost ~]# ffmpeg -i /root/Videos/111.avi  /root/Videos/1ew2q.mp4
    4 W4 |! ^$ B0 p1 x# ]
  2.     ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
    - g! C  a( u4 \/ M1 M* q
  3.       built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)- z1 c! W2 K4 t' F; @* }
  4.       configuration: --enable-shared
    + j  ]' b2 }* M
  5.       libavutil      56. 22.100 / 56. 22.1007 o7 O6 S8 \6 u; d5 q8 I0 r
  6.       libavcodec     58. 35.100 / 58. 35.100/ d. S& n/ l2 S, G5 x
  7.       libavformat    58. 20.100 / 58. 20.100
    : I3 T/ C. j1 b4 R% G$ X7 u
  8.       libavdevice    58.  5.100 / 58.  5.100
    $ \: [  `, y; g: t1 a& G9 V1 V
  9.       libavfilter     7. 40.101 /  7. 40.101
    . E8 }, D2 _% ?3 A  S. A2 C
  10.       libswscale      5.  3.100 /  5.  3.1000 W* J8 @& z, V# K
  11.       libswresample   3.  3.100 /  3.  3.100
    : C9 W3 o+ j: X5 s
  12.     Input #0, avi, from '/root/Videos/111.avi':
    : `1 y, w$ d* o* L7 H: Q
  13.       Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s- m. \  N& _1 Z* Q& ]
  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$ r+ z% @: P7 s$ Y0 E: `7 u
  15.         Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s1 y1 q. C$ Q# O6 t1 ?; {  |
  16.     Stream mapping:0 `2 p: g, x! {' O8 u- C7 D( H
  17.       Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))! `1 h* q0 t: J8 J, T3 G
  18.       Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))/ b* P2 b$ G+ X/ h
  19.     Press [q] to stop, [?] for help. }) L3 D! `3 x6 c
  20.     Output #0, mp4, to '/root/Videos/1ew2q.mp4':1 I6 ]' X% Q0 s1 ~7 Z  M# f$ j
  21.       Metadata:- O& X4 x  s# f9 F
  22.         encoder         : Lavf58.20.1009 }- _( F  k- l. |6 Y5 K: t
  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
    9 @# v2 {# ~3 u$ Y. Q1 x; Y
  24.         Metadata:1 r& M7 ]! {, F. Y; P* E  V7 c
  25.           encoder         : Lavc58.35.100 mpeg4
    . Z0 ?- e0 c) V3 z, p8 L
  26.         Side data:
    5 c+ M* }/ S2 S3 ?
  27.           cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -15 R( j& o2 _% X8 t9 X
  28.         Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s5 U  U, y* j7 T. e; t) J9 c- D
  29.         Metadata:
    4 M: W- X% {# S) y  Y# C
  30.           encoder         : Lavc58.35.100 aac3 ~3 \$ D% w4 z4 L
  31.     frame=  351 fps=0.0 q=12.3 Lsize=     870kB time=00:00:17.50 bitrate= 407.2kbits/s speed=  20x    8 Z3 h& n# o" i" D7 h5 G# ~4 z
  32.     video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%
    8 m4 q) P$ I, \2 X* k, d! ~) O
  33.     [aac @ 0xc51f40] Qavg: 1530.201
复制代码
x264编译的指令如下:- {8 D7 N7 N$ F- G8 F! J
  1. ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码
# W+ b7 `9 V( N9 {
& B) @( {! s7 Q! V
! h+ o7 \  g% T& V

( z8 G4 Y: f; ~2 ]) l( ~3 i2 i! [
  ^, u9 m' R( ?3 S  `9 d$ M0 m+ w! e& I- c& c. @

+ b' x3 P' x; c! ?) l
6 B* v9 q$ B0 _4 x% s5 V' ?: x( f
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2025-11-5 01:56 AM , Processed in 0.081142 second(s), 25 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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