|
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本
8 h7 d# x2 K ?+ ~5 Q装ffmpeg之前需要安装各种解码器。5 ]; g2 G/ r. H. [# H) {% O
没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。
6 d; ]" n0 Y! p% x; r% p1.lame- wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz7 K8 p3 P; [ R' Y, F w
- tar -zxvf lame-3.99.5.tar.gz9 N! D" Z4 {" V8 @
- cd lame-3.99.5 + f7 x* E# @* \6 o6 Z
- ./configure --enable-shared0 }6 D' t G z
- make . y# x, z( a6 {: S0 b
- make install
复制代码 执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH/ H& m) t' S* a2 Z5 ?! [& b6 M M
则需要我们先安装GCC。$ D: r" `. G' Z) x. |
安装完成后再执行一遍。2 s( N8 N% k! Y( j5 L
2.libogg- wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
# @: X& S; B* A/ t - tar -zxvf libogg-1.3.2.tar.gz
) I0 d, k( F' S - cd libogg-1.3.2
9 t5 ^$ R1 W: r7 R* o& K+ t - ./configure --enable-shared/ N3 {0 M8 j! z
- make 9 @% N0 w5 K1 u5 I5 s
- make install
复制代码 3.libvorbis- #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装
" J+ r1 ^5 s3 r+ o& u& x& E0 y' O - wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
! _; @/ K; h! g& V( P - tar -zxvf libvorbis-1.3.5.tar.gz
8 ~# S* m9 m/ R& ? - cd libvorbis-1.3.5 i3 \" ~, Y& k% l( M
- ./configure --enable-shared
; w& S s% g# C! z4 W' e$ P - make
% [0 T& o5 v) P - make install
复制代码
$ r1 p8 e/ |7 j3 X执行“./configure --enable-shared”如果报以下错误:+ @. d8 s9 _2 y2 a
must have Ogg installed!
& Z" F, K3 q! K q: i* P- d我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。
4 W) ]( D4 ^, K解决方案:
3 k1 Z: B2 o' d- [root@localhost ~]#vi /etc/ld.so.conf
2 w% o# F8 W4 O - include /etc/ld.so.conf.d/*.conf
5 ~% a- Z: V8 w4 T* z) G8 I - /usr/local/lib
: d, l. V. r+ |) Y W c - [root@localhost ~]#ldconfig –v
复制代码 4.xvidcore- wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz% P: C1 T4 p; Q4 \+ h" R! j0 R- {
- tar -zxvf xvidcore-1.3.2.tar.gz * ]7 K- A: q4 b i; R4 V2 D4 [# s
- cd xvidcore/build/generic$ `! p& l+ V, |' c! ], n. l
- ./configure --enable-shared
0 b; T' T$ Y; { - make 2 c( w: ^5 G& t5 b
- make install
复制代码 5.x264
7 S: }" w2 p- x9 K' K
' }, r ]# G6 J* p5 ]! R" w
1 @2 x7 f4 [; J7 o. p
libx264需要nasm的支持,nasm是一个编译器的角色。5 | t/ r( X( W( H$ s0 c
安装nasm:
- _5 p/ \. a3 B! V- wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
* d" D2 L0 D- V - tar -xvJf nasm-2.13.03.tar.xz
8 C% U. }5 ~! Z - cd nasm-2.13.03
" u* K0 D9 U& U0 F1 s2 K( a - sed -e '/seg_init/d' \6 Y/ W; \; j% A$ e+ J
- -e 's/pure_func seg_alloc/seg_alloc/' \
) `0 Y& E( Z7 D& v4 V$ A' y7 u, u3 t - -i include/nasmlib.h
7 N; `$ }) k E - ./configure --prefix=/usr &&
: L) n" K8 z) { - make1 U0 Y, `, S2 p
- make install
复制代码
% _5 O4 d: P5 s5 f& u- c: Y# i安装完成后再安装x264
y' J" D3 f7 v( s" ^- wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz24 F5 Q) F5 ?' n. P1 K5 L Z% t3 G
- tar -jxvf x264-snapshot-20190402-2245.tar.bz2
$ W) F$ ?$ {) o& Z9 H9 u" r- y - cd x264-snapshot-20190402-22452 Q% m( }' y q2 C( \/ A
- ./configure --enable-shared l4 [6 o% B. P3 N3 G
- make
8 X3 x5 s E1 x! Z% u# g- b% V - make install
复制代码 6.libdts
e* ?: C3 ]3 n9 B! J) P- wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
4 V! ^+ G9 E# K" h2 T - tar -jxvf libdca-0.0.5.tar.bz2
, `$ @$ J( a$ m - cd libdca-0.0.5# T- R {: K+ W8 {) s
- ./configure --enable-shared0 I! j( _' g' X& E3 e% V
- make / M: `! z3 C, u5 Y# {( k7 i
- make install
复制代码 7.faad2( t2 E" Z; A( A% Z. e& c) D. z, j
- wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
1 d' n" x- l) Q ]9 M, t# h1 c m3 J - tar -zxvf faad2-2.7.tar.gz
# S( v: k4 y q& }3 b7 { - cd faad2-2.7
1 J' C1 I$ ~' x9 k9 \' u; h, W9 a - ./configure --enable-shared
m% \$ g. y6 u" F - make $ K' t6 U3 s' c V+ D: y
- make install
复制代码 8.faac9 }& b" N& D% a/ k% T9 m
- wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
( o0 t3 B8 l5 s) s1 D - tar zxvf faac-1.28.tar.gz
7 m7 S) O7 b& g7 X J - cd faac-1.28
0 ?9 S3 L* l |5 B - ./bootstrap/ c- G7 @+ h1 P/ i4 [1 Z
- ./configure --prefix=/usr/local/ --enable-shared
3 e* P# Q3 @! K- I9 T - make && make install
复制代码 执行./bootstrap报错:: _' n, }% o: d! E5 R
- [root@localhost faac-1.28]# ./bootstrap! m" m4 @- ]# D+ ]. d' n6 R
- ./bootstrap:行3: aclocal: 未找到命令
! r6 X/ Y. S2 N* _: k2 ] - ./bootstrap:行4: autoheader: 未找到命令
1 i/ _2 O6 A6 j - ./bootstrap:行8: libtoolize: 未找到命令
# X( \& _! I% c' P# x - ./bootstrap:行10: automake: 未找到命令
. b" M2 I! J m - ./bootstrap:行11: autoconf: 未找到命令
复制代码 解决方法:
2 v: Q( v% V# n# p, ~2 u' T' Y- yum -y install automake8 r1 E2 {+ z* H/ ?' Y' d
- yum -y install libtool
复制代码 执行make && make install报错:$ |- ^7 @/ Q+ c
- make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”2 L' C% q) i8 |8 Q
- source='3gp.cpp' object='3gp.o' libtool=no \
S) u; S+ {* g - DEPDIR=.deps depmode=none /bin/sh ../../depcomp \# S$ y, [6 S! N, v( P2 I
- g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -Wall -c -o 3gp.o 3gp.cpp
9 v" E4 B( J9 w6 R: ?: O- n - ../../depcomp: 第 512 行:exec: g++: 未找到$ T' T7 Q, I( o0 A# n
- make[3]: *** [3gp.o] 错误 127
8 s1 a8 q8 T; ]( H - make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”
! X0 A! m9 i6 u) k1 j - make[2]: *** [all-recursive] 错误 19 i8 D$ Y2 c0 c+ o1 a9 l2 s
- make[2]: 离开目录“/root/Downloads/faac-1.28/common”
# X' L3 q& N! o! f, a* n - make[1]: *** [all-recursive] 错误 1
& Q- U* G# a, Q3 x N8 k% G - make[1]: 离开目录“/root/Downloads/faac-1.28”! C1 R/ P" L$ q; P! o G p- U
- make: *** [all] 错误 2
复制代码 解决方法
# x# n. \7 L% @; P2 z5 Y执行make && make install时报错:! _: h4 k* `2 V% r; `6 l7 t
- [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码 解决方法:- e# j) ~2 ~( z( G" x$ F
- 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
3 Q/ O2 l3 R% R' a1 p - 解决方法:
2 j3 g0 {6 p! |; S - 从123行开始修改此文件mpeg4ip.h,到129行结束。
4 P& B( j5 C& F2 U. } - 修改前:0 h5 { l% r/ r8 o1 I- ~ R
- #ifdef __cplusplus4 W5 N& ?+ a! E1 g( F8 U% J6 b0 w! u
- extern "C" {* C1 A& j1 |3 @, z0 K# F C" o! m
- #endif
" Y( J; K' x, i5 |: I - char *strcasestr(const char *haystack, const char *needle);
& r D' h( F, `# E - #ifdef __cplusplus
+ b; V K$ g. Z! \/ o* l - }% f6 q" V: D+ c8 k P a s" o
- #endif
, ?6 I0 C( }0 _# [ - 7 H% s- c9 ?- M& `% m
- 修改后:
0 O0 S x. a+ i: Y6 | - #ifdef __cplusplus
; T+ c8 j* B6 _# z# J4 U: c - extern "C++" {0 o9 |: R9 _0 z; ^
- #endif
& c6 S9 k1 h* y/ k. u - const char *strcasestr(const char *haystack, const char *needle);. z7 k5 Q1 g/ [4 j
- #ifdef __cplusplus
3 r5 F! Z" A6 u1 E# z: {) j' q - }* u* w! h. n# \* h* x3 k5 i, N
- #endif
复制代码 9.amr-nb
2 [$ f" L1 t! B( k' \- wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2
- y$ N$ q' q6 T; w. ^: ~; k - tar -jxvf amrnb-11.0.0.0.tar.bz2
) n- J4 `' h' @: C5 A7 d# A8 e7 s4 n - cd amrnb-11.0.0.00 Z# ?4 X! n8 C& A% ]0 S3 W7 v
- ./configure --enable-shared
) D9 b( s" h0 o d - make 5 H/ }1 O+ @2 e# H0 \ u3 A7 ~& ?
- make install
复制代码 执行./configure可能遇到的错误:
( D- S2 }8 r9 j4 e8 R/ U2 c- configure: error: You need patch utility to prepare sources.
复制代码 解决方法:
3 b7 D! I7 X/ A3 [& ~3 s10.amr-wb/ y: u& ^: b9 H: e
- wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2
0 t, G/ s0 P4 V: ^! J) p/ ]: X - tar -jxvf amrwb-11.0.0.0.tar.bz2" o5 h3 u7 \! M% _3 J2 P& X
- cd amrwb-11.0.0.0# n, d& z& j. Y2 W& [" c
- ./configure --enable-shared
: E9 d1 D" L% J- V - make
. _9 \ V5 K4 F1 s# ?5 k. p. I - make install
复制代码 11.yasm/ @ O, S0 G" a3 U Q6 t2 c, i; Z- v
ffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。
4 L/ B3 u) Z0 ~' d- c12.ffmpeg
2 @4 N C9 O" m$ R- wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2
7 z9 C/ `1 m* `3 X. L) G( O, T: C - tar -jxvf ffmpeg-4.1.3.tar.bz2
* `# a3 E: _; g6 z+ t - cd ffmpeg-4.1.3, o* ~8 X+ _- C0 h- f
- #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.
- {% F& x5 k; v: t3 C5 v2 M+ D - #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。
: V% Z/ r2 G2 u8 b! M7 N4 } - ./configure --enable-shared --enable-gpl --enable-libx264+ K7 E, ^% n9 \8 O
- #编译,需要较长时间,10分钟左右。" l- r$ o4 I% m" Y
- make" _4 r" i; h0 a7 i8 |* I2 C, @
- #安装
) A) q; j- z7 l6 S, n5 t - make install1 F8 T* K) T8 p$ c9 o5 l2 K
- #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下5 v& |" j& @7 h
- echo "/usr/local/lib" >> /etc/ld.so.conf+ M% k5 W; u1 E
- echo "/usr/local/x264/lib" >> /etc/ld.so.conf9 y% g; b* L* L6 }4 ?- ]3 J
- #再执行ldconfig,更新ld.so.cache,使修改生效。
1 g! g5 u+ l3 G9 ^+ o - ldconfig7 d- J( u1 w: E
- #添加环境变量
9 s. A" z+ r& }' k8 H - export PATH=$PATH:/usr/local/lib$ N. p: a. Q" `$ o. A; n
- #最后执行ffmpeg -version查看版本。
复制代码 如果执行还会报错则查看下ffmpeg的依赖是否完整:
1 ~( A; u! O6 e- {) t- ldd /usr/local/bin/ffmpeg
复制代码
" g3 ]) F& u L$ l: i% M$ W6 K* b5 Q
如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
# e8 ?' F {$ ^" p" J/ {1 y8 k4 o0 ]- #切到编译的目录下 Y! T% Y; o$ @* |- v# u& q) O
- cd ffmpeg-4.1.3
- M4 C6 q% o' }+ K7 C. `& i) a - make uninstall
复制代码 13.测试
) r( ~# H1 T$ v' ?, ?( w; k G- [root@localhost ~]# ffmpeg -i /root/Videos/111.avi /root/Videos/1ew2q.mp44 e3 I* n( J0 ^: K& K) M( l
- ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
& {: V! c0 Q0 p! |& C8 i' {0 C - built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)& ~, f3 |& H& [$ E2 ~/ Q7 N" A7 c
- configuration: --enable-shared: z* Z3 k) Z* e6 W- \# h
- libavutil 56. 22.100 / 56. 22.100
$ d- U! }) M$ J+ V - libavcodec 58. 35.100 / 58. 35.100
Y' v& B8 U3 _+ u5 I3 p, N+ ^) Q6 ~, A2 y0 H - libavformat 58. 20.100 / 58. 20.100
; K1 K h9 Q& A7 H$ e - libavdevice 58. 5.100 / 58. 5.100+ r' c2 w- d8 d+ d+ g
- libavfilter 7. 40.101 / 7. 40.101
E7 i3 U* [5 G( F - libswscale 5. 3.100 / 5. 3.100
6 d" c2 A5 @: S, _0 i - libswresample 3. 3.100 / 3. 3.100# V! ^# w Y2 I; z ^0 V
- Input #0, avi, from '/root/Videos/111.avi':
8 x+ h% y% q% l - Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s
. \) ?3 N$ o5 C% p$ \8 s - 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
; i- H& c4 t) c - Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
- W9 d5 Z1 R3 S+ K. i& j - Stream mapping:* u8 E' [& k+ r) v1 U
- Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
! c; U8 k" L% @; y [ - Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))# Y. x b8 U O4 s$ p5 |5 J* _
- Press [q] to stop, [?] for help
& N4 Z2 O: X- X - Output #0, mp4, to '/root/Videos/1ew2q.mp4':& f- C+ s0 V' |% t E b
- Metadata:0 O6 _; W: [3 n A" [1 n! l- B
- encoder : Lavf58.20.100. j# X4 h2 k+ g5 C) k6 ^3 C2 H
- 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
, m% {8 \2 e- ^: M - Metadata:$ _" S4 b, ~8 o% Z' i$ p/ O
- encoder : Lavc58.35.100 mpeg4$ D0 w5 R, U! I7 t
- Side data:" K' l& c8 u Q2 b, V
- cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1. O, b5 _) f) O p( \5 Q5 ]
- Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s: _! b4 P0 R9 u; f
- Metadata:# v2 ^7 c/ r; m$ ]3 z* K' K4 \9 H
- encoder : Lavc58.35.100 aac
$ H' _! ]% i6 _9 s1 [2 z - frame= 351 fps=0.0 q=12.3 Lsize= 870kB time=00:00:17.50 bitrate= 407.2kbits/s speed= 20x
/ Y1 X8 |2 i& ^* u - video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%* T9 C! z; |( b2 G6 }
- [aac @ 0xc51f40] Qavg: 1530.201
复制代码 x264编译的指令如下:6 f$ A& V5 u& J( l4 Q. f
- ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码 2 i6 t) y7 d- u) S$ ^' ^, |8 M
% T7 R5 D* H0 \, F3 g7 U# l. H0 b
$ b+ x Y) @# ~ t& {& _8 t: v. U6 Y8 z3 O9 E1 {$ h
2 {. h" N/ p9 Y
' W$ J; y1 h" F- A4 Y B6 x6 L9 t& S+ S, O; @( v
, Y9 |7 d" e; ~ Q7 J/ b+ c. p
|
|