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

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

[复制链接]

986

主题

92

回帖

5万

积分

管理员

积分
55255
发表于 2022-9-14 09:24:18 | 显示全部楼层 |阅读模式
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本% G9 G4 z0 p9 o
装ffmpeg之前需要安装各种解码器。; f- l$ b+ t- D
没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。% C  A+ p4 d' ~3 R
1.lame
  1. wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz$ }- q4 p7 m% x8 A4 V& }6 H* }
  2. tar -zxvf lame-3.99.5.tar.gz2 ]( S; E* U3 w& J
  3. cd lame-3.99.5 8 {+ `! f3 _; Z! C- M
  4. ./configure --enable-shared
    1 B1 @9 U% F3 Z$ q4 @7 F2 \3 r- O
  5. make 5 P, z$ y/ ^+ y; o# N
  6. make install
复制代码
执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH
, `) u; A" _) _5 e则需要我们先安装GCC。9 R# n7 J) K8 m0 U
  1. yum install gcc
复制代码
安装完成后再执行一遍。
, h) Z3 v* e# w6 ^3 ^7 b6 E2 j2.libogg
  1. wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
    ' ^- P( ]$ q' [9 G
  2. tar -zxvf libogg-1.3.2.tar.gz
    5 ]" J2 i/ R  z. j5 [2 \2 G
  3. cd libogg-1.3.22 N- q7 U; r' ]  E' s! L, X& E& j
  4. ./configure --enable-shared
    4 C0 R) j! w0 w' S2 |
  5. make $ s0 I: u( ~0 {. h$ L% L4 ?, j
  6. make install
复制代码
3.libvorbis
  1. #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装; l# E4 a- V, v! O: G7 b" N
  2. wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz: ]1 I3 o9 f3 O/ Z( o/ G, M" w8 w
  3. tar -zxvf libvorbis-1.3.5.tar.gz; A0 Z. {/ x7 _  ?& _( p, R
  4. cd  libvorbis-1.3.5
    0 d( J0 c  K/ O
  5. ./configure --enable-shared
    $ q' m! M6 P, W  F/ E: N
  6. make   [9 C" ^. D( l- y/ ]* r4 z/ \
  7. make install
复制代码
' w  _+ Y3 T6 G
执行“./configure --enable-shared”如果报以下错误:
. A% N4 @' }! y4 q8 [must have Ogg installed!+ U3 _* m% ]1 h- ?6 L+ P; i& Q8 j
我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。& k& D$ G) Y5 e9 b
解决方案:
2 M$ P: T! P% M1 \
  1. [root@localhost ~]#vi /etc/ld.so.conf
    : `5 I% a; {: D& L6 Z9 k) P
  2. include /etc/ld.so.conf.d/*.conf  * u" M$ x- |: J9 S( o9 K/ v
  3. /usr/local/lib0 \2 d* z4 x4 h/ k% b; C# g1 d; D  A1 P
  4. [root@localhost ~]#ldconfig –v
复制代码
4.xvidcore
  1. wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
    & S. s+ V. {5 [! c1 D0 ~
  2. tar -zxvf xvidcore-1.3.2.tar.gz
    , i9 w& H" E$ [* }( D- x4 M9 ^
  3. cd xvidcore/build/generic
    # t- S+ y1 }. @8 K) H+ D8 p4 ]
  4. ./configure --enable-shared
    - f: T; x4 K2 ?6 k4 X' n
  5. make
    ' S5 i6 Y- \# w5 y; G
  6. make install
复制代码
5.x2646 S/ B$ f; N0 s7 z6 c/ `8 j) S2 ~
b0afa659d6bbbc43d1e805c323c28ae2.jpg
9 X, b' Y/ `" ~: U
8 W7 }) ?7 d" R
libx264需要nasm的支持,nasm是一个编译器的角色。% x+ w$ g+ Y' ]) c+ j* l# i' D
安装nasm:( m1 T  u( n3 R$ r# d
  1. wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
    0 v# a0 S. Q, a. ^4 R
  2. tar -xvJf nasm-2.13.03.tar.xz. e7 }5 N% G! @9 k( g4 @
  3. cd nasm-2.13.030 m2 y) ^( C: i! g( \. G. i
  4. sed -e '/seg_init/d' \
    & L! l& i5 f. p; M  o! a6 l3 `
  5. -e 's/pure_func seg_alloc/seg_alloc/' \$ M* J$ \8 Y% W& n  I5 F0 W
  6. -i include/nasmlib.h
    ' c# o$ g- k1 i0 S2 {6 B% O* W) j
  7. ./configure --prefix=/usr &&
    / y' a0 J. [6 I4 K8 ^( G5 ~( M
  8. make. p! D7 {4 Y3 m4 D
  9. make install
复制代码
58d7b18423362b6c9f7c732170a0d7df.jpg
( ~4 }# B' ^7 P5 m安装完成后再安装x264
! {7 k7 W" K, p) q1 A
  1. wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2
    ; F9 X- V& ~& G4 N- A
  2. tar -jxvf x264-snapshot-20190402-2245.tar.bz2) J. o% A: J  t2 C! s; C  E# N- P
  3. cd x264-snapshot-20190402-2245
    - b1 Q$ _! {! ~' y6 j) v
  4. ./configure --enable-shared
    9 P$ c* z1 G, O1 p+ }3 I' [
  5. make 6 |+ G+ S" f  r. R, f5 R
  6. make install
复制代码
6.libdts0 q  u2 r/ P3 V  A: M- a& {7 w
  1. wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
    6 k6 O+ F9 B1 T" q
  2. tar -jxvf libdca-0.0.5.tar.bz2
    3 b% n3 Y" Q, N$ H4 Z
  3. cd libdca-0.0.59 X9 x: W% X, }
  4. ./configure --enable-shared
    ( h) u; W' G( U6 ]* c* Y# N8 y1 t
  5. make
    & B& U! k6 s0 f% h+ J
  6. make install
复制代码
7.faad2
2 H* I* M5 U5 G
  1. wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
    ' y8 T4 P5 ]1 a# e* h9 H
  2. tar -zxvf faad2-2.7.tar.gz
    ) f6 U/ }5 X( O! t& k* `/ y
  3. cd faad2-2.7( E# J0 V5 N; ~2 T9 Q& {9 q: A
  4. ./configure --enable-shared
    * z& S; E# s7 K3 ]
  5. make
    1 m. r/ T$ A5 p$ I; c! z- E! J
  6. make install
复制代码
8.faac2 P, t6 W" b+ n! _
  1. wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
    % t4 L, b3 `4 H- k
  2. tar zxvf faac-1.28.tar.gz
    4 y/ l! m& k& j8 K; o2 N
  3. cd faac-1.28' R0 W+ Q8 g( @: i) b
  4. ./bootstrap! f' K5 w+ C" E8 Y0 D, ^! e
  5. ./configure --prefix=/usr/local/ --enable-shared
    . x, }3 e& \0 K1 j
  6. make && make install
复制代码
执行./bootstrap报错:8 c+ E( @, U/ N
  1. [root@localhost faac-1.28]# ./bootstrap( ^+ {+ g) D; U) J) B" H/ d
  2. ./bootstrap:行3: aclocal: 未找到命令  u, j( u; X/ H/ @
  3. ./bootstrap:行4: autoheader: 未找到命令
    4 c6 |2 r) r$ l
  4. ./bootstrap:行8: libtoolize: 未找到命令$ }& z3 Z" P5 c; o  ~$ n$ G8 i
  5. ./bootstrap:行10: automake: 未找到命令
    ! E% @5 j/ u0 A5 [6 J* N0 M
  6. ./bootstrap:行11: autoconf: 未找到命令
复制代码
解决方法:
6 n3 f9 K8 z* _1 t5 h! z4 ~
  1. yum -y install automake
    4 @" q) n- Y8 w) J, G7 z7 v
  2. yum -y install libtool
复制代码
执行make && make install报错:
3 k8 @( ]2 C# v3 H/ t! p
  1. make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”  ?4 l( `$ H* L' ^0 ?- v' W& F7 h
  2. source='3gp.cpp' object='3gp.o' libtool=no \% X( N2 r/ n# j( A! P5 ?5 J
  3. DEPDIR=.deps depmode=none /bin/sh ../../depcomp \/ k# {: K( V- f% _9 a1 S
  4. g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include   -Wall  -c -o 3gp.o 3gp.cpp
    $ M) \5 Q4 }' T6 Q  t, T. h
  5. ../../depcomp: 第 512 行:exec: g++: 未找到
    + \  K  ?; a8 B- D/ \* x# B
  6. make[3]: *** [3gp.o] 错误 127
    $ J& y+ K9 s# K7 Z) R
  7. make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”+ }/ {( u5 ^) J; p1 n$ d; _/ [& Y
  8. make[2]: *** [all-recursive] 错误 18 N" G. B" m# c+ H* ]
  9. make[2]: 离开目录“/root/Downloads/faac-1.28/common”
    . S% O2 o# b, w* j
  10. make[1]: *** [all-recursive] 错误 1
    . n+ B0 T& O) E. u
  11. make[1]: 离开目录“/root/Downloads/faac-1.28”
      h( A4 J1 q$ I. _# t1 Y7 B
  12. make: *** [all] 错误 2
复制代码
解决方法6 S% r  K( [" H) z; O
  1. yum install -y gcc-c++
复制代码
执行make && make install时报错:4 T/ M5 j* T) U2 c2 \# {! d
  1. [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码
解决方法:
# d' T, l4 B2 J9 x  l* W
  1. 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)6 o( \3 y" \) x8 t0 T. C7 i2 Y8 d
  2. 解决方法:- D% h/ g* [( B$ s
  3. 从123行开始修改此文件mpeg4ip.h,到129行结束。
    : x' b. C4 h2 T' E  F0 ^& Q
  4. 修改前:
    , g! G2 y# Y& b% a2 i  B7 o! D: g
  5. #ifdef __cplusplus& Z8 I9 g3 L  O& q# L: n, G6 Z- \* _
  6. extern "C" {. z# n+ T; r4 `! c3 i$ x6 |7 c
  7. #endif
    ( W+ r9 @5 I6 l1 Q# B2 }# u
  8. char *strcasestr(const char *haystack, const char *needle);
    - S2 |5 r6 ?5 f; d& R1 T! _
  9. #ifdef __cplusplus
    5 Q" b# V( o+ w8 s5 B: L$ N( T
  10. }
    : J8 ]9 G3 b7 W, Y5 F
  11. #endif3 n' M7 i( J  z% @7 ?
  12. 9 g( F7 m4 n0 ^/ l
  13. 修改后:
    $ k% r% i, g- X5 P" C, Z! T2 d
  14. #ifdef __cplusplus; M: ?, E2 j0 G0 L
  15. extern "C++" {
    % g. N* A. z4 M+ g2 s
  16. #endif
    ! a( v) P! r$ k: R) C$ r# x
  17. const char *strcasestr(const char *haystack, const char *needle);' t: u3 E1 _+ }, V+ S1 U1 S" E
  18. #ifdef __cplusplus0 L( @( w7 C! Y
  19. }
    - m4 O# z% B4 d) ^; k
  20. #endif
复制代码
9.amr-nb5 K& t: v! E1 t& V7 t4 y
  1. wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2, n" s6 e- ^( Y% D
  2. tar -jxvf amrnb-11.0.0.0.tar.bz2" Y9 ]' [7 k( L) B6 ~  X
  3. cd amrnb-11.0.0.0
    + `7 J+ c) f* |) v6 C6 G/ j* a9 f
  4. ./configure --enable-shared* K! y4 m3 Z$ A+ O
  5. make . G& `: N; T* w) u% D: c  I- ]
  6. make install
复制代码
执行./configure可能遇到的错误:! e$ H$ j# ^6 z' Q3 @: t9 \& F
  1. configure: error: You need patch utility to prepare sources.
复制代码
解决方法:  y7 }" h, @" G4 {4 ~
  1. yum install patch
复制代码
10.amr-wb1 o, K) y% z2 B; F
  1.     wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2+ i. f% \7 H) {: j/ z" u! v+ o  q) R; S
  2.     tar -jxvf amrwb-11.0.0.0.tar.bz2) B5 j, M5 [6 @5 Q
  3.     cd amrwb-11.0.0.0
    1 f. c8 Z! m- g. h5 \& ~
  4.     ./configure --enable-shared* B( u" t' S5 W, Q" {
  5.     make $ F. [/ |1 d& Y4 |
  6.     make install
复制代码
11.yasm3 K* g- Z- {" P. K8 B& F6 H
ffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。: {& E) e2 C) K  T) p
  1. yum -y install yasm
复制代码
12.ffmpeg
9 C: D% _, t1 Y7 T6 u- a; w+ T
  1. wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2
    + z* ~1 ]! [8 t& s
  2. tar -jxvf ffmpeg-4.1.3.tar.bz2" M4 s0 c" |) U
  3. cd ffmpeg-4.1.3
    ' t% ], J' S7 [  x4 H) N, X" N
  4. #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.! p9 t! ~" p4 N" n
  5. #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。- s+ |* I1 h* M
  6. ./configure --enable-shared --enable-gpl --enable-libx264, B) p  G6 I1 x$ \
  7. #编译,需要较长时间,10分钟左右。
    9 ]* w* o% e, S$ K6 E
  8. make
    ! n0 v  Z% g& j8 E# }: ^& p
  9. #安装% Q! ]8 {6 L+ n# ?. Q: Y
  10. make install* L, j# ~* Y1 O( b) b1 k( e  P- O
  11. #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下% {5 T! W" }7 d$ P# i! H/ ?
  12. echo "/usr/local/lib" >> /etc/ld.so.conf
    2 Z) J1 ^+ O: l# Q; C
  13. echo "/usr/local/x264/lib" >> /etc/ld.so.conf
    2 p" q2 g  c1 B4 e
  14. #再执行ldconfig,更新ld.so.cache,使修改生效。0 o( u$ D3 j# y
  15. ldconfig
    ! _+ e' a- O/ V3 h% b- N
  16. #添加环境变量
    ) T4 X5 ^6 x. x$ \+ a
  17. export PATH=$PATH:/usr/local/lib
    2 _, r7 ]" E7 J- V$ A- D* V# s1 T
  18. #最后执行ffmpeg -version查看版本。
复制代码
如果执行还会报错则查看下ffmpeg的依赖是否完整:/ S9 }8 S, A  ?1 B
  1. ldd /usr/local/bin/ffmpeg
复制代码
a217db0d5cbbb0a2755deecd73dd3080.jpg 8 J8 W' U1 o0 U3 n( w: a$ r
如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
; M1 D) z3 X6 m7 P
  1. #切到编译的目录下7 ^, t- A  z3 g8 i2 i: A- `1 Z# e! o8 R
  2. cd ffmpeg-4.1.3
    - k" m, V& a, f$ u- U$ L
  3. make uninstall
复制代码
13.测试
  p0 `% k8 D# q% p
  1.     [root@localhost ~]# ffmpeg -i /root/Videos/111.avi  /root/Videos/1ew2q.mp4
    6 V) G) t, j( O) y( a8 [2 q( ~' \
  2.     ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers$ D# T6 D# m7 \2 l; Z
  3.       built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)# ?( p7 N5 E' p5 q/ |. M
  4.       configuration: --enable-shared; p* w/ `% {7 w
  5.       libavutil      56. 22.100 / 56. 22.100; b' f" ]' n% x. A1 f
  6.       libavcodec     58. 35.100 / 58. 35.100) X: y4 ~/ Y# R5 a; B: k' Z* t. q  c! V
  7.       libavformat    58. 20.100 / 58. 20.100
    8 \# ]+ V3 h: X+ H: O
  8.       libavdevice    58.  5.100 / 58.  5.100
    : S" |! D9 h% Y4 o" d
  9.       libavfilter     7. 40.101 /  7. 40.101+ h% Z7 p5 `+ c/ \$ f
  10.       libswscale      5.  3.100 /  5.  3.100
    ) q6 w1 @  H1 N  y
  11.       libswresample   3.  3.100 /  3.  3.1006 O) H* Q' G: l9 X6 k
  12.     Input #0, avi, from '/root/Videos/111.avi':; p1 W; N% u+ K$ u9 _! a! ]
  13.       Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s
    3 s# r  `+ p3 g: K
  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
    ' m. H( n# `) G& k
  15.         Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
    . G; x$ ?. E' W; \3 J! I, }
  16.     Stream mapping:/ h- Z2 W2 V+ I: L- N' z$ k
  17.       Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
    * V' l! c3 M7 v. z
  18.       Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))  y; W0 p: T, ]: L- g$ ]! B
  19.     Press [q] to stop, [?] for help
    , F  l4 U& b* s/ o1 r- H) q) `
  20.     Output #0, mp4, to '/root/Videos/1ew2q.mp4':
    8 k3 `! a  E3 N( D3 X
  21.       Metadata:! \, q# ~6 a) V2 f- T
  22.         encoder         : Lavf58.20.100
    ' h" w  ~: d% Y" e& 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' G3 T7 G5 P, b5 Q
  24.         Metadata:3 k. |4 d, ?: u' z. g: ^6 S
  25.           encoder         : Lavc58.35.100 mpeg4! V5 s  p) _! H9 L/ o/ \: @+ [1 K
  26.         Side data:
    ; c5 {$ U1 ?5 {; F# C" p/ @1 C3 p: E
  27.           cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
    - n6 _) O; \6 W: @: |( Y6 x' [8 p" C
  28.         Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
    # ~2 Y; j) ?& M, B. ]
  29.         Metadata:7 O9 a4 x. m1 `5 h5 q
  30.           encoder         : Lavc58.35.100 aac' Z' z# @1 j9 Z6 |# X
  31.     frame=  351 fps=0.0 q=12.3 Lsize=     870kB time=00:00:17.50 bitrate= 407.2kbits/s speed=  20x   
    " }) q- z# L# {; {" j: k" Z
  32.     video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%+ d. q0 C& |! e8 J
  33.     [aac @ 0xc51f40] Qavg: 1530.201
复制代码
x264编译的指令如下:
/ `0 J8 p/ J" N' T) w; A
  1. ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码

% R: O5 K4 f. z0 c% B
3 @) h# v9 x- _
/ l' l# L* f& d1 _4 r' u$ r1 E' k: l; B8 i/ F8 X. C$ \  C
% P/ S( e2 p+ E) V
# E6 i! S1 Q+ F* s/ b# ]

; J: z  l* a* d! k6 e
$ \) @3 X% m/ S. I4 \
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-3-22 03:35 AM , Processed in 0.100798 second(s), 25 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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