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

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

[复制链接]

979

主题

90

回帖

5万

积分

管理员

积分
53052
发表于 2022-9-14 09:24:18 | 显示全部楼层 |阅读模式
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本
- r; x" I9 |* d/ P) o- }装ffmpeg之前需要安装各种解码器。
9 I! n8 |, k" V: s. m  N( M1 N9 ?没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。
/ ?9 h+ Q' _) v2 |+ y1.lame
  1. wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
    ' `' u( m, }$ ^, y1 e% G9 B# m5 f( N8 M2 f
  2. tar -zxvf lame-3.99.5.tar.gz# A7 M8 P7 m+ F$ ^7 I% l( p/ x# l
  3. cd lame-3.99.5 + z* M; y( K) {4 p& a7 d4 H8 F' U
  4. ./configure --enable-shared. i1 z& f+ b' f8 b4 X% r6 {6 v2 D
  5. make
    + b' m$ s" {/ q5 s/ ^* B4 X2 ~
  6. make install
复制代码
执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH
) R' ?$ B  t; ]. g) W) \" K0 m# k6 L则需要我们先安装GCC。% x9 ^: b2 ^1 w% d& _4 \
  1. yum install gcc
复制代码
安装完成后再执行一遍。
) Z8 l4 ^- g- S4 |- Q2.libogg
  1. wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
    6 d0 n5 p! `  m6 D
  2. tar -zxvf libogg-1.3.2.tar.gz
    9 W4 I. t6 _( [) K
  3. cd libogg-1.3.2
    0 P7 z5 c9 S  B
  4. ./configure --enable-shared
    7 r7 z& _( n' `$ w1 R9 n5 G9 C
  5. make ! |# I% ]3 t9 I) R( |2 L9 ?# |
  6. make install
复制代码
3.libvorbis
  1. #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装
    5 V+ e$ }9 |; B+ W& E
  2. wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
    " g$ \# d  B" H3 o; ~% o, Z5 P
  3. tar -zxvf libvorbis-1.3.5.tar.gz
    ) J, k4 \; S8 M. O6 \
  4. cd  libvorbis-1.3.5& R, ?, d3 x0 |1 u6 [) }
  5. ./configure --enable-shared! A. w- C6 x! y
  6. make % [' ^. S3 @7 v# `  K# X( z4 I' Y
  7. make install
复制代码

& j/ [1 y, e! D* g4 I执行“./configure --enable-shared”如果报以下错误:" \, W+ m1 B7 [! B
must have Ogg installed!
) d1 c, \" M& G- g我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。
' e% p& m( @+ v7 j: h1 T解决方案:  w; y, D1 }$ A% e9 k. X; d1 e5 H0 Y
  1. [root@localhost ~]#vi /etc/ld.so.conf
    9 g0 @1 |6 m- _, j
  2. include /etc/ld.so.conf.d/*.conf  
    : c. v- n- x) L, U6 T2 J
  3. /usr/local/lib) P1 S, d" {! o' q7 H
  4. [root@localhost ~]#ldconfig –v
复制代码
4.xvidcore
  1. wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz. \1 Z1 ]2 l0 y0 y  B4 T
  2. tar -zxvf xvidcore-1.3.2.tar.gz 6 R! V% b! M( ]3 S7 J) [! m
  3. cd xvidcore/build/generic5 q' d8 x% E! X2 Z8 i" I7 X
  4. ./configure --enable-shared5 J1 E! r3 |1 K7 A9 x, t
  5. make ; Z( p/ F2 D; W
  6. make install
复制代码
5.x264
8 P8 O9 R* Y! ], o b0afa659d6bbbc43d1e805c323c28ae2.jpg 5 N2 b. `% a/ l" p6 w6 D

- D1 W( c6 d' H6 Dlibx264需要nasm的支持,nasm是一个编译器的角色。* ]$ k7 x2 C8 v4 B* s3 {
安装nasm:9 ]" F, G0 n# I, {& B/ k6 J
  1. wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
    9 p: S: s6 K* B& l
  2. tar -xvJf nasm-2.13.03.tar.xz9 u  z7 B5 ]2 L: G
  3. cd nasm-2.13.03
    5 {# ~& y* x  j! I8 x, B0 I
  4. sed -e '/seg_init/d' \3 {3 i9 W, x4 Z1 J, t8 O: e: f  N
  5. -e 's/pure_func seg_alloc/seg_alloc/' \
    ( D. u9 F8 @* _
  6. -i include/nasmlib.h
    ) v) Q- D# U! Q" n% E
  7. ./configure --prefix=/usr &&) R  l" h, k, B$ Z5 }- `5 z
  8. make8 i; p+ u3 q3 d, D( u* @) ~# `; O
  9. make install
复制代码
58d7b18423362b6c9f7c732170a0d7df.jpg
0 x; N6 Q' d) a' D* u安装完成后再安装x264$ u( f, [# X! J8 ^7 V; l
  1. wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2' a9 W* I+ J. \7 k" I  ?
  2. tar -jxvf x264-snapshot-20190402-2245.tar.bz24 d) F& _+ r& e6 C. k% o
  3. cd x264-snapshot-20190402-2245# i: Q" K7 G5 l; _9 v* M
  4. ./configure --enable-shared
    & }- }$ Q" ~, e, ^5 P# H3 o7 }3 P
  5. make
    7 N* B! {4 r6 b  k, }! B0 @$ X3 Z
  6. make install
复制代码
6.libdts
2 ], r6 O6 R& A; M9 K
  1. wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
    ; F5 m: j* H2 L. C* b8 V
  2. tar -jxvf libdca-0.0.5.tar.bz27 I4 k1 i1 F+ [8 ]9 x& `
  3. cd libdca-0.0.59 \& a- p$ N- `$ {% k4 |; x
  4. ./configure --enable-shared
    ) M/ j1 \* ^* m* `/ O, h. Q/ a0 ]
  5. make   W) R9 f" L& S8 u
  6. make install
复制代码
7.faad2
$ P5 K8 Q' o7 ?- Y$ L" e+ U
  1. wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz$ B' e; ~+ j7 W/ @# `
  2. tar -zxvf faad2-2.7.tar.gz* m6 j$ O% T- f5 l7 {  F1 @7 a+ j7 M
  3. cd faad2-2.7
    - k/ b$ [: R+ }' r& @  [) {% ^  l
  4. ./configure --enable-shared
    ' }; o5 L: `; A) G7 i- {( [
  5. make
    & D5 K$ W; d; u5 ?. ], n  B
  6. make install
复制代码
8.faac4 G) B* G; N0 G- g3 n8 i
  1. wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
    % g. H! k: ]: ?
  2. tar zxvf faac-1.28.tar.gz
    / U6 P# e& H$ }4 W; W5 s& [! j
  3. cd faac-1.28
    & }; _; L/ d7 I: S) R
  4. ./bootstrap% G8 F  k' f7 A+ L+ u8 ^
  5. ./configure --prefix=/usr/local/ --enable-shared
    : ]1 _' P/ O4 @% T
  6. make && make install
复制代码
执行./bootstrap报错:* [2 g, s9 z0 ?
  1. [root@localhost faac-1.28]# ./bootstrap
    ; i: d4 z, u; X
  2. ./bootstrap:行3: aclocal: 未找到命令5 w4 d9 }+ O( Y6 {+ t$ O3 Y
  3. ./bootstrap:行4: autoheader: 未找到命令- z* A. F# Y) Y2 L4 L4 e
  4. ./bootstrap:行8: libtoolize: 未找到命令
    $ Y$ H  q5 l7 i/ J
  5. ./bootstrap:行10: automake: 未找到命令2 d0 l0 B& ^# h" C8 o  F; }
  6. ./bootstrap:行11: autoconf: 未找到命令
复制代码
解决方法:' R) v* r, g& {) c
  1. yum -y install automake
    - F  Y9 X3 W+ P( X- o
  2. yum -y install libtool
复制代码
执行make && make install报错:" D- K" [: u  s! B5 {1 m7 t$ h. z" K
  1. make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”& G! o: x- q) M! X: P  u, f
  2. source='3gp.cpp' object='3gp.o' libtool=no \
    8 s, Z0 ]( g6 {" o4 }( S
  3. DEPDIR=.deps depmode=none /bin/sh ../../depcomp \: |+ E2 [' H3 Y& o' X$ p( \
  4. g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include   -Wall  -c -o 3gp.o 3gp.cpp  T, X* k) G. m& O$ z$ h
  5. ../../depcomp: 第 512 行:exec: g++: 未找到
    4 q/ T/ A: D1 i8 v1 H/ e1 o3 A
  6. make[3]: *** [3gp.o] 错误 127* s3 q" r1 {9 a5 U7 D" t
  7. make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”
    8 ?& D/ H3 X2 W3 Z5 _  _8 r  D
  8. make[2]: *** [all-recursive] 错误 1
    % D; H* K0 W3 @4 T; |9 r3 P
  9. make[2]: 离开目录“/root/Downloads/faac-1.28/common”& Z9 ]" {6 \& ]0 P; g  X) w# n
  10. make[1]: *** [all-recursive] 错误 1
    * ?* N8 W, Y, L2 r& c
  11. make[1]: 离开目录“/root/Downloads/faac-1.28”0 \/ I7 \% M7 |& V- v) U! _  ~
  12. make: *** [all] 错误 2
复制代码
解决方法9 e) A/ x6 P' m3 p) M' J
  1. yum install -y gcc-c++
复制代码
执行make && make install时报错:
: e2 F# J( n5 j7 K
  1. [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码
解决方法:# X# }7 S6 \* U1 w$ e( K
  1. 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
    ! d3 E: D1 ?5 x% i9 ~" l
  2. 解决方法:
    ! V; [, K! f, f: h1 H
  3. 从123行开始修改此文件mpeg4ip.h,到129行结束。
    7 I, h0 N! w3 |9 S% o
  4. 修改前:
    & z6 _- _+ m* Y0 h1 M  U
  5. #ifdef __cplusplus
    # p' ^. p6 z9 [# l* l) Y) o
  6. extern "C" {
    * T6 Z0 Z9 ]6 d
  7. #endif
    7 ]; z. q! {% B& [& n; _
  8. char *strcasestr(const char *haystack, const char *needle);
    & l2 u5 _/ U! w8 k
  9. #ifdef __cplusplus
    4 P6 q. I9 o" G2 x& ^# a; P* G
  10. }
    : _) H* m7 |% I3 f6 A
  11. #endif
    7 L% u5 w- I  D$ [

  12. & g* V5 n1 U0 F! W- Z9 O3 [) @
  13. 修改后:, n- R" \# ^; R( p8 m8 v
  14. #ifdef __cplusplus0 K& f3 \1 k$ S6 v
  15. extern "C++" {
    # R% O4 O* Z0 j8 k+ q: M) q
  16. #endif1 w1 ?: W  z8 @7 `  j: R
  17. const char *strcasestr(const char *haystack, const char *needle);) @9 x0 Y0 _$ \; {" S
  18. #ifdef __cplusplus! b% r% }1 k" W3 z/ \9 t9 n2 r. T6 f
  19. }+ [; G' V6 z9 L
  20. #endif
复制代码
9.amr-nb8 u7 w: ]& D5 ~9 S2 @
  1. wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2( ]8 r% T1 }, c! W3 u; d; q
  2. tar -jxvf amrnb-11.0.0.0.tar.bz2
    . K9 z+ J7 L+ o# i
  3. cd amrnb-11.0.0.0
    # j8 I( c9 c9 n9 }/ |8 W% ^
  4. ./configure --enable-shared7 x9 s5 S3 K2 d( {$ @
  5. make
    ! m* y5 A( u8 z, M. C, J
  6. make install
复制代码
执行./configure可能遇到的错误:
$ x+ e6 o& ]5 m* g1 e
  1. configure: error: You need patch utility to prepare sources.
复制代码
解决方法:% b0 `% b6 M( G
  1. yum install patch
复制代码
10.amr-wb7 Y5 w; ]% F9 Q9 ]+ i
  1.     wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2
      ]1 `% d3 e$ g  i  s
  2.     tar -jxvf amrwb-11.0.0.0.tar.bz2
    " A4 C, L) S  [* l1 `+ ~& F) _
  3.     cd amrwb-11.0.0.0# w. ]4 r) m( \8 N
  4.     ./configure --enable-shared. X* h+ b1 D5 P
  5.     make $ [$ P* E, N2 s5 x) E% b9 V% J
  6.     make install
复制代码
11.yasm
2 s# K8 B! n3 {/ W: T2 I3 N: |2 e" Gffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。- ^0 {' c( F) M+ @8 r6 E
  1. yum -y install yasm
复制代码
12.ffmpeg
- Y+ P. h7 o) Z: d1 m! M
  1. wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz20 V. Q% g; L) ?2 H  q
  2. tar -jxvf ffmpeg-4.1.3.tar.bz2
    3 r6 Y. |) J( w: W% c
  3. cd ffmpeg-4.1.3
    ' `3 @0 K2 i& m4 d0 E5 Z+ x
  4. #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.7 ]' V8 C+ l3 Q7 y/ [) F3 [; x
  5. #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。
    ) P+ s/ g! y, L& d
  6. ./configure --enable-shared --enable-gpl --enable-libx264
      D0 J# N% v( L
  7. #编译,需要较长时间,10分钟左右。! a- f$ k2 q# `. {
  8. make6 s: |( b) ~6 Q* r& n; E7 C; M
  9. #安装
    # U1 @* [! S) W3 g8 a7 {' ]
  10. make install
    1 _. S4 q9 W- E3 E( a
  11. #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下
    6 H# A1 ^& I# L: y( j& I
  12. echo "/usr/local/lib" >> /etc/ld.so.conf; ^9 p1 j9 [1 [! g
  13. echo "/usr/local/x264/lib" >> /etc/ld.so.conf$ a+ Z0 ]% n/ u4 d2 w5 k/ y
  14. #再执行ldconfig,更新ld.so.cache,使修改生效。) D  \# B9 F! b5 E( k3 r5 b
  15. ldconfig" S0 O& k% S6 E0 x# `0 e
  16. #添加环境变量7 m: v; }" o) Y: V
  17. export PATH=$PATH:/usr/local/lib
    2 p/ D: Q9 z& ?& l8 n$ G: Y
  18. #最后执行ffmpeg -version查看版本。
复制代码
如果执行还会报错则查看下ffmpeg的依赖是否完整:
1 y( q; H3 N) |+ v
  1. ldd /usr/local/bin/ffmpeg
复制代码
a217db0d5cbbb0a2755deecd73dd3080.jpg 4 X! I0 B6 w& d. o4 P& @- }3 Y
如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:2 h0 F6 a' _# B! p  I9 E
  1. #切到编译的目录下
    ! C& X1 _6 l! P
  2. cd ffmpeg-4.1.3
    $ ]0 V$ c+ L  m- F* G
  3. make uninstall
复制代码
13.测试. l- A# m( [5 r
  1.     [root@localhost ~]# ffmpeg -i /root/Videos/111.avi  /root/Videos/1ew2q.mp4
    ' d; `& H1 X3 z. Y. X, d2 T4 |! L
  2.     ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers, a% W# O/ f4 M
  3.       built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)( {5 ?3 v9 g  H
  4.       configuration: --enable-shared8 G9 e3 `# I4 Z# O
  5.       libavutil      56. 22.100 / 56. 22.100
    # ]; w8 U6 v# x! y2 s
  6.       libavcodec     58. 35.100 / 58. 35.100
    / e/ Z- j# }, J5 q. Z
  7.       libavformat    58. 20.100 / 58. 20.100
    5 l. J5 A4 B. M+ Q
  8.       libavdevice    58.  5.100 / 58.  5.100
    5 A) e" l" O) b' Z. c
  9.       libavfilter     7. 40.101 /  7. 40.101
    9 }" d% m. s  j& ^: I5 Q7 I# g
  10.       libswscale      5.  3.100 /  5.  3.100- |& s/ A; e# k8 d2 A. W+ K$ ]- `
  11.       libswresample   3.  3.100 /  3.  3.100
    ; {0 u0 v! \" K3 F8 m. {
  12.     Input #0, avi, from '/root/Videos/111.avi':: T) O0 w" d: j. T8 t
  13.       Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s- t+ \! ?1 b  S. R
  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+ P" ]. ]; G7 I. o9 {, \
  15.         Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
    - [; l3 k# B8 V6 ?
  16.     Stream mapping:
      J0 a+ v5 A  V3 V' U
  17.       Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native)): g) g. d+ Q3 E( S" I7 P
  18.       Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))
      b) s5 L- O6 k3 [' D' ~2 {' Y! y
  19.     Press [q] to stop, [?] for help
    - [& b# a; @2 P' i" B
  20.     Output #0, mp4, to '/root/Videos/1ew2q.mp4':5 P5 C( T  w' `/ Y5 R8 W
  21.       Metadata:
    / S0 }8 [, P' [
  22.         encoder         : Lavf58.20.100
    $ J( J  F1 T( j5 I# e" m# g$ w' J8 @, ?
  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% P  \' g0 y$ t2 b! F
  24.         Metadata:7 e% ]( j, Y6 k* u
  25.           encoder         : Lavc58.35.100 mpeg4
    & u! f7 v# J' d/ R& G  Z
  26.         Side data:/ o& E: n  k1 r& c3 ]8 i  C
  27.           cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1! Z' t8 e0 O# `* j5 u- t3 J0 `+ s
  28.         Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s. p6 h; X8 U9 O, r, s: R% r% T
  29.         Metadata:- \% `, L' ?3 V& r
  30.           encoder         : Lavc58.35.100 aac
    / g; w1 ^9 T9 t( l
  31.     frame=  351 fps=0.0 q=12.3 Lsize=     870kB time=00:00:17.50 bitrate= 407.2kbits/s speed=  20x    + D' w9 J. a$ T) Y  p4 g
  32.     video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%
    % T7 e9 H5 p3 m! j; ]
  33.     [aac @ 0xc51f40] Qavg: 1530.201
复制代码
x264编译的指令如下:
9 Z" G  H5 L0 G* i
  1. ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码
/ f8 d2 ]% N& I* E3 g2 U

% m, m" X' b! ]# `
4 l! r- x9 u1 Y2 [( @% v  x9 R: E8 z2 A3 g* t2 Y
5 U) p$ K  U0 L( P
& i% B; e+ h5 |& d/ C- d! L  j
+ B" i1 l" [2 |/ k/ |

) D5 V2 s* H3 \% Y6 _/ S& B8 Y" p
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2025-2-25 00:35 , Processed in 0.138013 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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