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

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

[复制链接]

991

主题

92

回帖

5万

积分

管理员

积分
55422
发表于 2022-9-14 09:24:18 | 显示全部楼层 |阅读模式
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本
7 N3 {6 L' |( `3 g6 N装ffmpeg之前需要安装各种解码器。6 l! V) b6 [  \4 ]
没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。6 f0 c: E+ [0 A% i3 n
1.lame
  1. wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
    / @2 }; }2 E) n
  2. tar -zxvf lame-3.99.5.tar.gz
    # D+ j8 o$ l# j7 S) Z7 o# f$ b* E4 f
  3. cd lame-3.99.5 ' \. s. C; U- i+ h- j* b
  4. ./configure --enable-shared( ?  d: c1 g% k: h
  5. make 5 r( _6 M' C2 `  W
  6. make install
复制代码
执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH" x2 m' L" f3 A8 x6 T
则需要我们先安装GCC。
5 E6 f' f4 x: D! k# C$ o- ^
  1. yum install gcc
复制代码
安装完成后再执行一遍。  e& p9 d/ m1 |& E) r- A  @/ o
2.libogg
  1. wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz# c5 j0 M# J" }& [2 j. C
  2. tar -zxvf libogg-1.3.2.tar.gz- T8 Z- t# Z, A2 Z, s
  3. cd libogg-1.3.22 J. w/ r8 Y: b; L& B9 s
  4. ./configure --enable-shared
    1 v; {" b, a7 _- r$ ]' e  @) e$ L
  5. make " ]5 W6 [3 h" _# V2 B/ f
  6. make install
复制代码
3.libvorbis
  1. #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装6 X3 ?* N, S, Z& V! }& C% [
  2. wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
    5 P7 |0 N& f/ g& }* y6 Y
  3. tar -zxvf libvorbis-1.3.5.tar.gz3 q/ d8 n8 n  J# G% u
  4. cd  libvorbis-1.3.5
    8 W( T4 z  G7 `3 Q& v$ X
  5. ./configure --enable-shared
    % }" D% q7 X, m- L
  6. make
    6 V4 j8 ]& x' w4 G
  7. make install
复制代码

: }  ?  ]$ M) [0 A! Y9 z) _执行“./configure --enable-shared”如果报以下错误:$ B! m: {7 I8 [( e  [; m& \
must have Ogg installed!, V; J9 h2 l5 t/ N5 O4 d* S5 d
我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。0 ?4 a* G( ~2 z8 b, j
解决方案:
" M* a$ p7 b) Q9 @( m
  1. [root@localhost ~]#vi /etc/ld.so.conf& v: o; {; Q+ u; A
  2. include /etc/ld.so.conf.d/*.conf  
    6 B: q9 ~% X/ z" J" `# B
  3. /usr/local/lib
    1 t' G6 _) E. j; K5 G5 O) y$ s$ `
  4. [root@localhost ~]#ldconfig –v
复制代码
4.xvidcore
  1. wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz4 f" W, m6 F4 `; T. |# o% a" Z5 `
  2. tar -zxvf xvidcore-1.3.2.tar.gz
    + l3 n# p6 i. d5 \  a7 n9 m* p
  3. cd xvidcore/build/generic, l9 J  m1 ]5 g* a
  4. ./configure --enable-shared
    + T6 b" _& F4 o8 {. C5 A  j
  5. make
    & Z& i6 x% u# V0 n! A% |
  6. make install
复制代码
5.x264
; }% q' N  q8 }0 M b0afa659d6bbbc43d1e805c323c28ae2.jpg
( w* N  b3 `' j" d
( ~7 c1 T5 i- V; R4 Q! m' N
libx264需要nasm的支持,nasm是一个编译器的角色。
9 B1 \$ X. i8 F! x. L; ^安装nasm:
3 ~# ~( w& W- ^' M7 Q
  1. wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
    3 k' y7 w$ J: @6 P7 F
  2. tar -xvJf nasm-2.13.03.tar.xz- ~9 u& `" S' h
  3. cd nasm-2.13.03) i9 @1 h6 ~( y) H6 \
  4. sed -e '/seg_init/d' \
      Z4 @; C2 |/ |- n7 G8 N; O
  5. -e 's/pure_func seg_alloc/seg_alloc/' \( m" m; ~# C5 K+ j7 F9 t$ P
  6. -i include/nasmlib.h
    ; l' \/ z, |0 s9 ~
  7. ./configure --prefix=/usr &&
    + Y+ ~. n( P! }: t9 G7 \
  8. make! [7 U+ j. H: H4 F% ?
  9. make install
复制代码
58d7b18423362b6c9f7c732170a0d7df.jpg . p7 ~7 j. F4 t. I/ |
安装完成后再安装x264" ^2 a5 ]1 _; U) h
  1. wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2( m2 Z4 Z! ]" r, X2 M
  2. tar -jxvf x264-snapshot-20190402-2245.tar.bz2
    8 z/ w. Z2 g% `/ r, G
  3. cd x264-snapshot-20190402-22459 I# _6 {. n5 _! w( G
  4. ./configure --enable-shared
    ( \' i* |$ ], Z" ]/ w! E
  5. make
    ; c( y# A; Z! T- u& T) ]+ b
  6. make install
复制代码
6.libdts; D2 S. E- c- ?$ a
  1. wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
    9 G0 N5 z# z* C+ c% p; q0 ]& ~, L
  2. tar -jxvf libdca-0.0.5.tar.bz26 |  R: a, b1 B" {3 i
  3. cd libdca-0.0.56 h% W, s8 p2 [" a$ |( f
  4. ./configure --enable-shared
    ! D8 x4 }7 |  m
  5. make 0 r# h* |6 A! M7 X2 K# h
  6. make install
复制代码
7.faad2# J3 V: u) ]" m/ g
  1. wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
    6 t) ^) B6 A" B/ r& R% F' ^
  2. tar -zxvf faad2-2.7.tar.gz5 O: T* i1 }# ?/ P
  3. cd faad2-2.7
    0 V1 o8 Y) W- Q
  4. ./configure --enable-shared: x5 z" b" i6 I/ r" R6 P
  5. make 9 V# @8 l& S, H
  6. make install
复制代码
8.faac
* S, F3 r: h4 [  E
  1. wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz4 \& s* [* j: C
  2. tar zxvf faac-1.28.tar.gz9 {: O1 _8 n4 I6 N  H! E- Y
  3. cd faac-1.28
    2 O8 T. }& ~8 l0 e0 `
  4. ./bootstrap  S3 F/ u5 g5 J) v% o" j1 h, F
  5. ./configure --prefix=/usr/local/ --enable-shared
    8 |6 f# Z/ ^* e( O
  6. make && make install
复制代码
执行./bootstrap报错:
8 |( ^' f  ~- M
  1. [root@localhost faac-1.28]# ./bootstrap6 x" A' F4 D0 @# q- ^( q! B2 i" l
  2. ./bootstrap:行3: aclocal: 未找到命令
      C( F1 f4 B/ d  d
  3. ./bootstrap:行4: autoheader: 未找到命令( y( [, r" m3 R* i6 ~
  4. ./bootstrap:行8: libtoolize: 未找到命令
    + u* I9 r2 z2 @$ _! a5 E
  5. ./bootstrap:行10: automake: 未找到命令0 X- ^, `% ?5 D( x$ U
  6. ./bootstrap:行11: autoconf: 未找到命令
复制代码
解决方法:
; D: L3 M9 t7 Y7 |( H
  1. yum -y install automake
    ) W# ?( \* n+ G! v. K3 t* E
  2. yum -y install libtool
复制代码
执行make && make install报错:* r# W! v. U+ T) C. W( W" e
  1. make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”
    * t2 p9 }6 T+ G
  2. source='3gp.cpp' object='3gp.o' libtool=no \
    % b7 M6 E) v+ f% e$ m
  3. DEPDIR=.deps depmode=none /bin/sh ../../depcomp \: p, _+ R0 ~0 i
  4. g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include   -Wall  -c -o 3gp.o 3gp.cpp
    : d1 I: h+ ]( T# d" C
  5. ../../depcomp: 第 512 行:exec: g++: 未找到
    0 ]( R5 V, b. I( ?" v, ?4 H5 Y% M
  6. make[3]: *** [3gp.o] 错误 127
    ( T! J  _, m  J# J( r
  7. make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”- K$ y/ D1 p# E
  8. make[2]: *** [all-recursive] 错误 15 y' f! }- F5 q1 q1 Y1 ^: |6 s' I/ K
  9. make[2]: 离开目录“/root/Downloads/faac-1.28/common”
    4 C; Y0 D' ~' \0 Z- R
  10. make[1]: *** [all-recursive] 错误 1
    + a! k, U. S5 x( m. D) t
  11. make[1]: 离开目录“/root/Downloads/faac-1.28”% `8 J' Y# W1 U/ W" H) Z
  12. make: *** [all] 错误 2
复制代码
解决方法( v3 Z; z2 j9 _5 y( d5 b
  1. yum install -y gcc-c++
复制代码
执行make && make install时报错:
) ]$ F9 E) z# l; |3 u2 W1 ]+ c
  1. [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码
解决方法:
$ N& _+ v! j% v8 e- Y- a8 r/ L
  1. 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)9 r. H  c8 K* j* U
  2. 解决方法:
    ( r/ w5 i) [( }: i6 L( f5 J
  3. 从123行开始修改此文件mpeg4ip.h,到129行结束。) g! z9 W: n, M' p+ ^% H2 U
  4. 修改前:
    + H* l  Z( g8 a( a% l; e+ ^; K
  5. #ifdef __cplusplus: M: @! x3 z3 k! t
  6. extern "C" {
    1 F2 T9 d4 }3 \$ h
  7. #endif
    . y! Z3 g. X* _$ ]8 {# D6 Z! V
  8. char *strcasestr(const char *haystack, const char *needle);; E8 m* V0 a! L" p8 c$ y
  9. #ifdef __cplusplus% K3 e) L1 z8 n! ^
  10. }! o0 s, U% M# [, ]( V3 p/ D- W
  11. #endif
    ' X' w! w! F2 x
  12. # T' u3 [8 r, C% N8 [3 r0 d) ~
  13. 修改后:8 ~6 S5 O$ X0 |; ^" p% i" T
  14. #ifdef __cplusplus
    - Z9 f/ Q5 T" _9 `' u- r3 ^2 [3 {
  15. extern "C++" {
    : b; m1 G5 x& x
  16. #endif7 g" c  e0 v$ b  e8 {% Q
  17. const char *strcasestr(const char *haystack, const char *needle);* Y) m) C% j, r7 W. Z
  18. #ifdef __cplusplus
    % L# g9 o; N) D  ~6 N
  19. }
    % C5 a" k# z* N9 d4 Q$ {  s
  20. #endif
复制代码
9.amr-nb( K9 }$ i1 `; L$ ]- U; y7 S3 t8 p; O
  1. wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2
    + x- G. B! ~- ?5 n( D
  2. tar -jxvf amrnb-11.0.0.0.tar.bz2
    : t6 f" X$ j7 w5 L) j6 X
  3. cd amrnb-11.0.0.08 o. L* e( o+ R
  4. ./configure --enable-shared* y2 j4 M+ v3 a5 n& `3 h' _3 _
  5. make
    " o/ I, d& T) ]* f# C% I3 A7 d5 x
  6. make install
复制代码
执行./configure可能遇到的错误:
- D( C4 g' _3 h9 s* v% e, g
  1. configure: error: You need patch utility to prepare sources.
复制代码
解决方法:/ I- r' I$ u" d/ w6 z) u. \2 X
  1. yum install patch
复制代码
10.amr-wb/ m1 ^; A' S2 f. V* V7 N
  1.     wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2- v* P8 H1 u4 j: i
  2.     tar -jxvf amrwb-11.0.0.0.tar.bz2
    . Y5 a, m% J% \, X. ?
  3.     cd amrwb-11.0.0.0/ K  O1 ]& b8 r
  4.     ./configure --enable-shared+ P* q! M; Z3 D7 r
  5.     make . p# ~3 t6 B/ ?: g
  6.     make install
复制代码
11.yasm
- s! E  `2 U* nffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。- Q) f+ r6 X( y. a1 e5 g2 l, P
  1. yum -y install yasm
复制代码
12.ffmpeg
1 z. P6 H! S2 E5 z
  1. wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz24 h5 V" w9 q2 X8 F! `2 y8 i0 g
  2. tar -jxvf ffmpeg-4.1.3.tar.bz2
    " j  w5 H$ {3 z6 ?  W- ~1 I4 O
  3. cd ffmpeg-4.1.3
    2 }9 n' o( a" s$ o7 y
  4. #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.* X9 G+ z8 @' T0 F+ E
  5. #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。
    4 q6 R! E) X! s, L6 u9 p6 U0 W, K
  6. ./configure --enable-shared --enable-gpl --enable-libx264& E" ~. r. w8 ]4 r. A+ v, i9 R
  7. #编译,需要较长时间,10分钟左右。
    # ]8 F8 K0 ~$ w. m) d. o2 T
  8. make
    9 _% i. ?( t3 @% d/ e
  9. #安装
    : f+ v: T/ N; b7 b. O: p, l
  10. make install" ]% r! x% @5 v4 {6 a4 G  X# P# ]9 f
  11. #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下5 K! O* d" ~- y* U4 D
  12. echo "/usr/local/lib" >> /etc/ld.so.conf
    # q! E$ i' H; D- Y- A* Q
  13. echo "/usr/local/x264/lib" >> /etc/ld.so.conf
    8 c1 O8 {5 C( ~" Z& _+ @2 A/ E: L
  14. #再执行ldconfig,更新ld.so.cache,使修改生效。
    5 I$ r$ ?6 h  G3 }. J
  15. ldconfig
    3 o* J3 @: F1 F1 w2 C
  16. #添加环境变量
    7 L8 S5 I- ]& e+ v
  17. export PATH=$PATH:/usr/local/lib
    % y( U6 [1 @& k" L: B
  18. #最后执行ffmpeg -version查看版本。
复制代码
如果执行还会报错则查看下ffmpeg的依赖是否完整:
8 ^/ U! m0 ]. \+ x: `+ I4 r. R; X- a
  1. ldd /usr/local/bin/ffmpeg
复制代码
a217db0d5cbbb0a2755deecd73dd3080.jpg
7 ]" y& e7 ?$ g0 T8 f) R如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
# D9 O7 x" A  C$ j# Z" }
  1. #切到编译的目录下, n9 x3 U* B6 G# ?5 j# A
  2. cd ffmpeg-4.1.3& h& b) Q% g9 Z1 o
  3. make uninstall
复制代码
13.测试
7 R4 U9 {6 r2 Q7 }8 y" D0 I/ }3 x
  1.     [root@localhost ~]# ffmpeg -i /root/Videos/111.avi  /root/Videos/1ew2q.mp4$ ~% s( [) N2 @' g
  2.     ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers2 t) [5 W; d7 ~8 A3 C- p
  3.       built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)- [# B$ F3 _! c  [& U
  4.       configuration: --enable-shared
    ; `! N0 P; E2 d% u1 ]
  5.       libavutil      56. 22.100 / 56. 22.100- n' u+ l" @- T: t% r" m. N/ Y
  6.       libavcodec     58. 35.100 / 58. 35.100
    2 |1 W/ g* i8 O; l) _0 h% p% y
  7.       libavformat    58. 20.100 / 58. 20.100
    " ?9 [) ?! N1 L# b9 F
  8.       libavdevice    58.  5.100 / 58.  5.100
    : y& [" w! ?/ [5 Q: a3 i* ?
  9.       libavfilter     7. 40.101 /  7. 40.101: w7 S/ s3 p9 d# L
  10.       libswscale      5.  3.100 /  5.  3.100
    ! z7 [7 a) c; h7 f2 c' m
  11.       libswresample   3.  3.100 /  3.  3.100
    $ B( J8 J# t) U) j0 O
  12.     Input #0, avi, from '/root/Videos/111.avi':
    . i" A2 u$ ?; M1 r/ K2 S
  13.       Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s9 {: P- p! X1 Z- o' T7 U! q
  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
    8 {" h7 K9 N+ D8 o; f
  15.         Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
    9 I1 n! b4 k$ R" [3 {! V' [
  16.     Stream mapping:
    : v) o( V6 y! w7 c
  17.       Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
    % q6 J! {' w# ]1 t! g/ h
  18.       Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))  e$ U/ I( ]- M# P+ w
  19.     Press [q] to stop, [?] for help
    . u9 L& q8 b6 |: m; @: G
  20.     Output #0, mp4, to '/root/Videos/1ew2q.mp4':2 b5 x6 L! u! p
  21.       Metadata:/ ~& o! d" C' N# U8 M+ W( |
  22.         encoder         : Lavf58.20.100
    9 E. e1 F. V) d7 W) y* p# a
  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 tbc5 p2 z5 A2 c& [8 T  B" D" x
  24.         Metadata:
    % t0 d5 X4 R; L9 F
  25.           encoder         : Lavc58.35.100 mpeg4% K5 W. m: e" q" M$ s$ E
  26.         Side data:
    2 I3 J4 _9 t) W  G8 Z
  27.           cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
    ( X9 y! n, b. \$ }+ d
  28.         Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
    7 y( D- E4 R' W$ i, W
  29.         Metadata:; q2 P9 y, E- R+ Q
  30.           encoder         : Lavc58.35.100 aac  q- b& v% ~) R
  31.     frame=  351 fps=0.0 q=12.3 Lsize=     870kB time=00:00:17.50 bitrate= 407.2kbits/s speed=  20x   
    ( E6 u% l' J2 [3 r: o1 i! p
  32.     video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%
    - P9 a; n" l7 \! u
  33.     [aac @ 0xc51f40] Qavg: 1530.201
复制代码
x264编译的指令如下:
( n# `) S7 A- l9 v, F3 ~
  1. ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码
5 v# x6 D! Z# L

1 t+ l5 X. `3 w* Q" Z  c/ p) j  O. S- Q: n7 W3 X. a7 |& W2 O

! ~& z( r. ^+ f' Z' y! d# i8 E, N' {+ ^  S7 w
! i0 @% s4 v! H1 H( a

- c, g0 l) {- \- t4 ]" I& b# L- Y8 l
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-6-20 05:57 AM , Processed in 0.109604 second(s), 26 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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