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

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

[复制链接]

986

主题

92

回帖

5万

积分

管理员

积分
55255
发表于 2022-9-14 09:24:18 | 显示全部楼层 |阅读模式
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本
% o* @! Q% E; {, Q8 Z; d8 B1 z装ffmpeg之前需要安装各种解码器。
9 g; v3 Q0 L0 W" ^- k5 P没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。
7 Y6 Q  K! m$ q% r1.lame
  1. wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz. N% G' M: \+ d# V$ m. L
  2. tar -zxvf lame-3.99.5.tar.gz
    - b, i: ?) ^* L) I; k
  3. cd lame-3.99.5
    * m' t( w2 p; r  \( ~2 K
  4. ./configure --enable-shared6 l% U  q, Z2 K8 a- l' E
  5. make ( E. r6 t( g- b' V, Y: U
  6. make install
复制代码
执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH- Q8 j- Q* V1 V/ Y- M) U, y
则需要我们先安装GCC。' f& B( b) Z4 q0 k" d$ {) r! I
  1. yum install gcc
复制代码
安装完成后再执行一遍。' T! x  q- C& C% ~6 j- [
2.libogg
  1. wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
    ( u2 O# S3 N+ u- B7 h+ e
  2. tar -zxvf libogg-1.3.2.tar.gz
    : `' h3 y/ h) T5 u2 `
  3. cd libogg-1.3.2
    " Y7 p2 ~0 a3 H/ ^7 J
  4. ./configure --enable-shared
    , J* j* l& Z2 C: R% G* q! T
  5. make ! J1 O- n, k8 l7 w- I5 ?
  6. make install
复制代码
3.libvorbis
  1. #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装
    - W7 S# g5 W9 z1 B: R" B
  2. wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
    & S1 U& H% i* }. o2 c; G
  3. tar -zxvf libvorbis-1.3.5.tar.gz
    0 G# r1 h( [# f! w# r
  4. cd  libvorbis-1.3.5
    7 |- t9 C" ~$ j# \
  5. ./configure --enable-shared  A4 h. p* d( a
  6. make " a' P" y. Y$ C+ C& W
  7. make install
复制代码

% ~0 ?! u! N7 d  j& ~; Z1 F执行“./configure --enable-shared”如果报以下错误:
+ G/ H8 _3 A/ hmust have Ogg installed!
% k" Q+ |1 m( Q. T# O我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。% T% n# ~+ a+ f) e, ]% p; _
解决方案:
: k$ I; O; t0 M1 Y8 G+ ]' B
  1. [root@localhost ~]#vi /etc/ld.so.conf. B: }: s7 V9 J  J
  2. include /etc/ld.so.conf.d/*.conf  1 F( W9 N& u7 F0 b* S$ v
  3. /usr/local/lib+ s" [! H- I9 y& t
  4. [root@localhost ~]#ldconfig –v
复制代码
4.xvidcore
  1. wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
    : M7 ~- W# T' g: u5 s
  2. tar -zxvf xvidcore-1.3.2.tar.gz ( S2 P+ Q) ?/ V
  3. cd xvidcore/build/generic
    4 x# s  b: @) U
  4. ./configure --enable-shared
    ; ?: E: B6 k, e. V: o7 e1 W+ o/ ^( X2 o
  5. make
    & _& v# {0 s$ L0 i
  6. make install
复制代码
5.x264
& X- a2 ]% t# A) c! _, z b0afa659d6bbbc43d1e805c323c28ae2.jpg 7 G  Z' g; P2 g$ B5 O

# ]. a# J$ P: E5 ?  y3 `$ ~( [libx264需要nasm的支持,nasm是一个编译器的角色。
8 h% |- s9 Q! U6 m安装nasm:" H# q+ @# T5 y- u3 Q
  1. wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
    & F5 ^) y7 @/ u0 L" g
  2. tar -xvJf nasm-2.13.03.tar.xz
    : Y$ V, l' v1 G9 Y% W- J3 T4 h; F
  3. cd nasm-2.13.03
    5 v! d. B5 @4 U8 s3 H
  4. sed -e '/seg_init/d' \4 h# x9 G: Y; L. L3 ?+ z6 u5 e7 }. z9 @
  5. -e 's/pure_func seg_alloc/seg_alloc/' \+ p  d9 O: {$ L- D3 o4 M4 @
  6. -i include/nasmlib.h$ B" _0 {4 @, @* T; G  w6 `% A
  7. ./configure --prefix=/usr &&5 z' [1 s; U8 ~" z4 u2 P
  8. make
    5 b( U, b) f; l# R/ `4 e6 T3 _
  9. make install
复制代码
58d7b18423362b6c9f7c732170a0d7df.jpg " l1 X" `. T& Y+ |& F: W
安装完成后再安装x264/ q1 F1 G) k% A3 \: ~  W, C4 b
  1. wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz26 K0 k  @8 f3 z
  2. tar -jxvf x264-snapshot-20190402-2245.tar.bz2/ b* \$ q2 M3 F/ ~( ^& ?
  3. cd x264-snapshot-20190402-2245
    " P( _' f8 t: a) R# S8 v7 W5 H8 f
  4. ./configure --enable-shared
      M& t8 y; l8 G4 f& X  r+ [! r
  5. make " G' ]  n- x2 r# B8 V& Z
  6. make install
复制代码
6.libdts
( c4 e2 I% r4 g' ~8 c  X
  1. wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
    ; N, U/ W' k/ ^* A- r$ @3 V
  2. tar -jxvf libdca-0.0.5.tar.bz20 Q+ w$ G2 _, Z: r7 \
  3. cd libdca-0.0.5
    3 I: H! H4 k+ C, Y3 a7 d6 ]: W- i
  4. ./configure --enable-shared5 Z0 \  F9 F! T% x' a: H2 o  v
  5. make 1 e7 Q+ x, M, d9 b" I4 F% B
  6. make install
复制代码
7.faad2
+ c8 C$ Z4 C# L9 Q/ j1 b
  1. wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz7 ^" H1 h' \+ ^% A4 k& A3 P" a2 {
  2. tar -zxvf faad2-2.7.tar.gz1 F  `& w0 F& H) g
  3. cd faad2-2.7$ @  I/ ?6 L& _" D1 j: }
  4. ./configure --enable-shared- b$ @* y4 v! m: ^
  5. make
    : K$ o- C0 w4 B0 Y; e9 Y$ C
  6. make install
复制代码
8.faac
! k9 a3 L: y* Y5 `
  1. wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
    9 ~/ E+ j4 y' n' A" a; i- O# z
  2. tar zxvf faac-1.28.tar.gz* {& B) c$ j% `" V: M
  3. cd faac-1.28
    * T/ T5 M! y# m1 K* Y
  4. ./bootstrap& h3 ]% N$ _: \( N; ~( k0 F9 q/ ?6 m# _
  5. ./configure --prefix=/usr/local/ --enable-shared
    + @; v" p( J6 o$ o6 j; ^7 S( D
  6. make && make install
复制代码
执行./bootstrap报错:: N8 d% D% x9 O0 t4 ?
  1. [root@localhost faac-1.28]# ./bootstrap/ v/ J0 M/ ?9 l) u; L
  2. ./bootstrap:行3: aclocal: 未找到命令- v7 l$ j! R5 S1 U' p
  3. ./bootstrap:行4: autoheader: 未找到命令3 X2 }0 x9 L, p0 o  `
  4. ./bootstrap:行8: libtoolize: 未找到命令
      k! ?) f3 M6 [/ K" G$ {
  5. ./bootstrap:行10: automake: 未找到命令- i- u& Q' q8 f) [* K9 `
  6. ./bootstrap:行11: autoconf: 未找到命令
复制代码
解决方法:
# a+ ~$ C" D8 }5 E+ Q% |
  1. yum -y install automake3 X; k; \+ ^0 X% i- S, G$ h
  2. yum -y install libtool
复制代码
执行make && make install报错:+ w- l5 H) @, x* Y6 M
  1. make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”
    ) z3 @! t: o4 |' n
  2. source='3gp.cpp' object='3gp.o' libtool=no \
    # C& D" D& ^0 c5 @4 h" l7 x
  3. DEPDIR=.deps depmode=none /bin/sh ../../depcomp \
    " n% @' n* c: o' A3 Q# q
  4. g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include   -Wall  -c -o 3gp.o 3gp.cpp
    5 f& h3 e4 M5 x  r
  5. ../../depcomp: 第 512 行:exec: g++: 未找到# q2 E# ]) a2 P: j. e8 A' ?
  6. make[3]: *** [3gp.o] 错误 1278 _- ~% m- N1 u! ^# n2 N7 f
  7. make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”
      Z6 g4 W/ _0 [& e1 H' s' i
  8. make[2]: *** [all-recursive] 错误 1
    / M6 S# _, ?& B5 ~/ Y, V, M0 u" i
  9. make[2]: 离开目录“/root/Downloads/faac-1.28/common”
    ) f+ i8 F( {0 h
  10. make[1]: *** [all-recursive] 错误 1
    ' F# K% y7 O7 z" Y9 Q  I% @
  11. make[1]: 离开目录“/root/Downloads/faac-1.28”
    / j" a3 D+ v% m4 B
  12. make: *** [all] 错误 2
复制代码
解决方法, U8 R1 x1 H" o4 t1 W7 P
  1. yum install -y gcc-c++
复制代码
执行make && make install时报错:4 q2 j+ y3 Q5 x3 C
  1. [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码
解决方法:& s3 l4 [1 `: r: C2 _# M
  1. 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)2 u' I7 l4 ~( m) o6 Q- H. ~) g
  2. 解决方法:
    % g& O: e0 ]5 l; z( Z$ k2 @
  3. 从123行开始修改此文件mpeg4ip.h,到129行结束。
    & D) s+ w& J, ]# Q) \9 A, v6 X9 S
  4. 修改前:  z5 d/ e: k, ^& ]6 k" Y! ^
  5. #ifdef __cplusplus
    ! d. ^3 o2 o; N0 E/ p
  6. extern "C" {( x5 a# a8 A- E. P" G. w
  7. #endif1 E' R1 W. s' L8 D, h# A5 D
  8. char *strcasestr(const char *haystack, const char *needle);
    - q4 g7 M; e( c; f. O# O% z9 c1 B4 ~
  9. #ifdef __cplusplus
    ! N# X# S3 G% K3 @- V
  10. }5 X( u! y1 Y3 n) y, b$ K+ ^
  11. #endif5 g, z. q, m$ [. [* w2 f1 }
  12. 4 t. M6 N& }7 O/ ?& s# E
  13. 修改后:! Z/ {8 _- @. C
  14. #ifdef __cplusplus! v3 F. L; s) G  D# n: o( t3 @9 L
  15. extern "C++" {" B( U# \' T, _3 A; p+ s) e
  16. #endif9 q6 A. F' o/ k( z, r
  17. const char *strcasestr(const char *haystack, const char *needle);9 B6 [" Q6 o* P+ h
  18. #ifdef __cplusplus# T8 _0 [# k! c* _- P
  19. }
    3 `! X, w0 t0 y4 `% v
  20. #endif
复制代码
9.amr-nb/ K4 H  j$ Y! T5 J/ K; X
  1. wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2
    , q1 |) E. I/ M; s) H1 v  j
  2. tar -jxvf amrnb-11.0.0.0.tar.bz2
    6 m. F. f& ~; b/ ?$ t1 R- K
  3. cd amrnb-11.0.0.0
    ( |4 k; n& f- ]# k& |
  4. ./configure --enable-shared9 \) T8 i: U) c$ Y9 B6 F
  5. make 8 A* {- ?' ?/ o" r0 o% H" V6 T* E
  6. make install
复制代码
执行./configure可能遇到的错误:
, r# D2 Z) x2 }7 E$ v$ \
  1. configure: error: You need patch utility to prepare sources.
复制代码
解决方法:* u& \6 `, s/ L: S& F
  1. yum install patch
复制代码
10.amr-wb
+ e% l# d7 Z4 M
  1.     wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2, }. A# y' D* g- ?: ]3 C- U# L
  2.     tar -jxvf amrwb-11.0.0.0.tar.bz2
    - n5 s/ U& f( `8 C2 H
  3.     cd amrwb-11.0.0.0+ T8 n/ L- T% R0 i6 Y2 p# k0 Q7 @
  4.     ./configure --enable-shared
    ' P& _% r4 I) g' M
  5.     make
    3 ]% v! P' p2 A  E- m/ c3 I9 }
  6.     make install
复制代码
11.yasm
5 I0 Q! O  Y' e# Q4 g* Rffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。
9 R, O6 {" d7 o# c# e
  1. yum -y install yasm
复制代码
12.ffmpeg
1 z- \) t3 r! G6 K
  1. wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2
    0 ^  ~' v# f! {$ h& F% X
  2. tar -jxvf ffmpeg-4.1.3.tar.bz2
    : R4 ~9 `1 x3 [9 r0 A7 ~6 s
  3. cd ffmpeg-4.1.3
    ; v) L  g, x8 ^  X
  4. #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.
    . D# F' _0 B1 [3 ?+ q5 R) ~* }
  5. #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。
    % F, z5 }5 }! b& h2 f/ B
  6. ./configure --enable-shared --enable-gpl --enable-libx264: e. l. X- E3 w( W
  7. #编译,需要较长时间,10分钟左右。
    6 `6 s1 R  M; s* W6 ~& b
  8. make
    & Y( m* U* \7 v$ l6 v
  9. #安装
    ( Y4 {7 J% y% ~. |% I& w2 W
  10. make install
    5 b2 _0 n2 \# V5 n4 g, z2 ^- M
  11. #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下
    . K8 v" |; k% G
  12. echo "/usr/local/lib" >> /etc/ld.so.conf0 Z* M) j" ^* k4 e+ t
  13. echo "/usr/local/x264/lib" >> /etc/ld.so.conf
      t, |$ X6 j( B% V& C% [3 Q
  14. #再执行ldconfig,更新ld.so.cache,使修改生效。; @: _! B5 }+ t, L" `
  15. ldconfig5 [8 ~9 i$ j' @
  16. #添加环境变量
    2 b0 z& U* V( [6 T
  17. export PATH=$PATH:/usr/local/lib
    7 R) J# Y. n$ @/ ]* r! d
  18. #最后执行ffmpeg -version查看版本。
复制代码
如果执行还会报错则查看下ffmpeg的依赖是否完整:
. w% k1 h- x% M
  1. ldd /usr/local/bin/ffmpeg
复制代码
a217db0d5cbbb0a2755deecd73dd3080.jpg
% M& `# M) p/ D如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
; _; x! m, G; S+ R
  1. #切到编译的目录下
    6 R! k% u7 A4 k  e2 l
  2. cd ffmpeg-4.1.34 x9 W2 O, `5 u& U  g: Q( U
  3. make uninstall
复制代码
13.测试2 F" Z/ L+ ?" \8 _8 p$ ]! k
  1.     [root@localhost ~]# ffmpeg -i /root/Videos/111.avi  /root/Videos/1ew2q.mp44 k1 [+ w3 z4 F7 j4 w6 ?
  2.     ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
    : _8 T" o5 @, z- H- p
  3.       built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)$ x# o7 D* t, Y7 z( ?# j$ I
  4.       configuration: --enable-shared" F, W3 P- r( R
  5.       libavutil      56. 22.100 / 56. 22.1009 w5 J# }) d! h  l
  6.       libavcodec     58. 35.100 / 58. 35.100
    4 T+ [6 O, k1 v& T( W" Q
  7.       libavformat    58. 20.100 / 58. 20.1001 B5 q5 T6 A' W, v4 E
  8.       libavdevice    58.  5.100 / 58.  5.100
    + t  |) E' B" L" [- O
  9.       libavfilter     7. 40.101 /  7. 40.101' R# W3 p2 ]$ G  n& n! ]
  10.       libswscale      5.  3.100 /  5.  3.100! x. P0 {. V1 a  P% `( I
  11.       libswresample   3.  3.100 /  3.  3.100
    7 [& ]+ Y  T. o: L$ d8 l+ H  i# g2 a. G
  12.     Input #0, avi, from '/root/Videos/111.avi':
    4 S. d, I* X8 H9 G. Y
  13.       Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s
    % {$ g! r8 \# f1 b7 Y, _
  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
    , I7 F# q7 R3 X8 F7 y5 C
  15.         Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
    0 O- e) d6 z2 `& R$ Y/ O: z, G8 c2 E
  16.     Stream mapping:6 M8 {+ k8 f* S0 |+ o- m
  17.       Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
    / Q! Q* H% F6 h
  18.       Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))
    3 d; I# J2 B/ N+ x! y
  19.     Press [q] to stop, [?] for help
    1 x- I7 |% S/ i4 i; u! E
  20.     Output #0, mp4, to '/root/Videos/1ew2q.mp4':
    $ L  B' N5 {: C5 Y1 }. \2 ~* i
  21.       Metadata:7 G- h6 z* f6 |3 o$ L
  22.         encoder         : Lavf58.20.100
    ' r: c7 h% d# x8 Q3 k7 D, v5 M+ Z
  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! [8 v0 ?0 w3 ^. p) Z. ]
  24.         Metadata:
    0 K0 `! t4 ^$ T5 q$ v
  25.           encoder         : Lavc58.35.100 mpeg4% W, A% x1 @/ B* V" f  G3 t( w
  26.         Side data:+ P5 p# X/ ~- c% v9 G+ @' q+ f  N
  27.           cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1! ^- m/ j, e- j- A: p6 {
  28.         Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
    + G% v& E2 x2 z) d
  29.         Metadata:7 E" Q, o/ O( b0 f/ F
  30.           encoder         : Lavc58.35.100 aac
    & C6 e  u; n! Y9 y. C/ R5 \
  31.     frame=  351 fps=0.0 q=12.3 Lsize=     870kB time=00:00:17.50 bitrate= 407.2kbits/s speed=  20x   
    ! p+ J- k6 [- ^+ K9 W  O# v
  32.     video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%8 W$ X2 t0 _- `& r3 @
  33.     [aac @ 0xc51f40] Qavg: 1530.201
复制代码
x264编译的指令如下:
! S( T2 i7 I) I" ]- O8 F
  1. ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码
% r/ r: A+ }  R; d6 {

+ A; ^; @, o; m- @, e
& I6 d7 j) |, M# ~/ K' v; t9 A. Z1 b1 U

6 m7 V2 o) L3 |1 r% y1 d
6 p7 Q0 b) R: O0 K; B; X2 O/ K: d) N3 }) V1 m' k

: T& S8 T4 T7 ?5 }/ V
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-3-22 02:37 AM , Processed in 0.086056 second(s), 26 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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