|
|
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本! V2 c8 @3 L2 o* D& c" V& {+ l
装ffmpeg之前需要安装各种解码器。
* Y' p2 G, \+ F* w) d! ~没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。1 E; k: ]9 ~4 ^
1.lame- wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
1 q" `& V0 s' \, i. X% t" T - tar -zxvf lame-3.99.5.tar.gz
- c, g+ C3 o% G3 y; e) d - cd lame-3.99.5
* p4 C. _$ L0 |2 h - ./configure --enable-shared, R1 y, e% k, c% S/ \
- make & m; I( U: S6 ?( A( w
- make install
复制代码 执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH
* ?1 b8 M' P: A' A9 }则需要我们先安装GCC。5 M; h- y& K3 m- B
安装完成后再执行一遍。" i9 `' d/ U4 o5 X
2.libogg- wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz$ C# G% l( j: {# {
- tar -zxvf libogg-1.3.2.tar.gz+ z A# t, Q3 h2 y9 X
- cd libogg-1.3.2$ u+ w* u$ I& u) C1 M, k, M6 W
- ./configure --enable-shared
5 H s3 F% M7 X7 [; t - make # ~# K* X& p8 _+ h' E$ o
- make install
复制代码 3.libvorbis- #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装
1 }0 v S' F, |/ L6 z5 t X& K* @ - wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz: j/ f1 d* u9 w% I
- tar -zxvf libvorbis-1.3.5.tar.gz- |. H3 Y; N0 Q2 o
- cd libvorbis-1.3.5$ m& ^9 E$ G6 d3 B( N D- u5 r
- ./configure --enable-shared' l3 k- E$ d/ n& k' ^3 X* U4 `
- make # m- V( K+ _- u2 m6 C
- make install
复制代码 / W. H! B8 n9 `! u+ G
执行“./configure --enable-shared”如果报以下错误:* {; h) q4 ^) R m. z- n
must have Ogg installed!5 J& Y, M$ Q% j- [
我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。
$ w' K2 p1 N$ j4 C# [解决方案:
' D2 [8 g* n6 T: x0 R2 g, _# ?- [root@localhost ~]#vi /etc/ld.so.conf
4 c0 ?+ W1 u9 x& }! t - include /etc/ld.so.conf.d/*.conf
, b9 \; f1 j5 g! _% J: x - /usr/local/lib0 W, F/ D$ f3 y
- [root@localhost ~]#ldconfig –v
复制代码 4.xvidcore- wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz/ r# F1 E. ?7 f: l9 I8 g% W
- tar -zxvf xvidcore-1.3.2.tar.gz
+ e$ Y b! Z' I( e7 m8 ^- H1 b" p - cd xvidcore/build/generic4 M( f( q, B& C8 T
- ./configure --enable-shared
3 |- ` U# v F+ ?9 F6 L - make
7 u5 K3 r3 v! \& ~! L9 K6 P/ s5 J; y - make install
复制代码 5.x264
- i4 o ]: \3 C* L/ }
, x! P7 p- A: |! y" E, d
; d2 `+ A( A/ s8 Z$ A
libx264需要nasm的支持,nasm是一个编译器的角色。
4 f) Q' X+ u2 i- t. v$ R& Z安装nasm:6 w3 T1 E0 B7 Q8 R3 g( @
- wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
- p o& l! U( Q; D- B! G( t5 }) e( r - tar -xvJf nasm-2.13.03.tar.xz
8 o3 v/ v; k+ O h' ]0 l - cd nasm-2.13.03' y* k1 o, ~( t( f7 G& L2 j
- sed -e '/seg_init/d' \
8 b* k: d) m) x) Q* h - -e 's/pure_func seg_alloc/seg_alloc/' \ N. q" z/ C9 L; U9 T K' F% c
- -i include/nasmlib.h
+ H4 w( l) A* D) Z - ./configure --prefix=/usr &&0 T2 k/ P, V/ d
- make9 [ R* _4 _8 v# j2 |4 J2 t
- make install
复制代码
5 S* h: e! s: w7 J$ j" L# b8 y9 t安装完成后再安装x2645 S( f! E+ I3 D" R: b
- wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2* D* |9 e8 F: O! G6 G; l2 C
- tar -jxvf x264-snapshot-20190402-2245.tar.bz2! a, c( {$ Q/ G
- cd x264-snapshot-20190402-22455 K- S7 F. l5 ?. G z
- ./configure --enable-shared
% z: {% G, Z8 Z1 x1 ]" v - make % b- d* e( E% @* S
- make install
复制代码 6.libdts
7 U- S7 G4 O) |4 n2 |, W; `- wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
3 u; s8 P. Y+ ^: o5 i; v+ E - tar -jxvf libdca-0.0.5.tar.bz2
7 U( {$ s. u5 l - cd libdca-0.0.5+ v$ \% x" b3 l2 I" L' i; R
- ./configure --enable-shared
# v2 |, g4 E* P3 {- x. I+ K5 n - make
- V" {/ L( }$ U% i* j - make install
复制代码 7.faad26 q$ Y& O8 ~) _! r z K* b% k
- wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz$ `, z7 O- L9 W3 ^& T. o; [
- tar -zxvf faad2-2.7.tar.gz
9 y' b" E8 _- F' r: E% Q9 W& \, Y - cd faad2-2.7" W8 u) D+ [: a+ D! \
- ./configure --enable-shared$ n, ]: E! c5 C0 A8 D
- make . O' H8 z2 M% h
- make install
复制代码 8.faac
' ]6 X e; }) ]6 V; F. U8 M6 Z: P- wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz# j& u; T3 k' R, P; I
- tar zxvf faac-1.28.tar.gz
- U6 a* i T5 u; [( V - cd faac-1.28
6 `6 l0 t; o' h& Z6 A; ` - ./bootstrap
3 L% x9 ^6 R$ G2 Z: [( L - ./configure --prefix=/usr/local/ --enable-shared) z. W/ C% \# u
- make && make install
复制代码 执行./bootstrap报错:
, l; _1 T- P( Y* k8 W2 X- [root@localhost faac-1.28]# ./bootstrap
$ e9 y/ V- z/ H4 o& k. u - ./bootstrap:行3: aclocal: 未找到命令
( ^. _% C* x" [6 O1 I' G! V - ./bootstrap:行4: autoheader: 未找到命令* w f* h: C5 M* v( u, Z
- ./bootstrap:行8: libtoolize: 未找到命令 p! }3 Q: q& s `
- ./bootstrap:行10: automake: 未找到命令: u) p' |+ P. [# _. W, Q) E! C( s
- ./bootstrap:行11: autoconf: 未找到命令
复制代码 解决方法:( b4 e0 q! G/ t4 c; R: c5 E
- yum -y install automake0 d. [; g: S5 o, o) Q2 Q
- yum -y install libtool
复制代码 执行make && make install报错:
/ i2 b& [9 {" H/ r. O/ ~ V- make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”
. J* k1 ? c* P Z. V' b! \# c - source='3gp.cpp' object='3gp.o' libtool=no \
% J5 e2 H. l' t1 S( w - DEPDIR=.deps depmode=none /bin/sh ../../depcomp \
1 D' z( Y7 v+ \/ o+ U; H - g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -Wall -c -o 3gp.o 3gp.cpp v9 }$ q" V- q3 X) f
- ../../depcomp: 第 512 行:exec: g++: 未找到
3 e1 f* O$ O* E" F, e3 v! n - make[3]: *** [3gp.o] 错误 127
4 H" I; T$ ^2 A8 U8 [+ m6 Q* G- G1 d6 I - make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”
9 o. t: G9 S+ c$ J d - make[2]: *** [all-recursive] 错误 1
* ^/ o( s; \+ u - make[2]: 离开目录“/root/Downloads/faac-1.28/common”( O1 h3 O! @- K/ ~$ o* S
- make[1]: *** [all-recursive] 错误 17 v @( w4 T+ ~% V
- make[1]: 离开目录“/root/Downloads/faac-1.28”
) m6 i, F0 D3 `# L L - make: *** [all] 错误 2
复制代码 解决方法- p D1 v& r( R9 o/ a2 ]; B
执行make && make install时报错:4 I B* A* A+ ^7 h
- [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码 解决方法:
! O7 k3 S0 H2 J: G1 K- 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
9 D- p- } ^! ^3 C - 解决方法:
& J1 n9 M) U" c5 k - 从123行开始修改此文件mpeg4ip.h,到129行结束。
) e K4 L. k, o5 S - 修改前:0 N" `2 x% e! f5 z+ w
- #ifdef __cplusplus
: v7 k9 |! P" c2 n: ?3 N r" [( ~ - extern "C" {7 z$ j6 Q( v/ \# y4 F1 H* r3 U4 t
- #endif6 U, n3 K: c5 q" c" F- w3 Z
- char *strcasestr(const char *haystack, const char *needle);
) k& @0 Y( _8 u7 { ? - #ifdef __cplusplus
; L& d o% [& O7 v6 G0 h4 x - }
- y8 k6 X; K- }2 Q$ l - #endif
: K% {- g2 x ^! s2 [1 k -
+ H) z8 U$ F* {1 b$ w6 I2 z) }. K- Y - 修改后:
- \7 E1 s- r+ ^& y/ U1 Z( [' u! Q - #ifdef __cplusplus
0 m( w& r. N! M0 J3 m - extern "C++" {
. W) {: Q' O3 e/ L - #endif9 x; h4 }" t6 q8 r" y3 q- ?
- const char *strcasestr(const char *haystack, const char *needle);( t$ |' \+ i2 ]" N2 `9 j
- #ifdef __cplusplus2 y. p* x1 I5 `3 U+ a
- }+ Q$ M9 Q. r) ?& [1 N7 H; t
- #endif
复制代码 9.amr-nb3 c) t1 y; U# ?6 U
- wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2" {" Q4 ~7 T6 m
- tar -jxvf amrnb-11.0.0.0.tar.bz2* F/ U, [9 H" x: a& _; P
- cd amrnb-11.0.0.06 z% q( v; t/ i& Y
- ./configure --enable-shared% n4 G9 A3 V1 R* e: J. P5 \ k5 K
- make
0 u* E! r4 L( w9 n# U - make install
复制代码 执行./configure可能遇到的错误:+ m l. {# [; F6 N; L3 d2 B
- configure: error: You need patch utility to prepare sources.
复制代码 解决方法:
# Y$ z+ R! n( q6 f) l10.amr-wb
( y' v8 F, h, @0 D6 M0 \4 V# v- wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2
9 x/ {+ b3 N( Q- Z8 q- D; M! ^9 g' { - tar -jxvf amrwb-11.0.0.0.tar.bz2- |4 _2 m0 d" G8 w+ X7 {) H- c
- cd amrwb-11.0.0.0
) ~ U Y1 f8 V) Q2 Q# `6 p - ./configure --enable-shared
# `" L1 ~! `, X( o2 ]2 n/ m" b - make
; O! x9 a2 B; l7 N; E) L - make install
复制代码 11.yasm
- G+ ]; `3 ?* L# u- x9 C9 Fffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。
& J0 G6 H( l+ n4 L( F% g4 r12.ffmpeg
5 b: Y. V' Y5 h; p! z( n& U- wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2/ [6 x5 C2 _3 a2 e/ c* @
- tar -jxvf ffmpeg-4.1.3.tar.bz2- n8 l% w& D D9 a6 F
- cd ffmpeg-4.1.3' f* x0 M* b0 W
- #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.% D5 P8 u. y4 z) t
- #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。2 e# Z' e% H) s+ p$ h( A
- ./configure --enable-shared --enable-gpl --enable-libx264
: ~3 B& U& _$ W7 P6 N - #编译,需要较长时间,10分钟左右。
* A; m# R0 y0 e - make* X; b4 I8 T9 @/ Z9 ]0 P
- #安装
2 o( \ k8 D2 _: s5 A) { - make install* G% W" o7 @- n4 s
- #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下5 F' _: g7 g5 \) {
- echo "/usr/local/lib" >> /etc/ld.so.conf2 _$ j. l/ ~' k+ F
- echo "/usr/local/x264/lib" >> /etc/ld.so.conf/ j {* c( {. a/ j8 S# r) J( T
- #再执行ldconfig,更新ld.so.cache,使修改生效。% C b! q* g" ]0 d0 r: I$ I
- ldconfig! S9 g' }. Q: I8 G7 P4 k" P* N, y6 y
- #添加环境变量
2 q; I/ g7 w% _8 d5 Y* x4 V - export PATH=$PATH:/usr/local/lib( g7 k3 P, B) U" ~4 e
- #最后执行ffmpeg -version查看版本。
复制代码 如果执行还会报错则查看下ffmpeg的依赖是否完整:
2 ]" Q; M3 G2 d; l% ]- ldd /usr/local/bin/ffmpeg
复制代码
# D* L# b: D v! d* U如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
. i0 {) Y# c; i- #切到编译的目录下 l7 o) n" c* W7 O! y7 ?
- cd ffmpeg-4.1.37 R4 m7 |6 `1 T( \. k* g
- make uninstall
复制代码 13.测试
' b( x/ O; Z# G, m$ J- [root@localhost ~]# ffmpeg -i /root/Videos/111.avi /root/Videos/1ew2q.mp4
+ G( _; b, Y7 h% G% D+ Z& N - ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
* }3 x1 u* g' D. C0 [; `- [ - built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)
3 g; `$ D; [4 E) Q - configuration: --enable-shared1 b6 D( T5 V& [5 f6 Q
- libavutil 56. 22.100 / 56. 22.100: c" C. U3 I2 W5 {* h. ]7 W) X
- libavcodec 58. 35.100 / 58. 35.100
8 N" v E- ]. T3 I - libavformat 58. 20.100 / 58. 20.1000 T" W% t, b9 u2 `8 ^, |
- libavdevice 58. 5.100 / 58. 5.100, G; Z# x" z. e# W6 h# `' ^ ?
- libavfilter 7. 40.101 / 7. 40.101
' i; Y% I' {- v& l0 d/ x - libswscale 5. 3.100 / 5. 3.1006 D) i( n- q- _
- libswresample 3. 3.100 / 3. 3.100
0 \* e7 \2 X* Q) v+ \4 ` - Input #0, avi, from '/root/Videos/111.avi':9 F- m8 s A3 N6 Q
- Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s- u% s+ S8 n; _4 y
- 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
: u$ D9 z) T5 c3 a( l - Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
3 d Y- I( l6 I2 L - Stream mapping:
2 e) Z* V: X. ~ - Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
6 H" y; y- {5 p5 l. ?, q - Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))8 B/ Z- K7 G! B4 `: U
- Press [q] to stop, [?] for help8 X) d5 `$ c5 h2 A, O
- Output #0, mp4, to '/root/Videos/1ew2q.mp4':8 B$ y% A4 E* o6 @
- Metadata:
- Y, I# a5 {5 |; I* y - encoder : Lavf58.20.100* ?( m7 K: z! [% b4 Z) R8 G% 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 tbc3 }; m4 @7 m+ w" D: v8 v* n3 V
- Metadata:7 H" n" s! r2 x/ ^' I
- encoder : Lavc58.35.100 mpeg4
) ^: w Z, C7 {! `- S - Side data:0 _3 N& F u9 a* b, E* W v) H; q
- cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
" A* Z8 ^# d& f% p$ |0 x/ E% R) Z - Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s( P1 K/ |$ w; l, t4 q b( d
- Metadata:
$ m+ X. O. h) u& R - encoder : Lavc58.35.100 aac; ?* E2 h8 k) {/ Z8 U- E8 t
- frame= 351 fps=0.0 q=12.3 Lsize= 870kB time=00:00:17.50 bitrate= 407.2kbits/s speed= 20x
% O# q& a+ M2 h% G! ~7 |- W8 k - video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%
2 ~- X, D! Y0 K( f6 F4 M - [aac @ 0xc51f40] Qavg: 1530.201
复制代码 x264编译的指令如下:' N u2 b: P( r) x* Q- ?$ L
- ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码
7 _# ]8 p9 M7 R/ s: ?
7 b( q. O. K( E/ ^4 y: O c4 o& F
5 |( _" G5 [% t3 e+ Z
) D o. s0 ^$ J: g( @0 [) X3 f
# R; e5 j6 L$ b$ O1 I- C% ]. ?; x
- k, z8 I8 `" z) p' t4 u I7 D+ ~+ ]
! Q& A. T+ s8 N+ j4 b2 _ |
|