|
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本
- r; x" I9 |* d/ P) o- }装ffmpeg之前需要安装各种解码器。
9 I! n8 |, k" V: s. m N( M1 N9 ?没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。
/ ?9 h+ Q' _) v2 |+ y1.lame- wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
' `' u( m, }$ ^, y1 e% G9 B# m5 f( N8 M2 f - tar -zxvf lame-3.99.5.tar.gz# A7 M8 P7 m+ F$ ^7 I% l( p/ x# l
- cd lame-3.99.5 + z* M; y( K) {4 p& a7 d4 H8 F' U
- ./configure --enable-shared. i1 z& f+ b' f8 b4 X% r6 {6 v2 D
- make
+ b' m$ s" {/ q5 s/ ^* B4 X2 ~ - make install
复制代码 执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH
) R' ?$ B t; ]. g) W) \" K0 m# k6 L则需要我们先安装GCC。% x9 ^: b2 ^1 w% d& _4 \
安装完成后再执行一遍。
) Z8 l4 ^- g- S4 |- Q2.libogg- wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
6 d0 n5 p! ` m6 D - tar -zxvf libogg-1.3.2.tar.gz
9 W4 I. t6 _( [) K - cd libogg-1.3.2
0 P7 z5 c9 S B - ./configure --enable-shared
7 r7 z& _( n' `$ w1 R9 n5 G9 C - make ! |# I% ]3 t9 I) R( |2 L9 ?# |
- make install
复制代码 3.libvorbis- #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装
5 V+ e$ }9 |; B+ W& E - wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
" g$ \# d B" H3 o; ~% o, Z5 P - tar -zxvf libvorbis-1.3.5.tar.gz
) J, k4 \; S8 M. O6 \ - cd libvorbis-1.3.5& R, ?, d3 x0 |1 u6 [) }
- ./configure --enable-shared! A. w- C6 x! y
- make % [' ^. S3 @7 v# ` K# X( z4 I' Y
- make install
复制代码
& j/ [1 y, e! D* g4 I执行“./configure --enable-shared”如果报以下错误:" \, W+ m1 B7 [! B
must have Ogg installed!
) d1 c, \" M& G- g我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。
' e% p& m( @+ v7 j: h1 T解决方案: w; y, D1 }$ A% e9 k. X; d1 e5 H0 Y
- [root@localhost ~]#vi /etc/ld.so.conf
9 g0 @1 |6 m- _, j - include /etc/ld.so.conf.d/*.conf
: c. v- n- x) L, U6 T2 J - /usr/local/lib) P1 S, d" {! o' q7 H
- [root@localhost ~]#ldconfig –v
复制代码 4.xvidcore- wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz. \1 Z1 ]2 l0 y0 y B4 T
- tar -zxvf xvidcore-1.3.2.tar.gz 6 R! V% b! M( ]3 S7 J) [! m
- cd xvidcore/build/generic5 q' d8 x% E! X2 Z8 i" I7 X
- ./configure --enable-shared5 J1 E! r3 |1 K7 A9 x, t
- make ; Z( p/ F2 D; W
- make install
复制代码 5.x264
8 P8 O9 R* Y! ], o
5 N2 b. `% a/ l" p6 w6 D
- D1 W( c6 d' H6 Dlibx264需要nasm的支持,nasm是一个编译器的角色。* ]$ k7 x2 C8 v4 B* s3 {
安装nasm:9 ]" F, G0 n# I, {& B/ k6 J
- wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
9 p: S: s6 K* B& l - tar -xvJf nasm-2.13.03.tar.xz9 u z7 B5 ]2 L: G
- cd nasm-2.13.03
5 {# ~& y* x j! I8 x, B0 I - sed -e '/seg_init/d' \3 {3 i9 W, x4 Z1 J, t8 O: e: f N
- -e 's/pure_func seg_alloc/seg_alloc/' \
( D. u9 F8 @* _ - -i include/nasmlib.h
) v) Q- D# U! Q" n% E - ./configure --prefix=/usr &&) R l" h, k, B$ Z5 }- `5 z
- make8 i; p+ u3 q3 d, D( u* @) ~# `; O
- make install
复制代码
0 x; N6 Q' d) a' D* u安装完成后再安装x264$ u( f, [# X! J8 ^7 V; l
- wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2' a9 W* I+ J. \7 k" I ?
- tar -jxvf x264-snapshot-20190402-2245.tar.bz24 d) F& _+ r& e6 C. k% o
- cd x264-snapshot-20190402-2245# i: Q" K7 G5 l; _9 v* M
- ./configure --enable-shared
& }- }$ Q" ~, e, ^5 P# H3 o7 }3 P - make
7 N* B! {4 r6 b k, }! B0 @$ X3 Z - make install
复制代码 6.libdts
2 ], r6 O6 R& A; M9 K- wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
; F5 m: j* H2 L. C* b8 V - tar -jxvf libdca-0.0.5.tar.bz27 I4 k1 i1 F+ [8 ]9 x& `
- cd libdca-0.0.59 \& a- p$ N- `$ {% k4 |; x
- ./configure --enable-shared
) M/ j1 \* ^* m* `/ O, h. Q/ a0 ] - make W) R9 f" L& S8 u
- make install
复制代码 7.faad2
$ P5 K8 Q' o7 ?- Y$ L" e+ U- wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz$ B' e; ~+ j7 W/ @# `
- tar -zxvf faad2-2.7.tar.gz* m6 j$ O% T- f5 l7 { F1 @7 a+ j7 M
- cd faad2-2.7
- k/ b$ [: R+ }' r& @ [) {% ^ l - ./configure --enable-shared
' }; o5 L: `; A) G7 i- {( [ - make
& D5 K$ W; d; u5 ?. ], n B - make install
复制代码 8.faac4 G) B* G; N0 G- g3 n8 i
- wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
% g. H! k: ]: ? - tar zxvf faac-1.28.tar.gz
/ U6 P# e& H$ }4 W; W5 s& [! j - cd faac-1.28
& }; _; L/ d7 I: S) R - ./bootstrap% G8 F k' f7 A+ L+ u8 ^
- ./configure --prefix=/usr/local/ --enable-shared
: ]1 _' P/ O4 @% T - make && make install
复制代码 执行./bootstrap报错:* [2 g, s9 z0 ?
- [root@localhost faac-1.28]# ./bootstrap
; i: d4 z, u; X - ./bootstrap:行3: aclocal: 未找到命令5 w4 d9 }+ O( Y6 {+ t$ O3 Y
- ./bootstrap:行4: autoheader: 未找到命令- z* A. F# Y) Y2 L4 L4 e
- ./bootstrap:行8: libtoolize: 未找到命令
$ Y$ H q5 l7 i/ J - ./bootstrap:行10: automake: 未找到命令2 d0 l0 B& ^# h" C8 o F; }
- ./bootstrap:行11: autoconf: 未找到命令
复制代码 解决方法:' R) v* r, g& {) c
- yum -y install automake
- F Y9 X3 W+ P( X- o - yum -y install libtool
复制代码 执行make && make install报错:" D- K" [: u s! B5 {1 m7 t$ h. z" K
- make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”& G! o: x- q) M! X: P u, f
- source='3gp.cpp' object='3gp.o' libtool=no \
8 s, Z0 ]( g6 {" o4 }( S - DEPDIR=.deps depmode=none /bin/sh ../../depcomp \: |+ E2 [' H3 Y& o' X$ p( \
- g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -Wall -c -o 3gp.o 3gp.cpp T, X* k) G. m& O$ z$ h
- ../../depcomp: 第 512 行:exec: g++: 未找到
4 q/ T/ A: D1 i8 v1 H/ e1 o3 A - make[3]: *** [3gp.o] 错误 127* s3 q" r1 {9 a5 U7 D" t
- make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”
8 ?& D/ H3 X2 W3 Z5 _ _8 r D - make[2]: *** [all-recursive] 错误 1
% D; H* K0 W3 @4 T; |9 r3 P - make[2]: 离开目录“/root/Downloads/faac-1.28/common”& Z9 ]" {6 \& ]0 P; g X) w# n
- make[1]: *** [all-recursive] 错误 1
* ?* N8 W, Y, L2 r& c - make[1]: 离开目录“/root/Downloads/faac-1.28”0 \/ I7 \% M7 |& V- v) U! _ ~
- make: *** [all] 错误 2
复制代码 解决方法9 e) A/ x6 P' m3 p) M' J
执行make && make install时报错:
: e2 F# J( n5 j7 K- [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码 解决方法:# X# }7 S6 \* U1 w$ e( K
- 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
! d3 E: D1 ?5 x% i9 ~" l - 解决方法:
! V; [, K! f, f: h1 H - 从123行开始修改此文件mpeg4ip.h,到129行结束。
7 I, h0 N! w3 |9 S% o - 修改前:
& z6 _- _+ m* Y0 h1 M U - #ifdef __cplusplus
# p' ^. p6 z9 [# l* l) Y) o - extern "C" {
* T6 Z0 Z9 ]6 d - #endif
7 ]; z. q! {% B& [& n; _ - char *strcasestr(const char *haystack, const char *needle);
& l2 u5 _/ U! w8 k - #ifdef __cplusplus
4 P6 q. I9 o" G2 x& ^# a; P* G - }
: _) H* m7 |% I3 f6 A - #endif
7 L% u5 w- I D$ [ -
& g* V5 n1 U0 F! W- Z9 O3 [) @ - 修改后:, n- R" \# ^; R( p8 m8 v
- #ifdef __cplusplus0 K& f3 \1 k$ S6 v
- extern "C++" {
# R% O4 O* Z0 j8 k+ q: M) q - #endif1 w1 ?: W z8 @7 ` j: R
- const char *strcasestr(const char *haystack, const char *needle);) @9 x0 Y0 _$ \; {" S
- #ifdef __cplusplus! b% r% }1 k" W3 z/ \9 t9 n2 r. T6 f
- }+ [; G' V6 z9 L
- #endif
复制代码 9.amr-nb8 u7 w: ]& D5 ~9 S2 @
- wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2( ]8 r% T1 }, c! W3 u; d; q
- tar -jxvf amrnb-11.0.0.0.tar.bz2
. K9 z+ J7 L+ o# i - cd amrnb-11.0.0.0
# j8 I( c9 c9 n9 }/ |8 W% ^ - ./configure --enable-shared7 x9 s5 S3 K2 d( {$ @
- make
! m* y5 A( u8 z, M. C, J - make install
复制代码 执行./configure可能遇到的错误:
$ x+ e6 o& ]5 m* g1 e- configure: error: You need patch utility to prepare sources.
复制代码 解决方法:% b0 `% b6 M( G
10.amr-wb7 Y5 w; ]% F9 Q9 ]+ i
- wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2
]1 `% d3 e$ g i s - tar -jxvf amrwb-11.0.0.0.tar.bz2
" A4 C, L) S [* l1 `+ ~& F) _ - cd amrwb-11.0.0.0# w. ]4 r) m( \8 N
- ./configure --enable-shared. X* h+ b1 D5 P
- make $ [$ P* E, N2 s5 x) E% b9 V% J
- make install
复制代码 11.yasm
2 s# K8 B! n3 {/ W: T2 I3 N: |2 e" Gffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。- ^0 {' c( F) M+ @8 r6 E
12.ffmpeg
- Y+ P. h7 o) Z: d1 m! M- wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz20 V. Q% g; L) ?2 H q
- tar -jxvf ffmpeg-4.1.3.tar.bz2
3 r6 Y. |) J( w: W% c - cd ffmpeg-4.1.3
' `3 @0 K2 i& m4 d0 E5 Z+ x - #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.7 ]' V8 C+ l3 Q7 y/ [) F3 [; x
- #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。
) P+ s/ g! y, L& d - ./configure --enable-shared --enable-gpl --enable-libx264
D0 J# N% v( L - #编译,需要较长时间,10分钟左右。! a- f$ k2 q# `. {
- make6 s: |( b) ~6 Q* r& n; E7 C; M
- #安装
# U1 @* [! S) W3 g8 a7 {' ] - make install
1 _. S4 q9 W- E3 E( a - #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下
6 H# A1 ^& I# L: y( j& I - echo "/usr/local/lib" >> /etc/ld.so.conf; ^9 p1 j9 [1 [! g
- echo "/usr/local/x264/lib" >> /etc/ld.so.conf$ a+ Z0 ]% n/ u4 d2 w5 k/ y
- #再执行ldconfig,更新ld.so.cache,使修改生效。) D \# B9 F! b5 E( k3 r5 b
- ldconfig" S0 O& k% S6 E0 x# `0 e
- #添加环境变量7 m: v; }" o) Y: V
- export PATH=$PATH:/usr/local/lib
2 p/ D: Q9 z& ?& l8 n$ G: Y - #最后执行ffmpeg -version查看版本。
复制代码 如果执行还会报错则查看下ffmpeg的依赖是否完整:
1 y( q; H3 N) |+ v- ldd /usr/local/bin/ffmpeg
复制代码
4 X! I0 B6 w& d. o4 P& @- }3 Y
如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:2 h0 F6 a' _# B! p I9 E
- #切到编译的目录下
! C& X1 _6 l! P - cd ffmpeg-4.1.3
$ ]0 V$ c+ L m- F* G - make uninstall
复制代码 13.测试. l- A# m( [5 r
- [root@localhost ~]# ffmpeg -i /root/Videos/111.avi /root/Videos/1ew2q.mp4
' d; `& H1 X3 z. Y. X, d2 T4 |! L - ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers, a% W# O/ f4 M
- built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)( {5 ?3 v9 g H
- configuration: --enable-shared8 G9 e3 `# I4 Z# O
- libavutil 56. 22.100 / 56. 22.100
# ]; w8 U6 v# x! y2 s - libavcodec 58. 35.100 / 58. 35.100
/ e/ Z- j# }, J5 q. Z - libavformat 58. 20.100 / 58. 20.100
5 l. J5 A4 B. M+ Q - libavdevice 58. 5.100 / 58. 5.100
5 A) e" l" O) b' Z. c - libavfilter 7. 40.101 / 7. 40.101
9 }" d% m. s j& ^: I5 Q7 I# g - libswscale 5. 3.100 / 5. 3.100- |& s/ A; e# k8 d2 A. W+ K$ ]- `
- libswresample 3. 3.100 / 3. 3.100
; {0 u0 v! \" K3 F8 m. { - Input #0, avi, from '/root/Videos/111.avi':: T) O0 w" d: j. T8 t
- Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s- t+ \! ?1 b S. R
- 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+ P" ]. ]; G7 I. o9 {, \
- Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
- [; l3 k# B8 V6 ? - Stream mapping:
J0 a+ v5 A V3 V' U - Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native)): g) g. d+ Q3 E( S" I7 P
- Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))
b) s5 L- O6 k3 [' D' ~2 {' Y! y - Press [q] to stop, [?] for help
- [& b# a; @2 P' i" B - Output #0, mp4, to '/root/Videos/1ew2q.mp4':5 P5 C( T w' `/ Y5 R8 W
- Metadata:
/ S0 }8 [, P' [ - encoder : Lavf58.20.100
$ J( J F1 T( j5 I# e" m# g$ w' J8 @, ? - 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% P \' g0 y$ t2 b! F
- Metadata:7 e% ]( j, Y6 k* u
- encoder : Lavc58.35.100 mpeg4
& u! f7 v# J' d/ R& G Z - Side data:/ o& E: n k1 r& c3 ]8 i C
- cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1! Z' t8 e0 O# `* j5 u- t3 J0 `+ s
- Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s. p6 h; X8 U9 O, r, s: R% r% T
- Metadata:- \% `, L' ?3 V& r
- encoder : Lavc58.35.100 aac
/ g; w1 ^9 T9 t( l - frame= 351 fps=0.0 q=12.3 Lsize= 870kB time=00:00:17.50 bitrate= 407.2kbits/s speed= 20x + D' w9 J. a$ T) Y p4 g
- video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%
% T7 e9 H5 p3 m! j; ] - [aac @ 0xc51f40] Qavg: 1530.201
复制代码 x264编译的指令如下:
9 Z" G H5 L0 G* i- ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码 / f8 d2 ]% N& I* E3 g2 U
% m, m" X' b! ]# `
4 l! r- x9 u1 Y2 [( @% v x9 R: E8 z2 A3 g* t2 Y
5 U) p$ K U0 L( P
& i% B; e+ h5 |& d/ C- d! L j
+ B" i1 l" [2 |/ k/ |
) D5 V2 s* H3 \% Y6 _/ S& B8 Y" p |
|