|
|
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本
* i% ?: `1 m/ R4 D; g0 H装ffmpeg之前需要安装各种解码器。+ _) t1 H/ B. k1 {
没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。
, [8 \1 @7 q! m$ z" E( U1.lame- wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
$ E' D" a; m9 U- }# s' ]# X5 ?: Z - tar -zxvf lame-3.99.5.tar.gz- { [- o" M1 F5 d' _7 X. N
- cd lame-3.99.5 + w4 Z6 \& ]( y+ F
- ./configure --enable-shared) M& R O3 f* D- Q
- make $ s& H5 [' R$ L* H6 F* l( O8 q8 J
- make install
复制代码 执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH
; i9 O: T) O9 c3 T则需要我们先安装GCC。
2 m, {9 H) p! _# o! m安装完成后再执行一遍。
! h- T' e) H. o; k7 c9 J2.libogg- wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz$ f, Z3 O; b5 Z
- tar -zxvf libogg-1.3.2.tar.gz
) ~: @& S& \* o, g- k+ [, X7 e - cd libogg-1.3.2! W& C2 q5 ?) ?- F- T, }: k
- ./configure --enable-shared
9 w2 P3 s5 _0 K* ~; L, t - make 9 d5 o$ o, z, E6 X# i( t# E* I
- make install
复制代码 3.libvorbis- #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装+ f% X# K9 c. `; H+ A
- wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz3 S: C3 s/ ]- o( m( _, A
- tar -zxvf libvorbis-1.3.5.tar.gz1 o0 v! @4 M; z k0 t7 }( p
- cd libvorbis-1.3.55 i( u3 x$ D Q8 X5 ?/ ?
- ./configure --enable-shared
. v9 U: s* M' J# U - make
+ Z" ]* b. m& [6 A+ x' ^/ R - make install
复制代码 6 b; X! }! O) p3 L, g" o9 T
执行“./configure --enable-shared”如果报以下错误:5 r" L: Q6 u( L
must have Ogg installed!7 h$ o! ~+ N' I( v
我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。
7 l8 x1 g, c; X3 U; L& X* M4 Q解决方案:" s' H2 L" W0 i3 Q6 C
- [root@localhost ~]#vi /etc/ld.so.conf) w. Z; E) U) m
- include /etc/ld.so.conf.d/*.conf ( N8 X3 W+ Z. }% F
- /usr/local/lib) x* H' ~. X+ F/ b2 b& S- b
- [root@localhost ~]#ldconfig –v
复制代码 4.xvidcore- wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
! N! j/ g" Z6 q- E) p - tar -zxvf xvidcore-1.3.2.tar.gz
2 R6 U& h$ B6 p9 O& }8 z - cd xvidcore/build/generic
4 a. d5 t1 l" C) N* v - ./configure --enable-shared8 c' {' E5 k7 T$ A: E( `
- make - `4 m: Y0 l) ?
- make install
复制代码 5.x264$ G9 f6 I' o6 Z. o. ?3 ^9 y
0 ^: {/ W3 n4 A8 o2 B, ]9 d
4 H! u4 U2 [" ]! P2 y: n
libx264需要nasm的支持,nasm是一个编译器的角色。0 p# x. {- ~# V1 L% Z9 t
安装nasm:; q( z8 T8 u% U1 u- }4 s
- wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz: v! N# i e/ O6 x* F
- tar -xvJf nasm-2.13.03.tar.xz
, y$ U; ^4 P" O - cd nasm-2.13.03
% g" f8 `6 F. S5 G7 B2 D: A - sed -e '/seg_init/d' \
7 G, x: D1 ]2 h - -e 's/pure_func seg_alloc/seg_alloc/' \
. B! k v- p7 h3 s - -i include/nasmlib.h' e' e1 d+ o8 F3 g+ q" Z( ?
- ./configure --prefix=/usr &&
" o9 N" z ~* v1 H7 ^ - make
" t+ ~5 z* b: `; U - make install
复制代码
0 f9 q" g, I- D8 J; p( R
安装完成后再安装x264
% Z8 L+ m2 s+ j9 q' Y- wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2
3 [ c) n- \/ i - tar -jxvf x264-snapshot-20190402-2245.tar.bz2& W% `0 R, e0 c6 ]6 }
- cd x264-snapshot-20190402-2245: Z5 c4 K- W0 f- t6 |3 J1 N6 O
- ./configure --enable-shared/ E6 g t4 u& l& F1 B
- make . K9 D% y; X) o. y+ a2 Z9 [
- make install
复制代码 6.libdts: I, ], h) [( y1 g" @* X; b/ W
- wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
1 t/ }- L' m$ d$ l+ Q# N5 R1 n: l - tar -jxvf libdca-0.0.5.tar.bz2 Q4 H8 F! r# |! s
- cd libdca-0.0.50 N G/ |* c7 ^3 p a
- ./configure --enable-shared- Q6 R2 z- H- n
- make
! z6 ^# i. E+ P0 B8 U+ H7 [/ D - make install
复制代码 7.faad2
, F& Q. _7 A( ]- wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
) {$ H7 M* Y r$ v& B - tar -zxvf faad2-2.7.tar.gz6 j/ D# I4 M' ^( X" U! j6 ?
- cd faad2-2.7
( {3 }2 C" H& H$ F0 [ - ./configure --enable-shared6 j8 s2 h m4 S7 i
- make
: a. }+ L/ I" N9 s! r - make install
复制代码 8.faac
! i/ a* E& ] M# j- wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
, Z9 \. n+ v9 x/ [7 u7 h; j( s$ n- I+ X - tar zxvf faac-1.28.tar.gz. q; d. ], e2 Q% C) a2 K u
- cd faac-1.28: o% ^# g, z$ D
- ./bootstrap
, \4 C; i. Q; y1 s - ./configure --prefix=/usr/local/ --enable-shared9 l7 ?4 _) q4 P5 U/ w* x2 d
- make && make install
复制代码 执行./bootstrap报错:
2 N7 ?6 @% q; }; c. X( W. y- [root@localhost faac-1.28]# ./bootstrap+ L. ^) |4 w' ~( ^- y
- ./bootstrap:行3: aclocal: 未找到命令0 @$ H( l7 |4 |: a& w! f
- ./bootstrap:行4: autoheader: 未找到命令
- Y- X$ P6 l* n! p1 k7 ^3 b: U - ./bootstrap:行8: libtoolize: 未找到命令
0 n' R! b* U. E" u3 z - ./bootstrap:行10: automake: 未找到命令
- q9 a( i! w( U. I+ N - ./bootstrap:行11: autoconf: 未找到命令
复制代码 解决方法:) R8 U8 |' w4 ]: W% x8 j5 }+ Q0 b% O; W
- yum -y install automake* g2 j6 L$ d2 Z9 z+ J) b H; C
- yum -y install libtool
复制代码 执行make && make install报错:
( u9 D9 d1 M8 {9 ^9 E3 f- make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”7 ? A) \( C0 @2 p3 m0 Q
- source='3gp.cpp' object='3gp.o' libtool=no \
! r5 |' n' n: ]" k7 c - DEPDIR=.deps depmode=none /bin/sh ../../depcomp \
" F4 k( W- y1 P1 I - g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -Wall -c -o 3gp.o 3gp.cpp z! w" u, o1 k
- ../../depcomp: 第 512 行:exec: g++: 未找到: z6 {' G) I5 e
- make[3]: *** [3gp.o] 错误 127* W; D: {* n, d
- make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”6 a' C, `5 d+ h* A1 M% ~
- make[2]: *** [all-recursive] 错误 1( b( } ?' j, @( V) H) k4 s8 d
- make[2]: 离开目录“/root/Downloads/faac-1.28/common”8 r* M) K5 H( t! \9 N
- make[1]: *** [all-recursive] 错误 1
: J7 n" [8 ~9 w% F | - make[1]: 离开目录“/root/Downloads/faac-1.28”
" _, s K4 ~" Q1 m - make: *** [all] 错误 2
复制代码 解决方法( \% l0 K" p& l+ Q/ h2 q0 r5 s
执行make && make install时报错:
7 X& e7 W8 `9 I' ?. J2 m- [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码 解决方法: n2 u2 ]9 ?6 w4 V
- 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
" }& n" G( b5 @7 s' F - 解决方法:
$ {% p& K) ~: K7 I - 从123行开始修改此文件mpeg4ip.h,到129行结束。
3 h. T( x7 P' d9 y! k: U% q - 修改前:; G0 w8 u j/ X6 N3 {9 U) u. j' p
- #ifdef __cplusplus6 [1 ~( U3 O( \ C! Y
- extern "C" {6 t2 E9 j, i" x' X: `3 a; Y
- #endif, W$ U( s5 M c" c
- char *strcasestr(const char *haystack, const char *needle);
% `# A( g+ N) Z" f6 C - #ifdef __cplusplus: C. T( W- ~" e) Y5 l
- }, U2 I3 @7 c: n1 [. }& d5 `
- #endif
& O) ?% H, ~( t: B -
) R9 e; x$ K+ q5 {% g$ _! ^- p; L - 修改后:& D+ w* W( @; q
- #ifdef __cplusplus
( C4 a8 e3 ~1 \* j# U6 v - extern "C++" {. a; a& M0 ]7 a6 q' n7 j6 y
- #endif
8 c$ x4 q# T& h" T+ b" g3 y8 m" e0 p& L - const char *strcasestr(const char *haystack, const char *needle);
O' T6 j# X! y" [0 H - #ifdef __cplusplus
2 v4 U- o8 `2 j8 o7 j' ~ - }* f: g/ s- q7 a) {3 D# Y1 k' c
- #endif
复制代码 9.amr-nb* X4 T* Z2 z9 R8 I) r4 m @6 d! S
- wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2( d D% X& n. h/ y1 A
- tar -jxvf amrnb-11.0.0.0.tar.bz2
1 v/ A: b2 D7 }2 G: y, v - cd amrnb-11.0.0.06 \9 h& E, _, A' ?7 R
- ./configure --enable-shared: n6 L- u& j4 K+ M' t
- make
% j/ Q5 g3 @* R$ ?: g' h9 _ - make install
复制代码 执行./configure可能遇到的错误:
: r0 L6 S8 F3 x% n7 P2 Z# V) \- configure: error: You need patch utility to prepare sources.
复制代码 解决方法:* {6 z5 n* u5 j) l8 [! s, o
10.amr-wb: |3 F; {5 N: \- a% e
- wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2% f8 R5 @! D$ ^. }# y
- tar -jxvf amrwb-11.0.0.0.tar.bz2, d, d) Y+ ~# k( L9 c
- cd amrwb-11.0.0.0# M" p& c( ~* e1 G. s
- ./configure --enable-shared
' B* X( {6 ?; O8 Q3 x- u% H! \ - make
* ^! c1 f1 R$ A" k - make install
复制代码 11.yasm
, I3 F7 G. L; M& [/ N& ?1 n2 I2 lffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。
: [, G, h: y) p- x1 e! i1 k1 o2 r12.ffmpeg
: K& _' Y p" b8 n U/ g6 h- wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2
9 M0 o# g1 J4 E' _ - tar -jxvf ffmpeg-4.1.3.tar.bz2
! K8 b3 A9 Q! T - cd ffmpeg-4.1.36 O" u7 ]4 Y: G$ Y* y" T
- #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.
, ^4 q5 j2 i& O$ P' V - #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。7 K' O! o' @. S9 ?+ s
- ./configure --enable-shared --enable-gpl --enable-libx264: h# \, u2 z3 {" ]$ Q6 U) }
- #编译,需要较长时间,10分钟左右。
7 S/ E" l8 Y, L8 F/ l& I6 V - make
* S" H6 M8 {4 Z9 L+ [6 C# W - #安装- Z9 s( o4 g" S, p/ p
- make install
& m% g) v; J$ {4 C! j - #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下1 c9 C" ^5 d6 q5 b* U
- echo "/usr/local/lib" >> /etc/ld.so.conf
6 _- G% ? A: p. M0 w" @5 j. L1 Y5 m. Y - echo "/usr/local/x264/lib" >> /etc/ld.so.conf) J! ?5 Y+ n/ J2 P# K" I
- #再执行ldconfig,更新ld.so.cache,使修改生效。6 U7 s# \$ y* y9 i# Y
- ldconfig' a w) ]4 P: t/ g: Z. y
- #添加环境变量
# K L6 ~4 j7 w- _& t: R9 u - export PATH=$PATH:/usr/local/lib3 i7 h4 n" s2 k: ?
- #最后执行ffmpeg -version查看版本。
复制代码 如果执行还会报错则查看下ffmpeg的依赖是否完整:
, z& `3 M }9 c( {% u- ldd /usr/local/bin/ffmpeg
复制代码
/ g1 _+ F- c7 M
如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
: j. b& _* f; ~. W8 Z- #切到编译的目录下. J3 `& C8 d& u8 n% g' b
- cd ffmpeg-4.1.30 l1 L1 ]8 a# v2 P
- make uninstall
复制代码 13.测试/ l& W' k2 v6 x0 ? T2 L3 _
- [root@localhost ~]# ffmpeg -i /root/Videos/111.avi /root/Videos/1ew2q.mp46 _9 @8 z2 s/ F+ }8 B9 c
- ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
# g1 f+ X: C6 \, V# @/ A |: d5 k8 A' K - built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)4 c" @( n# k# D5 h6 E
- configuration: --enable-shared/ W6 w: _3 o" j
- libavutil 56. 22.100 / 56. 22.100) V1 i3 c2 n* i" L/ t' b
- libavcodec 58. 35.100 / 58. 35.100) [9 J; y! T" e. ?/ [5 T
- libavformat 58. 20.100 / 58. 20.100
/ m+ \) `# B' [4 o7 v0 Y - libavdevice 58. 5.100 / 58. 5.1007 @* t" c9 ~. B* R7 C
- libavfilter 7. 40.101 / 7. 40.101, h5 e' U% a) \" O/ U
- libswscale 5. 3.100 / 5. 3.100
, c6 Y- C, m' b. ?) [$ y; j0 Q - libswresample 3. 3.100 / 3. 3.100
: ~1 ^+ r N& A8 m2 h( w% Z - Input #0, avi, from '/root/Videos/111.avi':
q a6 n) T& O" k8 u6 s% V* d - Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s% g/ A. B/ r8 Z% ]" Q6 v
- 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 tbc6 K7 H. t5 k2 C2 V/ G
- Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
: o" A3 a6 V6 e8 Z - Stream mapping:
8 O% t& K" t- q - Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native)): a3 g" t9 t- b4 D' ^* l5 U! e
- Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))% w9 C- g/ `6 P) B2 b3 p
- Press [q] to stop, [?] for help
% M: S5 I3 v: S3 r - Output #0, mp4, to '/root/Videos/1ew2q.mp4':
1 m% P: N9 _4 `; V1 J - Metadata:
. P; t& A' E; a( S n7 J5 a - encoder : Lavf58.20.100
* L! a7 V4 W' ?; ?3 @ - 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( i; P! n* _- t; G) Z) F
- Metadata:. Y- d4 U; U c3 w, ]5 A
- encoder : Lavc58.35.100 mpeg4/ T0 f9 G3 L% Y2 ~! m' ?- z' O
- Side data:
& N; ^! k7 n% z2 @6 L0 I( a - cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
) \/ ~6 _# Q3 { Z; R2 |( ` - Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
0 B( s: S3 }% U$ p6 ` - Metadata:
9 B$ W0 F0 C$ H4 x& a+ v - encoder : Lavc58.35.100 aac
$ x+ `2 c- M8 I4 A - frame= 351 fps=0.0 q=12.3 Lsize= 870kB time=00:00:17.50 bitrate= 407.2kbits/s speed= 20x
1 L( j. |2 E# V- e+ J - video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%' ]7 t9 d5 S$ ~. o
- [aac @ 0xc51f40] Qavg: 1530.201
复制代码 x264编译的指令如下:9 G# x6 Z6 {1 }' l. r
- ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码
2 a8 Q" l3 i) W1 p; m) N4 A/ g2 H
: p$ a+ o4 G8 ?! g
' O5 }; s3 L7 A V9 h# n2 c0 m; N2 P
# B! f: O7 O, J' l7 i1 L" R
& n% z) x' |1 ]# q& A3 s7 ^- K# l K8 s, s9 m6 \* V: z
! y- W6 ]3 l' w, w5 Q1 p
5 m$ m3 c" z* Z+ v0 z; h4 t |
|