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

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

[复制链接]
发表于 2022-9-14 09:24:18 | 显示全部楼层 |阅读模式
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本5 s& ?* P% Z; q  L7 F" L& c' z
装ffmpeg之前需要安装各种解码器。8 N& z  p# c, }$ `( g
没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。
* p9 H* r- N6 y# l4 C1.lame
  1. wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
    2 P$ \0 {! M% s; }8 }; w% t) I
  2. tar -zxvf lame-3.99.5.tar.gz- _( |7 l5 m# Q7 z5 _
  3. cd lame-3.99.5 1 s6 e$ o8 z/ _% }
  4. ./configure --enable-shared. @4 z& P$ S/ C. Z
  5. make " w! O- }5 P1 y' A+ y5 G
  6. make install
复制代码
执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH
: b9 W( G3 V( Q则需要我们先安装GCC。
8 D! G5 o) y3 g8 R, Q/ r9 }' p4 D
  1. yum install gcc
复制代码
安装完成后再执行一遍。5 q7 f" k- N- q5 {
2.libogg
  1. wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
    1 f) ~$ i) Y- ]$ S
  2. tar -zxvf libogg-1.3.2.tar.gz! C& _$ _4 B) P) L5 U$ G
  3. cd libogg-1.3.2
    ! o: A% q+ Q0 [1 t# o
  4. ./configure --enable-shared
    " \- W( v  N9 ^5 {/ E3 J: Q6 u
  5. make . S, h5 |( A9 Y+ y3 W- P/ g
  6. make install
复制代码
3.libvorbis
  1. #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装7 P0 n- x* W$ ^
  2. wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
    5 n  O1 v$ u+ F3 K  V. u# c
  3. tar -zxvf libvorbis-1.3.5.tar.gz) V/ j5 M8 v% Y+ h
  4. cd  libvorbis-1.3.5
    & f: Y+ R1 V7 f* V% G
  5. ./configure --enable-shared8 a6 G! z3 k" H2 T* g4 v, \
  6. make 8 c6 {7 U0 |$ a& i. i2 j8 k! \1 {
  7. make install
复制代码
& X% ]* _8 f, E" Q2 b+ L
执行“./configure --enable-shared”如果报以下错误:& H  s; ]- f! a+ [
must have Ogg installed!' M4 P( h% d3 [
我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。7 g. }; a7 ~/ l0 J% B# c2 D
解决方案:
, c" W7 B3 e! P6 D  R% x
  1. [root@localhost ~]#vi /etc/ld.so.conf
    4 ^- |) ^9 _& Y7 ]9 U6 ]
  2. include /etc/ld.so.conf.d/*.conf  
    0 h; j+ g' x. \
  3. /usr/local/lib: \+ ?/ o7 _( k$ s  s5 w* n% v
  4. [root@localhost ~]#ldconfig –v
复制代码
4.xvidcore
  1. wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
    0 m& v$ N% ~* B  ?0 C" j) f4 F
  2. tar -zxvf xvidcore-1.3.2.tar.gz
    ! V6 R7 y+ v' y
  3. cd xvidcore/build/generic: A7 e1 R7 {3 n& G8 m, z6 s) ]: \5 l
  4. ./configure --enable-shared
    5 `+ ?7 U0 H0 f9 K
  5. make % n4 |/ G1 F5 G! {2 a7 J. X
  6. make install
复制代码
5.x264
" }' X5 u0 P& Y b0afa659d6bbbc43d1e805c323c28ae2.jpg ( D9 l) \4 I" c) x3 n
* B# ]: s# m' j1 U$ ?5 j9 ^& _
libx264需要nasm的支持,nasm是一个编译器的角色。9 e0 M# ^' P4 r4 Q+ C3 H3 b8 Y
安装nasm:
5 C5 x# x6 `. X# T$ _
  1. wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz9 |; ?/ \, n2 j% P  Q
  2. tar -xvJf nasm-2.13.03.tar.xz
    ' b% `: ^1 ~- ^; F  X
  3. cd nasm-2.13.03
    " `& Z/ u+ Z) d
  4. sed -e '/seg_init/d' \
    * k7 K6 }9 B9 y5 }! z: h
  5. -e 's/pure_func seg_alloc/seg_alloc/' \3 z- l7 A& d1 t
  6. -i include/nasmlib.h
    : ~. ?& K( v, D" P1 ~( }5 E, w
  7. ./configure --prefix=/usr &&
    . N9 A2 g" e2 a4 P, M/ w
  8. make9 q7 g6 |' r  g1 k, c+ W
  9. make install
复制代码
58d7b18423362b6c9f7c732170a0d7df.jpg
( O6 p+ A1 p' G安装完成后再安装x2649 L3 M8 L) W& U! ^, w1 t
  1. wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2& q! e" f0 Z5 I& p7 W
  2. tar -jxvf x264-snapshot-20190402-2245.tar.bz2
    : I2 \0 [4 r2 G9 o3 y# Y
  3. cd x264-snapshot-20190402-2245
    ! b1 W" z, C; S
  4. ./configure --enable-shared& g' L% D1 r, V8 x" Z$ j
  5. make 0 Q% G0 L7 L3 S2 a- I" @
  6. make install
复制代码
6.libdts% H$ ~( Y% z4 d* y; I% W
  1. wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
    4 ]) C0 K# A9 [
  2. tar -jxvf libdca-0.0.5.tar.bz23 b( P2 [! s2 s! ]& h" [
  3. cd libdca-0.0.5
    & e  k: q/ K7 d( v0 y
  4. ./configure --enable-shared
    ! m5 u$ G& z6 s7 D* t0 r# ^3 ?
  5. make
    - V. j; L+ m3 c# W
  6. make install
复制代码
7.faad2
! N2 U' l& G% U0 G6 ?
  1. wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz& T+ B7 y% d% x9 g
  2. tar -zxvf faad2-2.7.tar.gz* k. {" G- b4 i* U. [
  3. cd faad2-2.7# O2 `  k0 G6 ^7 q2 }' l2 Y3 r
  4. ./configure --enable-shared$ }8 k6 I8 X" d8 o2 E8 a" ^, Q1 j  q
  5. make 0 z# \3 U: G# m
  6. make install
复制代码
8.faac
- q- |( q( I, ^7 M$ f9 V, k- F
  1. wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz# {! h% s0 ^! l4 `: U7 P
  2. tar zxvf faac-1.28.tar.gz
    ! C0 s8 c! p1 `$ `% k
  3. cd faac-1.28
    ( n  I0 H/ @) s2 l- H
  4. ./bootstrap, t* k5 I  X, @) _
  5. ./configure --prefix=/usr/local/ --enable-shared
    + Y0 \6 H, V- l# K
  6. make && make install
复制代码
执行./bootstrap报错:7 X0 M1 j% N) t& v9 G
  1. [root@localhost faac-1.28]# ./bootstrap8 G$ {" o2 H; c/ b; d4 Y
  2. ./bootstrap:行3: aclocal: 未找到命令( T4 N2 S  a4 e+ A; }
  3. ./bootstrap:行4: autoheader: 未找到命令, H# V# ~' g7 ]6 j1 v. q
  4. ./bootstrap:行8: libtoolize: 未找到命令
    2 t! C/ r  s9 e$ g; Y% |
  5. ./bootstrap:行10: automake: 未找到命令
    , }6 C9 U+ q9 ~. J8 ^
  6. ./bootstrap:行11: autoconf: 未找到命令
复制代码
解决方法:
: c. P0 T4 r7 Y* f* D$ n
  1. yum -y install automake. R5 c( ]/ t$ j1 N* t
  2. yum -y install libtool
复制代码
执行make && make install报错:
8 g1 J1 z9 Y% \  }% {2 s
  1. make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”
    . j+ K" U+ R: I* L4 v+ s
  2. source='3gp.cpp' object='3gp.o' libtool=no \
    0 h7 x" Y% \' Y- l1 i
  3. DEPDIR=.deps depmode=none /bin/sh ../../depcomp \
    ; t, S( j* ?2 \/ M" A% s
  4. g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include   -Wall  -c -o 3gp.o 3gp.cpp
    - c  T4 K) h4 T# X+ w* }
  5. ../../depcomp: 第 512 行:exec: g++: 未找到) M7 t' l$ n* w4 \, z6 }  x
  6. make[3]: *** [3gp.o] 错误 127
    " e- z) B* l5 ^- e* m9 b+ o
  7. make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”
    ! ~. v3 z' [, E2 `8 T
  8. make[2]: *** [all-recursive] 错误 1, M9 \# k% u' ]& B
  9. make[2]: 离开目录“/root/Downloads/faac-1.28/common”! ], G- K- P) n" \5 [( x( f1 V
  10. make[1]: *** [all-recursive] 错误 1
    5 S$ k: F) P& \. ?3 \. U
  11. make[1]: 离开目录“/root/Downloads/faac-1.28”
    8 C" E( s" c- k- m
  12. make: *** [all] 错误 2
复制代码
解决方法
# `5 Q9 o8 \+ v( A+ y- U4 D
  1. yum install -y gcc-c++
复制代码
执行make && make install时报错:
2 F# b. M6 d2 {( e1 d
  1. [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码
解决方法:
/ r/ E% F2 H$ C) A
  1. 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)" c( R7 ]8 T1 s; W- G& i9 |% `) Y
  2. 解决方法:
    ' k, P& O( q8 p- m7 c
  3. 从123行开始修改此文件mpeg4ip.h,到129行结束。0 {# M( V" B/ ^/ m9 h  B# j2 K  ?# s
  4. 修改前:3 R, ~" {3 O8 G/ A3 b4 y9 D
  5. #ifdef __cplusplus
    : {0 S6 E/ L+ S9 J( {5 p
  6. extern "C" {$ Q8 B4 e! t) C
  7. #endif
    * @0 V% x4 W! y% j5 Q) r
  8. char *strcasestr(const char *haystack, const char *needle);' i8 C2 c- j; T3 @# _
  9. #ifdef __cplusplus
    ! p5 ^) |8 d& p0 u9 j
  10. }1 P2 ?  V5 S# T  [4 d6 ^
  11. #endif8 v# [% p& U9 Z' j& r4 F
  12. 1 k+ b" N; W1 g6 y  X
  13. 修改后:2 D5 u* z8 M& |+ X# G! n/ C6 t1 v% N  T
  14. #ifdef __cplusplus
    % S. H, U8 l/ i; d3 s2 l" c9 S* N
  15. extern "C++" {" {0 o9 c$ G: r
  16. #endif# v# ?+ y; _" P5 m) Y8 |! {
  17. const char *strcasestr(const char *haystack, const char *needle);% L) s+ i  j' U6 z( t
  18. #ifdef __cplusplus
    6 f- f% ^& G% s! [  ?/ o/ t7 U
  19. }
    1 ^" s+ q2 q# t* L6 L/ X# B2 |
  20. #endif
复制代码
9.amr-nb4 r) I5 b6 _' Z2 B2 @# i; H4 x
  1. wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2
    " L# y1 b( M& `/ k: Z9 L& S+ y
  2. tar -jxvf amrnb-11.0.0.0.tar.bz2) M( \0 F/ P% i: c( v0 `
  3. cd amrnb-11.0.0.0" \0 T1 E1 P8 p) l/ b* L& w7 j0 p
  4. ./configure --enable-shared
    6 i; W* r1 U1 R1 }9 y
  5. make
    - |$ E8 o" q) v6 o$ n
  6. make install
复制代码
执行./configure可能遇到的错误:
' B3 O( e& L9 A" ]/ V
  1. configure: error: You need patch utility to prepare sources.
复制代码
解决方法:
: \, k' j' y3 G5 k3 \( L
  1. yum install patch
复制代码
10.amr-wb
2 o8 B1 T/ u* A8 S" o
  1.     wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2% f/ c+ F! [! p
  2.     tar -jxvf amrwb-11.0.0.0.tar.bz2
    - i# ?7 X! W' R6 n8 {
  3.     cd amrwb-11.0.0.0$ I% P; h  }4 s/ J3 k+ }& j
  4.     ./configure --enable-shared8 ~2 E/ }; p$ _* l6 O! l6 Q
  5.     make 8 E4 I. ^; U' |" |" M2 A1 F
  6.     make install
复制代码
11.yasm& P5 A, ^  i$ c/ W
ffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。
) I4 P% F6 L7 n
  1. yum -y install yasm
复制代码
12.ffmpeg% J* g& t; [6 k1 `
  1. wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2; Y) ?6 k) A$ Z2 H/ w
  2. tar -jxvf ffmpeg-4.1.3.tar.bz2
    $ [; ]! o/ g# l0 \: @/ I
  3. cd ffmpeg-4.1.3
    , w, L& i7 {+ G- Q
  4. #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.
    8 r5 O" {* X3 C9 ?
  5. #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。- b- C' b4 J6 A. q7 G
  6. ./configure --enable-shared --enable-gpl --enable-libx264
    8 Z3 R+ B8 L$ M6 ^; T8 g2 v4 f
  7. #编译,需要较长时间,10分钟左右。
    ( i) ?" [* k& w. `0 ]+ t
  8. make
      E& @, x/ `" Q9 s0 i, h+ [
  9. #安装
    ; L3 s+ m9 l6 ]1 T+ R
  10. make install2 C* M- e: I  g6 K# ?. F
  11. #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下
    , u% w" x. P- R9 E: j& G
  12. echo "/usr/local/lib" >> /etc/ld.so.conf4 {$ V3 u# p  [  M
  13. echo "/usr/local/x264/lib" >> /etc/ld.so.conf
    ! A/ _4 x0 z8 K) K3 b. g; |
  14. #再执行ldconfig,更新ld.so.cache,使修改生效。
    & f' }* l' d7 t6 C0 R: H9 b- D
  15. ldconfig9 @1 c% }  }/ b7 d( \, L- Z
  16. #添加环境变量
    1 a, |' {0 X' ?+ K
  17. export PATH=$PATH:/usr/local/lib
    ) U6 Y2 D" F& C: @
  18. #最后执行ffmpeg -version查看版本。
复制代码
如果执行还会报错则查看下ffmpeg的依赖是否完整:
% V1 G# w+ n7 Z+ c2 @. @
  1. ldd /usr/local/bin/ffmpeg
复制代码
a217db0d5cbbb0a2755deecd73dd3080.jpg
! l3 l( o& q4 y& p$ f9 f) f/ `( T如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
0 A' B. ?' _  c) v$ i
  1. #切到编译的目录下& N# {/ a3 L' X
  2. cd ffmpeg-4.1.36 O* ?- z. g: x" L
  3. make uninstall
复制代码
13.测试
* J/ o3 m. u' S0 j
  1.     [root@localhost ~]# ffmpeg -i /root/Videos/111.avi  /root/Videos/1ew2q.mp4
    0 X' h/ R* E, v$ ]8 x6 E  r2 Z2 f
  2.     ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers5 a1 S, }4 _8 q, f/ l8 K) b
  3.       built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)
    5 @% W8 k  g! l5 a, D
  4.       configuration: --enable-shared
      X* h  l- h8 ~' ?
  5.       libavutil      56. 22.100 / 56. 22.100
    * c: ]9 c4 A! P% w1 ^9 o$ y
  6.       libavcodec     58. 35.100 / 58. 35.100
    - f; Q5 i; W/ c3 _
  7.       libavformat    58. 20.100 / 58. 20.1000 Q2 V$ G. i% l3 {
  8.       libavdevice    58.  5.100 / 58.  5.100
    ' F& _6 `8 p; ^; N; e( K) }7 A
  9.       libavfilter     7. 40.101 /  7. 40.101$ y; h* f, ?# p8 [
  10.       libswscale      5.  3.100 /  5.  3.1003 e- P5 E( i# G9 S
  11.       libswresample   3.  3.100 /  3.  3.100
    ) Q5 Y. |* A2 a6 v, K
  12.     Input #0, avi, from '/root/Videos/111.avi':
    & o! d2 J4 Z/ S8 W$ ^0 H
  13.       Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s
    2 f* K# u4 \+ E; 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
    / q1 z# u' Q) r9 k! E
  15.         Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s, \5 ]7 i9 L. C* [* }( s3 v
  16.     Stream mapping:
    6 P+ a( m. _0 a- P4 l& C; }- ^
  17.       Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native)); R2 B; ~- ~; O. X/ L2 ~, X
  18.       Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))
    3 g+ W; _# O7 E" }
  19.     Press [q] to stop, [?] for help
    ( n, E, ?% x* i. R/ J! M
  20.     Output #0, mp4, to '/root/Videos/1ew2q.mp4':$ H$ N" N; e* |" l2 g8 y& y8 ~
  21.       Metadata:
    . Q: n" L6 }; I2 |7 w5 ^
  22.         encoder         : Lavf58.20.100+ @8 C9 v( e1 E; D
  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 tbc6 i* A. b3 I' I, e, q9 U# Z+ S: M
  24.         Metadata:
    . w5 m0 l0 l0 N, M
  25.           encoder         : Lavc58.35.100 mpeg4
    5 A4 w- l, q/ d6 k* W' v
  26.         Side data:* J" O% s+ \" w7 o+ J5 |' N
  27.           cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
    8 U. v* N, s& M7 W5 K- C2 {
  28.         Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
    ! T5 j0 ]+ o7 }+ M' h
  29.         Metadata:& p$ ^5 V: b. S" q/ P* L
  30.           encoder         : Lavc58.35.100 aac
    : X7 C" J. U; \8 |' A: @% O( s
  31.     frame=  351 fps=0.0 q=12.3 Lsize=     870kB time=00:00:17.50 bitrate= 407.2kbits/s speed=  20x   
    2 J  G  g# W% T4 n4 R7 r
  32.     video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%
    * j6 @' ]4 q0 D
  33.     [aac @ 0xc51f40] Qavg: 1530.201
复制代码
x264编译的指令如下:- M5 A9 v2 d( B7 I+ l
  1. ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码
) e- w3 U: D/ ~5 u( k1 Q9 N

& J: q. p: ]2 I, y
8 o$ V6 g, h8 c/ R! H' f4 t: d" \" O
5 I0 H8 r8 A& t& O; o: @1 v
3 u) o! A8 J* D: u
( M3 I, E9 A; K3 R' |3 y. n$ ?
- E6 L2 ^: b& u, e5 U* _
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-11-3 02:34 AM , Processed in 0.122492 second(s), 26 queries .

Powered by xyh-moon X3.5

© 2001-2026 Discuz! Team.

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