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

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

[复制链接]

986

主题

92

回帖

5万

积分

管理员

积分
55255
发表于 2022-9-14 09:24:18 | 显示全部楼层 |阅读模式
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本
/ f1 S: J! O/ W& r装ffmpeg之前需要安装各种解码器。
- y& F' A9 h7 L+ i& P没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。
( f& O7 J1 U/ x1.lame
  1. wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz& n3 P# e. k& |& y) H+ T
  2. tar -zxvf lame-3.99.5.tar.gz3 a# x' k' X9 z' ~0 [
  3. cd lame-3.99.5 / z6 Q/ J4 X  c* u0 T6 r
  4. ./configure --enable-shared
    7 m2 ]: @5 ], v
  5. make % Z" F7 ]% x4 V% E
  6. make install
复制代码
执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH+ t% t. ]  V9 o
则需要我们先安装GCC。
! C7 \2 d1 u) z  n& {" X, M; W
  1. yum install gcc
复制代码
安装完成后再执行一遍。
: z; L% Z0 m" Z/ d2.libogg
  1. wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz' r7 j/ o& y/ D! e
  2. tar -zxvf libogg-1.3.2.tar.gz
    . f: f& C0 i( k6 [8 G
  3. cd libogg-1.3.2
    ! C& W2 n( Z& m" z! P; t! W  \
  4. ./configure --enable-shared. g- O+ d! g/ U
  5. make 1 X' A. e/ K" J# D. A, Q; N1 G& A
  6. make install
复制代码
3.libvorbis
  1. #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装5 }/ _; m6 s  h% g" H$ X; i- m
  2. wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz" d9 _3 V1 ?% K9 B' d
  3. tar -zxvf libvorbis-1.3.5.tar.gz$ |5 L1 V0 r6 t4 r: L
  4. cd  libvorbis-1.3.5
    9 v0 \9 }6 v8 o$ i& p+ L; z
  5. ./configure --enable-shared; r% Y6 _1 F7 k
  6. make , m% Q; v' M0 y" o8 e
  7. make install
复制代码

) R, s$ N; e$ \' r. S7 Z执行“./configure --enable-shared”如果报以下错误:
7 @2 S' A7 l2 hmust have Ogg installed!2 I7 a, j7 J9 O. I0 ^
我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。! l4 A8 S3 _3 ~2 K2 O. d
解决方案:9 G; y. b$ F& @) k7 J9 ~# p! a
  1. [root@localhost ~]#vi /etc/ld.so.conf( g7 j* }- q3 U1 ?2 v
  2. include /etc/ld.so.conf.d/*.conf  
    : o( E2 u2 R- E
  3. /usr/local/lib
    + t" N2 R+ h! m# k4 W. J
  4. [root@localhost ~]#ldconfig –v
复制代码
4.xvidcore
  1. wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz7 H' U. d" z' N( A, {
  2. tar -zxvf xvidcore-1.3.2.tar.gz ' n6 i. `, z" ~! A4 x
  3. cd xvidcore/build/generic$ b) |0 D9 M+ p; D
  4. ./configure --enable-shared
    4 B& j8 V& e8 f. ?" H% `4 I$ F& u! a
  5. make
    " }; S. @3 I9 K
  6. make install
复制代码
5.x264
3 m/ D+ E! l! o7 m' t b0afa659d6bbbc43d1e805c323c28ae2.jpg , X* [* E) `9 T+ \/ r, t- m/ V) Y

4 N/ X+ X' r& e& ylibx264需要nasm的支持,nasm是一个编译器的角色。9 e8 @$ G6 d5 G$ m6 z. W* m
安装nasm:9 @. `" _+ }$ i
  1. wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
    0 A& ]8 T" S' V4 z$ R/ s0 g% c
  2. tar -xvJf nasm-2.13.03.tar.xz
    ) G3 C- m+ W* t+ ?# k
  3. cd nasm-2.13.03
    $ h, P4 M+ q5 \' y5 A4 Y
  4. sed -e '/seg_init/d' \# z8 w4 X  q( m6 ?
  5. -e 's/pure_func seg_alloc/seg_alloc/' \6 t" ?/ W6 Z  i6 E! I6 N1 V* V
  6. -i include/nasmlib.h
    ' ^, m, n( ?" t( K+ a* _3 I( t( s
  7. ./configure --prefix=/usr &&% S1 \2 w" s- W) k
  8. make7 T8 x3 x1 |1 D6 o- s
  9. make install
复制代码
58d7b18423362b6c9f7c732170a0d7df.jpg ) b& o! O* K) ~, w: i
安装完成后再安装x264
+ W0 W& p8 \) f  s8 r. R0 F% @
  1. wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz23 k3 k8 M9 I. z% _
  2. tar -jxvf x264-snapshot-20190402-2245.tar.bz2$ A5 |8 f! }9 ]; e( g  m
  3. cd x264-snapshot-20190402-2245
    3 G" @8 I: g- a- v- Q2 T0 g
  4. ./configure --enable-shared
    ; l1 X4 j( Q4 {5 P
  5. make / x8 n6 J8 e' ^, Y3 ~. w/ M- A
  6. make install
复制代码
6.libdts$ U8 K: q7 p, M. B
  1. wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
    . {, |( m4 t0 O- P" J
  2. tar -jxvf libdca-0.0.5.tar.bz2
    5 N# v5 R8 S! O* f* t4 Y
  3. cd libdca-0.0.5
    ) j6 {9 G8 y; k8 `. A; P( G
  4. ./configure --enable-shared
      @: ^7 \% s/ T
  5. make , Q. R! R' a) u# i/ a7 Z' j
  6. make install
复制代码
7.faad29 W5 M8 u" i! a
  1. wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
    8 D$ [' \3 P0 K: P7 I! U' |" F9 `
  2. tar -zxvf faad2-2.7.tar.gz  ^, ]( a% v" e- Z0 ?
  3. cd faad2-2.7& G  J, m  b& X& w
  4. ./configure --enable-shared, X' H0 z8 }, v2 l# a" r
  5. make
    ; Z' L/ `# s+ w1 W& F
  6. make install
复制代码
8.faac0 C; z. i: \& }/ Y0 S& \; S# Z" v
  1. wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
    ' q% h( f1 P& c9 t
  2. tar zxvf faac-1.28.tar.gz; Y. s( j: A0 N: }' N$ R; p0 a
  3. cd faac-1.28/ n" W5 o4 O+ u; G8 ?: Z
  4. ./bootstrap0 D; }% `3 V& g, y7 Y; M4 a
  5. ./configure --prefix=/usr/local/ --enable-shared6 Y  p4 x4 [! N1 `. \: g
  6. make && make install
复制代码
执行./bootstrap报错:+ n0 t2 F& i; l1 S$ n" x
  1. [root@localhost faac-1.28]# ./bootstrap
    ; r: v5 [$ _& m" k4 e
  2. ./bootstrap:行3: aclocal: 未找到命令
    8 }& v+ w9 ^, K1 K5 W
  3. ./bootstrap:行4: autoheader: 未找到命令
    * L6 n" f* Q* H4 j' }
  4. ./bootstrap:行8: libtoolize: 未找到命令+ K4 s( E- @. K1 d& f
  5. ./bootstrap:行10: automake: 未找到命令+ W2 ]* q+ q: u: ~) |5 Q' u; g
  6. ./bootstrap:行11: autoconf: 未找到命令
复制代码
解决方法:+ ]& q9 G$ B2 L3 H  `  P; r0 }
  1. yum -y install automake
    * R+ _" y0 t% l. @( |+ B$ e' o
  2. yum -y install libtool
复制代码
执行make && make install报错:
) m$ I! X! o: N0 ]1 W" G4 D$ s
  1. make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”
    2 g  \) S* C: v  k) ^0 @9 {$ T
  2. source='3gp.cpp' object='3gp.o' libtool=no \+ p! O$ e1 U6 t8 H9 L
  3. DEPDIR=.deps depmode=none /bin/sh ../../depcomp \
    8 ]( C% Y: H! m0 t
  4. g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include   -Wall  -c -o 3gp.o 3gp.cpp
    & i8 Y, k' p- ~
  5. ../../depcomp: 第 512 行:exec: g++: 未找到7 h) l, I6 i; b) `
  6. make[3]: *** [3gp.o] 错误 127
    $ z' P9 h/ W; z; a9 a6 j0 O
  7. make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”
    " H. N3 P% l' v# p. c' U$ `
  8. make[2]: *** [all-recursive] 错误 1
    % [9 N+ G$ C. |0 B/ L8 B9 }$ Y% {
  9. make[2]: 离开目录“/root/Downloads/faac-1.28/common”# n7 ^) ~3 K' }
  10. make[1]: *** [all-recursive] 错误 1
      O4 n* d( J6 W
  11. make[1]: 离开目录“/root/Downloads/faac-1.28”( K7 U; b' U8 _8 Q  X+ ~. ^+ Y
  12. make: *** [all] 错误 2
复制代码
解决方法6 W4 N: T& @+ V% T4 _
  1. yum install -y gcc-c++
复制代码
执行make && make install时报错:" b7 u' s- q$ n# B3 e3 {/ N  h
  1. [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码
解决方法:& f) F5 Z2 _7 Q# a; q% Z
  1. 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
    " ^; |& r4 @# @
  2. 解决方法:
    , B+ k7 H$ F+ @7 {- c' h& ?
  3. 从123行开始修改此文件mpeg4ip.h,到129行结束。1 y& @2 v* }- ?! M. \2 u
  4. 修改前:2 N, [  E7 A% _1 t
  5. #ifdef __cplusplus2 F5 C$ p0 w+ R7 X
  6. extern "C" {
    6 X9 c) ?7 c3 D9 P3 Y1 u
  7. #endif; n% h& e; R4 A* z$ r8 C1 ~' O
  8. char *strcasestr(const char *haystack, const char *needle);% P9 r( f$ I% K
  9. #ifdef __cplusplus# ^' y: Z8 d# M4 w7 m" v
  10. }: ~  @9 ]" g. n
  11. #endif
    ! u4 V8 x' X( ~# q- x6 v

  12. : Q6 s6 O7 Y: @% b) X) l& S
  13. 修改后:
    ; A2 F! D3 }% J% I0 M2 f1 W7 J4 ^
  14. #ifdef __cplusplus
    ; R, J8 e2 D1 M0 j
  15. extern "C++" {- G7 p* K) s+ x( R1 U/ O
  16. #endif/ d# F& }2 |# L( D, X6 q; K
  17. const char *strcasestr(const char *haystack, const char *needle);
    3 E) A  w1 o# s: E1 ^% ?
  18. #ifdef __cplusplus
      `5 n+ C1 G, r9 y, ^7 {
  19. }) Z5 T" _$ i3 r' S
  20. #endif
复制代码
9.amr-nb
* l9 M' I4 R6 a# v
  1. wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2; j. ~; s  a/ N  M6 d: Q" _
  2. tar -jxvf amrnb-11.0.0.0.tar.bz2" u: `/ k5 v% R8 N2 n
  3. cd amrnb-11.0.0.0: R: ~$ e% l2 R, J
  4. ./configure --enable-shared' _% q$ I6 b6 l! o. F
  5. make
    / k0 n& R/ I" K/ H7 w3 p
  6. make install
复制代码
执行./configure可能遇到的错误:0 F5 c( w. O) y- Z
  1. configure: error: You need patch utility to prepare sources.
复制代码
解决方法:2 F  N# ]) ?' H7 i
  1. yum install patch
复制代码
10.amr-wb: ~% z2 N% r0 f
  1.     wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2$ v& |- L) c. |# W5 \! f
  2.     tar -jxvf amrwb-11.0.0.0.tar.bz26 O3 {$ Z$ b: D
  3.     cd amrwb-11.0.0.01 ~' D* _1 }  [* ^5 [
  4.     ./configure --enable-shared8 y# n4 v- V: ?4 m
  5.     make
    4 O1 [6 A7 X+ m  l
  6.     make install
复制代码
11.yasm
8 L2 r8 s2 |7 T0 L% q" Dffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。
$ j* B. f! Y" T, V6 S
  1. yum -y install yasm
复制代码
12.ffmpeg
( g( P& ?1 y# O4 a% m$ |
  1. wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz21 k% y, X% t. l, H8 G& i4 u% ^" \
  2. tar -jxvf ffmpeg-4.1.3.tar.bz2
    1 y' o. g4 ^, c3 V0 b  r
  3. cd ffmpeg-4.1.3
    * L# i5 P0 u. P4 y
  4. #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.2 n1 }7 F: l* @) N: e& e
  5. #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。
    ' @, n9 v# G, e* o
  6. ./configure --enable-shared --enable-gpl --enable-libx264
      S/ t6 |9 _' p! r( O
  7. #编译,需要较长时间,10分钟左右。
    3 i& b9 t& y+ O0 p& V7 Q9 @6 u% v
  8. make7 {9 \) Z* y* o. d% U
  9. #安装7 u2 v- Y1 A8 V5 \
  10. make install
    * n7 B3 p! C: u. f& h: X$ d
  11. #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下
    ( V  J( \+ u9 v* _
  12. echo "/usr/local/lib" >> /etc/ld.so.conf. n+ \6 w0 a7 Y: R* w( H2 k% O+ ^7 [
  13. echo "/usr/local/x264/lib" >> /etc/ld.so.conf$ D' n3 ]: r# I: l( G
  14. #再执行ldconfig,更新ld.so.cache,使修改生效。. o) y5 `8 F( ~. v
  15. ldconfig
    ) G% ?8 G& z5 c7 j( n! R6 U
  16. #添加环境变量- d" Y# j! |' F8 K( [; l
  17. export PATH=$PATH:/usr/local/lib
    ) S3 d; |+ v9 q0 T
  18. #最后执行ffmpeg -version查看版本。
复制代码
如果执行还会报错则查看下ffmpeg的依赖是否完整:6 B1 _! P7 K1 G# r
  1. ldd /usr/local/bin/ffmpeg
复制代码
a217db0d5cbbb0a2755deecd73dd3080.jpg
" Q& Y, G5 `7 z: }) Q( \) d如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:  @# r' ^- g/ G! e* H# A
  1. #切到编译的目录下+ F# |1 X' I- Q5 T: M5 i
  2. cd ffmpeg-4.1.3; ?* V" u  O: K& e. ^
  3. make uninstall
复制代码
13.测试7 N: f* h* \: R8 V$ y7 h, ^
  1.     [root@localhost ~]# ffmpeg -i /root/Videos/111.avi  /root/Videos/1ew2q.mp4  L# c; G6 F9 O6 S9 K1 A' ^' |- A
  2.     ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
    + C9 @8 A6 e8 M( }3 w# V/ m
  3.       built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)% {* Z' X9 U7 y+ {8 z8 W1 f
  4.       configuration: --enable-shared5 x, V5 N% R  U) J* ~
  5.       libavutil      56. 22.100 / 56. 22.100
    4 D: w0 {) y( {% b2 P
  6.       libavcodec     58. 35.100 / 58. 35.100
    , V- `- G1 h& V# {# |
  7.       libavformat    58. 20.100 / 58. 20.100
    * P& V3 N, w' |+ ^4 c5 b
  8.       libavdevice    58.  5.100 / 58.  5.1007 ~/ E# a# N" M
  9.       libavfilter     7. 40.101 /  7. 40.101: W! r' T) \1 q; k
  10.       libswscale      5.  3.100 /  5.  3.100
    # i) k$ T8 R* d$ `, P# V- v0 H5 U) h
  11.       libswresample   3.  3.100 /  3.  3.100
    , p0 a& @8 @' r5 u, G. @
  12.     Input #0, avi, from '/root/Videos/111.avi':
    " ?% y3 y8 \7 x/ E
  13.       Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s) L4 s: y: v  e9 J
  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: n3 b8 z# y1 ^+ @  a) ]7 q
  15.         Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s" R+ j+ q, o9 `" ^* o1 T8 S
  16.     Stream mapping:
    ( w" {9 V9 b7 h5 s
  17.       Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))" W2 w- x- v( K8 H7 z2 C3 z
  18.       Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))
    2 C( @2 u' G, Z. F6 m
  19.     Press [q] to stop, [?] for help9 Q# l2 c4 ?0 q( A1 \
  20.     Output #0, mp4, to '/root/Videos/1ew2q.mp4':
    0 W/ N7 C. t2 ]. R: M
  21.       Metadata:& f* P. r* g1 b3 T
  22.         encoder         : Lavf58.20.1008 }! V& f! @6 S7 c2 Z% L3 f7 K
  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
    ! l  t6 J3 ^0 F. V( W2 a( L$ D* X
  24.         Metadata:: C) M" u' ?3 P/ N8 }1 g! y
  25.           encoder         : Lavc58.35.100 mpeg4
    ! |7 H8 l! E, [- Q$ m! H. s' o
  26.         Side data:1 ]9 n1 A" J8 y2 }) C
  27.           cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1$ Y1 ?" e4 d; N5 A
  28.         Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s( o7 l; X0 B# h9 H7 A; R
  29.         Metadata:* O# O& _* Y* {2 N. m/ n
  30.           encoder         : Lavc58.35.100 aac
    ' E7 l. T, w2 C8 \( U: B4 D; |5 S
  31.     frame=  351 fps=0.0 q=12.3 Lsize=     870kB time=00:00:17.50 bitrate= 407.2kbits/s speed=  20x   
    3 c$ \7 \, z* g$ P% y7 C
  32.     video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%
    ) V1 j; v% t- T3 q+ r: W& D* i
  33.     [aac @ 0xc51f40] Qavg: 1530.201
复制代码
x264编译的指令如下:
- {! p1 Q0 h  M- \# E" H
  1. ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码

+ y5 L* G+ D9 W) P2 T
1 O+ E0 M1 o; `2 H3 u6 Z: f& }
& \4 I2 t' k& r- ^8 n
7 U  g. [; j' y: _% Y  [  \; O9 b4 m. R! C, U
3 j# E7 N: o1 u5 Q
( q. h1 Q+ U; k) N; f9 {

* {( K# Y0 x, E2 n' ]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

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

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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