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

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

[复制链接]

985

主题

92

回帖

5万

积分

管理员

积分
53561
发表于 2022-9-14 09:24:18 | 显示全部楼层 |阅读模式
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本2 e9 o3 o) ^6 R; C! d
装ffmpeg之前需要安装各种解码器。1 u, l9 [+ V( R2 s
没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。: b: U5 j' V" E' i; x: V$ H2 j
1.lame
  1. wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz. `; N0 k9 G- F" w
  2. tar -zxvf lame-3.99.5.tar.gz
    8 n% d$ j& @  Z  F! S+ j
  3. cd lame-3.99.5
    * p' j" a$ T, T3 w: y. t0 |  Q
  4. ./configure --enable-shared5 x6 q- G" c  g1 F" a# P
  5. make $ B9 M0 i% v$ Z& r/ P
  6. make install
复制代码
执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH
; J  N: O) v- ?则需要我们先安装GCC。
1 f7 ], x" B4 B$ n: r/ D
  1. yum install gcc
复制代码
安装完成后再执行一遍。
6 }9 o) s2 `! u" c6 {6 P, p2 L) {2.libogg
  1. wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz5 y/ I$ F) v: {7 i% s
  2. tar -zxvf libogg-1.3.2.tar.gz
    + j0 b+ g: S9 {: ]
  3. cd libogg-1.3.2
    6 J: F$ c  p2 C0 Q7 b  a0 I3 B
  4. ./configure --enable-shared& n+ G( @1 o1 R
  5. make
    $ _. T# [- x- B  Y% `
  6. make install
复制代码
3.libvorbis
  1. #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装
    0 x; N/ m5 U) O' E/ g
  2. wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
    0 V' c' P' P& ^, Z6 H% u7 p0 o
  3. tar -zxvf libvorbis-1.3.5.tar.gz( U1 G3 {* v; {& R4 }# S
  4. cd  libvorbis-1.3.5
    0 T% F% b/ L1 I3 B" Z- S: J
  5. ./configure --enable-shared
    0 x/ `# m5 V9 O
  6. make ; I- X0 o; C+ Z1 ~( h2 V
  7. make install
复制代码

% N4 T+ }8 G( Y" t执行“./configure --enable-shared”如果报以下错误:$ e  h; W! m7 t% K# k
must have Ogg installed!" F" z' c) G6 k( P7 j2 F7 ^
我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。
  }, c1 U2 @8 y! b- D解决方案:
: ^; ^. v4 J2 v0 J0 h6 d
  1. [root@localhost ~]#vi /etc/ld.so.conf2 l- d0 m2 q% c- c6 i. s2 B: T+ z
  2. include /etc/ld.so.conf.d/*.conf  
    0 V  \$ X. ^+ T3 h
  3. /usr/local/lib
      y5 o# r* u/ v/ N. ~
  4. [root@localhost ~]#ldconfig –v
复制代码
4.xvidcore
  1. wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
    * u! a# W. x: [$ r+ k
  2. tar -zxvf xvidcore-1.3.2.tar.gz   w* c0 X( n: p, q  B! u
  3. cd xvidcore/build/generic
    1 w5 d9 Z# b  a) g
  4. ./configure --enable-shared, m. r) L4 n; k. e+ r1 p
  5. make
    8 d( d" {2 F/ g
  6. make install
复制代码
5.x264
9 I9 G; `0 G1 S b0afa659d6bbbc43d1e805c323c28ae2.jpg
" I8 ~: |. x! g0 A6 e& L% Z
8 \, T1 z" t+ {3 Q8 q. J" ]) Q
libx264需要nasm的支持,nasm是一个编译器的角色。
# o6 V4 @, y  w" o5 p# d+ ^  A# M: k& [安装nasm:
, S  U; l4 [8 F/ b7 P7 h
  1. wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz/ W# {6 E/ ?* s' i. c6 ^8 s$ B
  2. tar -xvJf nasm-2.13.03.tar.xz
    $ d  @/ E( }1 |+ |5 z" U4 @% m
  3. cd nasm-2.13.03
    / L$ a  p- d2 w0 b
  4. sed -e '/seg_init/d' \7 |: f, Z. M( W4 O: L3 m' U
  5. -e 's/pure_func seg_alloc/seg_alloc/' \
    " G( p& N' s- E' [2 v# N! C# W
  6. -i include/nasmlib.h
    9 u! T* A0 T! F- c% R4 b8 X
  7. ./configure --prefix=/usr &&
    ' c( W! C* A3 L8 n0 D- ~
  8. make
    6 K0 z( P3 J" V8 {/ G
  9. make install
复制代码
58d7b18423362b6c9f7c732170a0d7df.jpg
% v$ f- U; w/ k0 l安装完成后再安装x2641 ~# W" v& Q9 j" T$ H
  1. wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2/ ?. i! J$ l) x. r/ f
  2. tar -jxvf x264-snapshot-20190402-2245.tar.bz2
      f% A( J# W8 a1 k5 p
  3. cd x264-snapshot-20190402-2245
    0 _( i/ ?1 g6 X0 Z! Y
  4. ./configure --enable-shared2 b9 d+ C3 J" u5 ^; ~5 E1 Z& I
  5. make
    $ ?3 l) n$ D0 p5 Z9 |) A' w
  6. make install
复制代码
6.libdts# C" U5 r7 }6 j. |! G6 R+ }
  1. wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
    ' \7 p$ n1 e$ G
  2. tar -jxvf libdca-0.0.5.tar.bz2
    8 p2 s# Y8 r/ A4 f- W2 P
  3. cd libdca-0.0.58 F  ]& h8 \  \
  4. ./configure --enable-shared4 C! M& `4 f9 d- B/ }- p9 `3 k9 c
  5. make 1 F3 N  p' a6 u5 q+ w( Y. t
  6. make install
复制代码
7.faad2$ U+ _) I4 P, r$ y
  1. wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
    . x% l' C/ f2 |
  2. tar -zxvf faad2-2.7.tar.gz2 v$ _* q* x) f: }5 @
  3. cd faad2-2.7% C/ c/ N7 Z# r$ C" }9 k( G- ]" P7 [
  4. ./configure --enable-shared& B3 r' r8 `$ p/ H2 }6 L, [3 ]7 g
  5. make
    ! {, U: a' k0 D0 ^2 v3 k' h
  6. make install
复制代码
8.faac
! B8 H& @' j7 k) G+ u( M+ Y; o
  1. wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
    ) W0 H/ d- ^& ^, E. @  X
  2. tar zxvf faac-1.28.tar.gz
    5 `6 ?; `3 Q) P* @
  3. cd faac-1.28" a8 O' m; j  x/ F$ R2 t
  4. ./bootstrap
    ' x  J8 l, b6 L0 x
  5. ./configure --prefix=/usr/local/ --enable-shared
    3 x' c7 ]( _/ y( t6 L: f; W( j0 W
  6. make && make install
复制代码
执行./bootstrap报错:
% _; K8 Y+ Z' w
  1. [root@localhost faac-1.28]# ./bootstrap
    ' {* a+ m- s2 f8 [' \; d) c
  2. ./bootstrap:行3: aclocal: 未找到命令5 P4 y; q  [8 n) ]; A
  3. ./bootstrap:行4: autoheader: 未找到命令
    4 {' G9 }+ T% s- n* Z
  4. ./bootstrap:行8: libtoolize: 未找到命令
    . W8 H. R0 |: I' ?1 N% }
  5. ./bootstrap:行10: automake: 未找到命令
    4 k6 A+ W6 n' @! h# v+ {* V- [
  6. ./bootstrap:行11: autoconf: 未找到命令
复制代码
解决方法:
) h# [: k) N) ]( q
  1. yum -y install automake
    ! j# J( V1 O1 k! o- h* L' Y
  2. yum -y install libtool
复制代码
执行make && make install报错:
5 r( O" x8 v. T( ]. h+ J% `
  1. make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”
    ) z0 }% q/ v5 B7 d
  2. source='3gp.cpp' object='3gp.o' libtool=no \! d8 o, n$ n( V+ s& |7 [& O9 _9 j
  3. DEPDIR=.deps depmode=none /bin/sh ../../depcomp \2 Q  z; v- W3 f" b, Q. i
  4. g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include   -Wall  -c -o 3gp.o 3gp.cpp
    6 T2 |0 r# |) s
  5. ../../depcomp: 第 512 行:exec: g++: 未找到
    9 m& ^4 x. w$ p& z5 d0 c! b8 c$ G
  6. make[3]: *** [3gp.o] 错误 127
    " u( y& L: a( b/ [9 Q
  7. make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”3 H# ]" L# ^" i6 {' ~
  8. make[2]: *** [all-recursive] 错误 1
    $ m. J( R# Y3 t& ^3 z
  9. make[2]: 离开目录“/root/Downloads/faac-1.28/common”
    5 i+ |  w$ ?2 A6 a: k( b$ l
  10. make[1]: *** [all-recursive] 错误 1* F3 J% p) d& p) X. A$ S# r) J
  11. make[1]: 离开目录“/root/Downloads/faac-1.28”' J$ `' d! I( {3 a, \) z& `
  12. make: *** [all] 错误 2
复制代码
解决方法
5 _7 F  A! H: A  T  s
  1. yum install -y gcc-c++
复制代码
执行make && make install时报错:7 ~+ z# s% q/ g* o, E% N3 F" z
  1. [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码
解决方法:' D3 F4 B0 z6 n9 \; Y/ m& |, e5 t9 o
  1. 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
    3 ~, J( D1 [2 b( i% ~
  2. 解决方法:
    2 I; h( Y" c! C- ?9 D% s
  3. 从123行开始修改此文件mpeg4ip.h,到129行结束。& a7 p) L# v; U% o+ k; L' U( r- P
  4. 修改前:
    ; f% E8 Z7 b: |6 r" m! D
  5. #ifdef __cplusplus
    & p' E, F4 x3 Z0 f' W% t! r1 H
  6. extern "C" {$ T7 Z& J$ E9 ?6 C
  7. #endif
    ) r, O; b; P, O0 ^
  8. char *strcasestr(const char *haystack, const char *needle);. k6 h$ s# @( e" j$ z& N: X
  9. #ifdef __cplusplus
    ( n9 v, l; T- P$ s/ k
  10. }( G' H+ u6 S- i7 [. h+ F4 U
  11. #endif
    * v# J: ?: T% ^0 t. _; N) L
  12. 8 ?( W+ o# F" ]0 o6 ^  \& Y
  13. 修改后:2 N' }1 {+ W4 |
  14. #ifdef __cplusplus
    / T3 v  e) i! x  r' U9 g
  15. extern "C++" {
    / u8 Y4 q, ^8 X8 J; }6 R% t
  16. #endif
    1 c5 g5 s* Z2 p6 ?
  17. const char *strcasestr(const char *haystack, const char *needle);
    4 b6 T4 k( C2 E
  18. #ifdef __cplusplus
    : F) r! L! B1 @! e7 s6 o2 l2 H
  19. }
    : c% n( A3 }$ y! Y  G& E5 [
  20. #endif
复制代码
9.amr-nb1 A$ D2 R0 k: A" T+ `/ _3 p
  1. wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2$ h7 ]6 \2 |* Y% ^# }  C
  2. tar -jxvf amrnb-11.0.0.0.tar.bz2+ i( E  ~0 d. t  G' r& j) l
  3. cd amrnb-11.0.0.0
    # n% {: F0 A' p; f7 P; n
  4. ./configure --enable-shared0 L2 L, [4 {1 `4 \7 u
  5. make ( [% |3 q2 N/ @7 g/ V
  6. make install
复制代码
执行./configure可能遇到的错误:& \$ C: h  z7 P
  1. configure: error: You need patch utility to prepare sources.
复制代码
解决方法:
1 C. r% G: `8 |/ S
  1. yum install patch
复制代码
10.amr-wb) t: D' q. Z+ U. z& X. P3 h
  1.     wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2
    / E; h7 ~: f9 D# K/ H
  2.     tar -jxvf amrwb-11.0.0.0.tar.bz2" c+ W  e% s- `  Z
  3.     cd amrwb-11.0.0.0% e% h4 }+ w3 e
  4.     ./configure --enable-shared. a4 M, |/ E  Z% C
  5.     make % m% \" H3 B8 t9 Q0 Z9 @3 P8 l
  6.     make install
复制代码
11.yasm0 r/ y. Z( ^2 K" G0 ]1 f/ D
ffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。' s/ V8 \) l7 Q( n- M( N
  1. yum -y install yasm
复制代码
12.ffmpeg
9 i# {- I9 B2 V- {' Z5 E3 J
  1. wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz22 d7 \$ I, Q+ Q
  2. tar -jxvf ffmpeg-4.1.3.tar.bz2
    ' p4 G7 p& ^/ [# _8 D' D2 ]* H5 z
  3. cd ffmpeg-4.1.3
    ! [9 t) V* c/ j% Q- M+ a7 \
  4. #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.
    % L) F# D" W( g' l
  5. #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。2 S# m+ s2 U- i; j7 \+ y' ]8 L
  6. ./configure --enable-shared --enable-gpl --enable-libx264
    * c2 d. U. u( @1 q2 M! k* o
  7. #编译,需要较长时间,10分钟左右。
    4 B5 F( v8 Q6 A3 \# E1 `
  8. make
      A7 n1 ~+ }1 f
  9. #安装
    9 D5 @2 |- B( e5 H# t, B
  10. make install
    3 H2 Q' s# H6 {4 S
  11. #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下
    , H" t  a/ @6 S' v7 S7 f
  12. echo "/usr/local/lib" >> /etc/ld.so.conf
    4 D- X$ m% J5 s; c
  13. echo "/usr/local/x264/lib" >> /etc/ld.so.conf
    : k5 N! _9 D. e; `
  14. #再执行ldconfig,更新ld.so.cache,使修改生效。4 e$ H% @# c2 u9 k+ a  D
  15. ldconfig9 |$ T0 Q& G  x# Q9 |
  16. #添加环境变量
    ' E* U& [$ a1 j2 z" ~( l! ]7 a
  17. export PATH=$PATH:/usr/local/lib
    " p5 l3 O7 I+ n0 A1 V4 l1 d' k8 W
  18. #最后执行ffmpeg -version查看版本。
复制代码
如果执行还会报错则查看下ffmpeg的依赖是否完整:0 q2 j2 Z6 p8 V
  1. ldd /usr/local/bin/ffmpeg
复制代码
a217db0d5cbbb0a2755deecd73dd3080.jpg
/ p, V$ [! V4 l' K/ _如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
8 w/ q$ A3 X% ~/ |/ P/ S
  1. #切到编译的目录下9 Y) S8 f* t- N: K" l8 G5 S$ k+ Y
  2. cd ffmpeg-4.1.3& d: {, T' @, h5 I3 q: k
  3. make uninstall
复制代码
13.测试/ v7 n+ a9 y' l0 L6 B6 B
  1.     [root@localhost ~]# ffmpeg -i /root/Videos/111.avi  /root/Videos/1ew2q.mp4
    1 U0 M7 Y+ P0 A
  2.     ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
    9 _& j/ R" R- D9 c# N9 j3 }
  3.       built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)5 t+ h- t: h9 x% y" D
  4.       configuration: --enable-shared. K& @" T) l3 t
  5.       libavutil      56. 22.100 / 56. 22.100
    - a2 }1 i/ I$ Z1 d% y. J
  6.       libavcodec     58. 35.100 / 58. 35.1002 u. b; l, I3 o0 o. ^7 E
  7.       libavformat    58. 20.100 / 58. 20.100% A: H8 x6 j3 a( M
  8.       libavdevice    58.  5.100 / 58.  5.100
    7 g# ^$ _) W; ~3 ~
  9.       libavfilter     7. 40.101 /  7. 40.101
    : R. t  x% M1 V, n+ b2 o  `
  10.       libswscale      5.  3.100 /  5.  3.100$ D; M- E6 j3 F: ?  z
  11.       libswresample   3.  3.100 /  3.  3.100
    " D! l6 u$ x0 x
  12.     Input #0, avi, from '/root/Videos/111.avi':
    9 y0 m5 Z  O4 [+ J5 j
  13.       Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s
    . p& M5 H, Y7 ~! E
  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  q  ]3 y- P5 {
  15.         Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
    ) N7 U2 A9 ]$ a; h# t
  16.     Stream mapping:6 j+ ]. H/ `$ c2 n! s$ I+ Z
  17.       Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))0 ~, S7 _9 }8 L# g- b
  18.       Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))" {* Z3 I, I7 K$ O5 Q9 q2 p
  19.     Press [q] to stop, [?] for help0 _, V$ q0 w% U& {* i8 g
  20.     Output #0, mp4, to '/root/Videos/1ew2q.mp4':
    7 j( v; ~' E' A1 u, J
  21.       Metadata:
    ; U! \/ O# h; ^% e, D- p2 _# ~
  22.         encoder         : Lavf58.20.100
    4 d, d3 d! [5 q- W# T$ X% `
  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* c# k. ^. i, ~6 @9 v3 ^
  24.         Metadata:7 c- g8 h" C/ e! \& l0 v
  25.           encoder         : Lavc58.35.100 mpeg4
    0 ]& O8 I$ T1 k8 K# K  y' x* A
  26.         Side data:
    4 U: D5 D, [" t/ g
  27.           cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
    % U5 b1 B' G$ E6 \1 W
  28.         Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
    . j( [' c/ `( d5 x
  29.         Metadata:( }' f  Y) o$ j3 p- }3 u
  30.           encoder         : Lavc58.35.100 aac
    4 w( Q' q" r1 H( c3 f! [& U$ m$ R
  31.     frame=  351 fps=0.0 q=12.3 Lsize=     870kB time=00:00:17.50 bitrate= 407.2kbits/s speed=  20x    $ j' R+ K- z& v" f) k0 Y8 T- L
  32.     video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%8 y3 @' Q- \  ?, O
  33.     [aac @ 0xc51f40] Qavg: 1530.201
复制代码
x264编译的指令如下:9 c" k' e$ n! \4 e/ R5 _* ~
  1. ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码

- t0 \+ Y' d$ Q9 A, {; J
$ z9 S& i, R: n9 u+ I: b
- E6 q0 a& C3 W1 I1 W7 |: h. t7 x7 s+ y, u3 p! g
/ |, M4 p# M6 t# l: |

- A7 Z$ G9 Z! I6 i/ _5 ~9 s  i3 y  o7 B1 }6 Q) X
) x( @: S- ^5 Z4 k! |# h
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2025-11-5 02:03 AM , Processed in 0.125717 second(s), 26 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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