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

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

[复制链接]

979

主题

90

回帖

5万

积分

管理员

积分
53057
发表于 2022-9-14 09:24:18 | 显示全部楼层 |阅读模式
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本
8 h7 d# x2 K  ?+ ~5 Q装ffmpeg之前需要安装各种解码器。5 ]; g2 G/ r. H. [# H) {% O
没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。
6 d; ]" n0 Y! p% x; r% p1.lame
  1. wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz7 K8 p3 P; [  R' Y, F  w
  2. tar -zxvf lame-3.99.5.tar.gz9 N! D" Z4 {" V8 @
  3. cd lame-3.99.5 + f7 x* E# @* \6 o6 Z
  4. ./configure --enable-shared0 }6 D' t  G  z
  5. make . y# x, z( a6 {: S0 b
  6. make install
复制代码
执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH/ H& m) t' S* a2 Z5 ?! [& b6 M  M
则需要我们先安装GCC。$ D: r" `. G' Z) x. |
  1. yum install gcc
复制代码
安装完成后再执行一遍。2 s( N8 N% k! Y( j5 L
2.libogg
  1. wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
    # @: X& S; B* A/ t
  2. tar -zxvf libogg-1.3.2.tar.gz
    ) I0 d, k( F' S
  3. cd libogg-1.3.2
    9 t5 ^$ R1 W: r7 R* o& K+ t
  4. ./configure --enable-shared/ N3 {0 M8 j! z
  5. make 9 @% N0 w5 K1 u5 I5 s
  6. make install
复制代码
3.libvorbis
  1. #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装
    " J+ r1 ^5 s3 r+ o& u& x& E0 y' O
  2. wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
    ! _; @/ K; h! g& V( P
  3. tar -zxvf libvorbis-1.3.5.tar.gz
    8 ~# S* m9 m/ R& ?
  4. cd  libvorbis-1.3.5  i3 \" ~, Y& k% l( M
  5. ./configure --enable-shared
    ; w& S  s% g# C! z4 W' e$ P
  6. make
    % [0 T& o5 v) P
  7. make install
复制代码

$ r1 p8 e/ |7 j3 X执行“./configure --enable-shared”如果报以下错误:+ @. d8 s9 _2 y2 a
must have Ogg installed!
& Z" F, K3 q! K  q: i* P- d我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。
4 W) ]( D4 ^, K解决方案:
3 k1 Z: B2 o' d
  1. [root@localhost ~]#vi /etc/ld.so.conf
    2 w% o# F8 W4 O
  2. include /etc/ld.so.conf.d/*.conf  
    5 ~% a- Z: V8 w4 T* z) G8 I
  3. /usr/local/lib
    : d, l. V. r+ |) Y  W  c
  4. [root@localhost ~]#ldconfig –v
复制代码
4.xvidcore
  1. wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz% P: C1 T4 p; Q4 \+ h" R! j0 R- {
  2. tar -zxvf xvidcore-1.3.2.tar.gz * ]7 K- A: q4 b  i; R4 V2 D4 [# s
  3. cd xvidcore/build/generic$ `! p& l+ V, |' c! ], n. l
  4. ./configure --enable-shared
    0 b; T' T$ Y; {
  5. make 2 c( w: ^5 G& t5 b
  6. make install
复制代码
5.x264
7 S: }" w2 p- x9 K' K b0afa659d6bbbc43d1e805c323c28ae2.jpg ' }, r  ]# G6 J* p5 ]! R" w
1 @2 x7 f4 [; J7 o. p
libx264需要nasm的支持,nasm是一个编译器的角色。5 |  t/ r( X( W( H$ s0 c
安装nasm:
- _5 p/ \. a3 B! V
  1. wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
    * d" D2 L0 D- V
  2. tar -xvJf nasm-2.13.03.tar.xz
    8 C% U. }5 ~! Z
  3. cd nasm-2.13.03
    " u* K0 D9 U& U0 F1 s2 K( a
  4. sed -e '/seg_init/d' \6 Y/ W; \; j% A$ e+ J
  5. -e 's/pure_func seg_alloc/seg_alloc/' \
    ) `0 Y& E( Z7 D& v4 V$ A' y7 u, u3 t
  6. -i include/nasmlib.h
    7 N; `$ }) k  E
  7. ./configure --prefix=/usr &&
    : L) n" K8 z) {
  8. make1 U0 Y, `, S2 p
  9. make install
复制代码
58d7b18423362b6c9f7c732170a0d7df.jpg
% _5 O4 d: P5 s5 f& u- c: Y# i安装完成后再安装x264
  y' J" D3 f7 v( s" ^
  1. wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz24 F5 Q) F5 ?' n. P1 K5 L  Z% t3 G
  2. tar -jxvf x264-snapshot-20190402-2245.tar.bz2
    $ W) F$ ?$ {) o& Z9 H9 u" r- y
  3. cd x264-snapshot-20190402-22452 Q% m( }' y  q2 C( \/ A
  4. ./configure --enable-shared  l4 [6 o% B. P3 N3 G
  5. make
    8 X3 x5 s  E1 x! Z% u# g- b% V
  6. make install
复制代码
6.libdts
  e* ?: C3 ]3 n9 B! J) P
  1. wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
    4 V! ^+ G9 E# K" h2 T
  2. tar -jxvf libdca-0.0.5.tar.bz2
    , `$ @$ J( a$ m
  3. cd libdca-0.0.5# T- R  {: K+ W8 {) s
  4. ./configure --enable-shared0 I! j( _' g' X& E3 e% V
  5. make / M: `! z3 C, u5 Y# {( k7 i
  6. make install
复制代码
7.faad2( t2 E" Z; A( A% Z. e& c) D. z, j
  1. wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
    1 d' n" x- l) Q  ]9 M, t# h1 c  m3 J
  2. tar -zxvf faad2-2.7.tar.gz
    # S( v: k4 y  q& }3 b7 {
  3. cd faad2-2.7
    1 J' C1 I$ ~' x9 k9 \' u; h, W9 a
  4. ./configure --enable-shared
      m% \$ g. y6 u" F
  5. make $ K' t6 U3 s' c  V+ D: y
  6. make install
复制代码
8.faac9 }& b" N& D% a/ k% T9 m
  1. wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
    ( o0 t3 B8 l5 s) s1 D
  2. tar zxvf faac-1.28.tar.gz
    7 m7 S) O7 b& g7 X  J
  3. cd faac-1.28
    0 ?9 S3 L* l  |5 B
  4. ./bootstrap/ c- G7 @+ h1 P/ i4 [1 Z
  5. ./configure --prefix=/usr/local/ --enable-shared
    3 e* P# Q3 @! K- I9 T
  6. make && make install
复制代码
执行./bootstrap报错:: _' n, }% o: d! E5 R
  1. [root@localhost faac-1.28]# ./bootstrap! m" m4 @- ]# D+ ]. d' n6 R
  2. ./bootstrap:行3: aclocal: 未找到命令
    ! r6 X/ Y. S2 N* _: k2 ]
  3. ./bootstrap:行4: autoheader: 未找到命令
    1 i/ _2 O6 A6 j
  4. ./bootstrap:行8: libtoolize: 未找到命令
    # X( \& _! I% c' P# x
  5. ./bootstrap:行10: automake: 未找到命令
    . b" M2 I! J  m
  6. ./bootstrap:行11: autoconf: 未找到命令
复制代码
解决方法:
2 v: Q( v% V# n# p, ~2 u' T' Y
  1. yum -y install automake8 r1 E2 {+ z* H/ ?' Y' d
  2. yum -y install libtool
复制代码
执行make && make install报错:$ |- ^7 @/ Q+ c
  1. make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”2 L' C% q) i8 |8 Q
  2. source='3gp.cpp' object='3gp.o' libtool=no \
      S) u; S+ {* g
  3. DEPDIR=.deps depmode=none /bin/sh ../../depcomp \# S$ y, [6 S! N, v( P2 I
  4. g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include   -Wall  -c -o 3gp.o 3gp.cpp
    9 v" E4 B( J9 w6 R: ?: O- n
  5. ../../depcomp: 第 512 行:exec: g++: 未找到$ T' T7 Q, I( o0 A# n
  6. make[3]: *** [3gp.o] 错误 127
    8 s1 a8 q8 T; ]( H
  7. make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”
    ! X0 A! m9 i6 u) k1 j
  8. make[2]: *** [all-recursive] 错误 19 i8 D$ Y2 c0 c+ o1 a9 l2 s
  9. make[2]: 离开目录“/root/Downloads/faac-1.28/common”
    # X' L3 q& N! o! f, a* n
  10. make[1]: *** [all-recursive] 错误 1
    & Q- U* G# a, Q3 x  N8 k% G
  11. make[1]: 离开目录“/root/Downloads/faac-1.28”! C1 R/ P" L$ q; P! o  G  p- U
  12. make: *** [all] 错误 2
复制代码
解决方法
# x# n. \7 L% @; P2 z5 Y
  1. yum install -y gcc-c++
复制代码
执行make && make install时报错:! _: h4 k* `2 V% r; `6 l7 t
  1. [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码
解决方法:- e# j) ~2 ~( z( G" x$ F
  1. 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
    3 Q/ O2 l3 R% R' a1 p
  2. 解决方法:
    2 j3 g0 {6 p! |; S
  3. 从123行开始修改此文件mpeg4ip.h,到129行结束。
    4 P& B( j5 C& F2 U. }
  4. 修改前:0 h5 {  l% r/ r8 o1 I- ~  R
  5. #ifdef __cplusplus4 W5 N& ?+ a! E1 g( F8 U% J6 b0 w! u
  6. extern "C" {* C1 A& j1 |3 @, z0 K# F  C" o! m
  7. #endif
    " Y( J; K' x, i5 |: I
  8. char *strcasestr(const char *haystack, const char *needle);
    & r  D' h( F, `# E
  9. #ifdef __cplusplus
    + b; V  K$ g. Z! \/ o* l
  10. }% f6 q" V: D+ c8 k  P  a  s" o
  11. #endif
    , ?6 I0 C( }0 _# [
  12. 7 H% s- c9 ?- M& `% m
  13. 修改后:
    0 O0 S  x. a+ i: Y6 |
  14. #ifdef __cplusplus
    ; T+ c8 j* B6 _# z# J4 U: c
  15. extern "C++" {0 o9 |: R9 _0 z; ^
  16. #endif
    & c6 S9 k1 h* y/ k. u
  17. const char *strcasestr(const char *haystack, const char *needle);. z7 k5 Q1 g/ [4 j
  18. #ifdef __cplusplus
    3 r5 F! Z" A6 u1 E# z: {) j' q
  19. }* u* w! h. n# \* h* x3 k5 i, N
  20. #endif
复制代码
9.amr-nb
2 [$ f" L1 t! B( k' \
  1. wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2
    - y$ N$ q' q6 T; w. ^: ~; k
  2. tar -jxvf amrnb-11.0.0.0.tar.bz2
    ) n- J4 `' h' @: C5 A7 d# A8 e7 s4 n
  3. cd amrnb-11.0.0.00 Z# ?4 X! n8 C& A% ]0 S3 W7 v
  4. ./configure --enable-shared
    ) D9 b( s" h0 o  d
  5. make 5 H/ }1 O+ @2 e# H0 \  u3 A7 ~& ?
  6. make install
复制代码
执行./configure可能遇到的错误:
( D- S2 }8 r9 j4 e8 R/ U2 c
  1. configure: error: You need patch utility to prepare sources.
复制代码
解决方法:
3 b7 D! I7 X/ A3 [& ~3 s
  1. yum install patch
复制代码
10.amr-wb/ y: u& ^: b9 H: e
  1.     wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2
    0 t, G/ s0 P4 V: ^! J) p/ ]: X
  2.     tar -jxvf amrwb-11.0.0.0.tar.bz2" o5 h3 u7 \! M% _3 J2 P& X
  3.     cd amrwb-11.0.0.0# n, d& z& j. Y2 W& [" c
  4.     ./configure --enable-shared
    : E9 d1 D" L% J- V
  5.     make
    . _9 \  V5 K4 F1 s# ?5 k. p. I
  6.     make install
复制代码
11.yasm/ @  O, S0 G" a3 U  Q6 t2 c, i; Z- v
ffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。
4 L/ B3 u) Z0 ~' d- c
  1. yum -y install yasm
复制代码
12.ffmpeg
2 @4 N  C9 O" m$ R
  1. wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2
    7 z9 C/ `1 m* `3 X. L) G( O, T: C
  2. tar -jxvf ffmpeg-4.1.3.tar.bz2
    * `# a3 E: _; g6 z+ t
  3. cd ffmpeg-4.1.3, o* ~8 X+ _- C0 h- f
  4. #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.
    - {% F& x5 k; v: t3 C5 v2 M+ D
  5. #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。
    : V% Z/ r2 G2 u8 b! M7 N4 }
  6. ./configure --enable-shared --enable-gpl --enable-libx264+ K7 E, ^% n9 \8 O
  7. #编译,需要较长时间,10分钟左右。" l- r$ o4 I% m" Y
  8. make" _4 r" i; h0 a7 i8 |* I2 C, @
  9. #安装
    ) A) q; j- z7 l6 S, n5 t
  10. make install1 F8 T* K) T8 p$ c9 o5 l2 K
  11. #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下5 v& |" j& @7 h
  12. echo "/usr/local/lib" >> /etc/ld.so.conf+ M% k5 W; u1 E
  13. echo "/usr/local/x264/lib" >> /etc/ld.so.conf9 y% g; b* L* L6 }4 ?- ]3 J
  14. #再执行ldconfig,更新ld.so.cache,使修改生效。
    1 g! g5 u+ l3 G9 ^+ o
  15. ldconfig7 d- J( u1 w: E
  16. #添加环境变量
    9 s. A" z+ r& }' k8 H
  17. export PATH=$PATH:/usr/local/lib$ N. p: a. Q" `$ o. A; n
  18. #最后执行ffmpeg -version查看版本。
复制代码
如果执行还会报错则查看下ffmpeg的依赖是否完整:
1 ~( A; u! O6 e- {) t
  1. ldd /usr/local/bin/ffmpeg
复制代码
a217db0d5cbbb0a2755deecd73dd3080.jpg " g3 ]) F& u  L$ l: i% M$ W6 K* b5 Q
如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
# e8 ?' F  {$ ^" p" J/ {1 y8 k4 o0 ]
  1. #切到编译的目录下  Y! T% Y; o$ @* |- v# u& q) O
  2. cd ffmpeg-4.1.3
    - M4 C6 q% o' }+ K7 C. `& i) a
  3. make uninstall
复制代码
13.测试
) r( ~# H1 T$ v' ?, ?( w; k  G
  1.     [root@localhost ~]# ffmpeg -i /root/Videos/111.avi  /root/Videos/1ew2q.mp44 e3 I* n( J0 ^: K& K) M( l
  2.     ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
    & {: V! c0 Q0 p! |& C8 i' {0 C
  3.       built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)& ~, f3 |& H& [$ E2 ~/ Q7 N" A7 c
  4.       configuration: --enable-shared: z* Z3 k) Z* e6 W- \# h
  5.       libavutil      56. 22.100 / 56. 22.100
    $ d- U! }) M$ J+ V
  6.       libavcodec     58. 35.100 / 58. 35.100
      Y' v& B8 U3 _+ u5 I3 p, N+ ^) Q6 ~, A2 y0 H
  7.       libavformat    58. 20.100 / 58. 20.100
    ; K1 K  h9 Q& A7 H$ e
  8.       libavdevice    58.  5.100 / 58.  5.100+ r' c2 w- d8 d+ d+ g
  9.       libavfilter     7. 40.101 /  7. 40.101
      E7 i3 U* [5 G( F
  10.       libswscale      5.  3.100 /  5.  3.100
    6 d" c2 A5 @: S, _0 i
  11.       libswresample   3.  3.100 /  3.  3.100# V! ^# w  Y2 I; z  ^0 V
  12.     Input #0, avi, from '/root/Videos/111.avi':
    8 x+ h% y% q% l
  13.       Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s
    . \) ?3 N$ o5 C% p$ \8 s
  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
    ; i- H& c4 t) c
  15.         Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
    - W9 d5 Z1 R3 S+ K. i& j
  16.     Stream mapping:* u8 E' [& k+ r) v1 U
  17.       Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
    ! c; U8 k" L% @; y  [
  18.       Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))# Y. x  b8 U  O4 s$ p5 |5 J* _
  19.     Press [q] to stop, [?] for help
    & N4 Z2 O: X- X
  20.     Output #0, mp4, to '/root/Videos/1ew2q.mp4':& f- C+ s0 V' |% t  E  b
  21.       Metadata:0 O6 _; W: [3 n  A" [1 n! l- B
  22.         encoder         : Lavf58.20.100. j# X4 h2 k+ g5 C) k6 ^3 C2 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 tbc
    , m% {8 \2 e- ^: M
  24.         Metadata:$ _" S4 b, ~8 o% Z' i$ p/ O
  25.           encoder         : Lavc58.35.100 mpeg4$ D0 w5 R, U! I7 t
  26.         Side data:" K' l& c8 u  Q2 b, V
  27.           cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1. O, b5 _) f) O  p( \5 Q5 ]
  28.         Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s: _! b4 P0 R9 u; f
  29.         Metadata:# v2 ^7 c/ r; m$ ]3 z* K' K4 \9 H
  30.           encoder         : Lavc58.35.100 aac
    $ H' _! ]% i6 _9 s1 [2 z
  31.     frame=  351 fps=0.0 q=12.3 Lsize=     870kB time=00:00:17.50 bitrate= 407.2kbits/s speed=  20x   
    / Y1 X8 |2 i& ^* u
  32.     video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%* T9 C! z; |( b2 G6 }
  33.     [aac @ 0xc51f40] Qavg: 1530.201
复制代码
x264编译的指令如下:6 f$ A& V5 u& J( l4 Q. f
  1. ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码
2 i6 t) y7 d- u) S$ ^' ^, |8 M
% T7 R5 D* H0 \, F3 g7 U# l. H0 b

$ b+ x  Y) @# ~  t& {& _8 t: v. U6 Y8 z3 O9 E1 {$ h

2 {. h" N/ p9 Y
' W$ J; y1 h" F- A4 Y  B6 x6 L9 t& S+ S, O; @( v
, Y9 |7 d" e; ~  Q7 J/ b+ c. p
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2025-2-25 08:16 , Processed in 0.130034 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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