|
|
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本
7 |& N9 V- c2 P& W. I- \8 N, m装ffmpeg之前需要安装各种解码器。1 ~. y5 g, G, V- t3 @" x
没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。
9 W" U3 o _/ B: U- E1.lame- wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
* W; P5 j) n0 \, k8 r - tar -zxvf lame-3.99.5.tar.gz: ~6 f& j. D0 g8 X
- cd lame-3.99.5
. I0 d# X1 h" G0 D0 ` c+ Z - ./configure --enable-shared
9 `* a' {# Z% A2 a$ C8 Q: E - make # P! \/ w4 P* T' w7 d8 r( m% e
- make install
复制代码 执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH
2 |- d- B1 V6 [ D! m: j7 m; Z1 P/ O则需要我们先安装GCC。1 P0 T! d1 L6 j' P% X( a+ L
安装完成后再执行一遍。
# ?- a9 n& y: t4 B" v2.libogg- wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz) V6 ~' }2 _ T* h
- tar -zxvf libogg-1.3.2.tar.gz, a% o7 W6 @" Z8 u) t3 S& t
- cd libogg-1.3.27 r0 d( B0 H V% C1 t2 h
- ./configure --enable-shared
' o% `7 u" ^$ _& _8 G - make 0 y2 C& P! [! w; s4 B: |$ i+ t
- make install
复制代码 3.libvorbis- #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装
# g r2 u4 {" A, Q& i, } - wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
3 `" r3 @8 [3 I/ X0 t9 ? - tar -zxvf libvorbis-1.3.5.tar.gz2 E9 \8 ]- [3 F
- cd libvorbis-1.3.5 c; K6 K) q f2 u- w |: O$ q
- ./configure --enable-shared/ I! B, s" ?: B7 t" a5 I l. T! l
- make , |- I( d: C- ~% X& N0 Y; D$ i
- make install
复制代码 6 O2 n# t6 D$ u: t# t% `
执行“./configure --enable-shared”如果报以下错误:: U# r% X, b4 X* A$ _! |2 j
must have Ogg installed!
* V& i& @6 h# m& o% h我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。
6 S# s) ?6 v$ M H: N解决方案:
$ b6 B2 G2 H9 Q2 s: M- [root@localhost ~]#vi /etc/ld.so.conf
& z4 T6 T6 A( G - include /etc/ld.so.conf.d/*.conf
/ C o3 N$ Z( n' g6 O3 b - /usr/local/lib
- h1 W. F+ `, N6 ] - [root@localhost ~]#ldconfig –v
复制代码 4.xvidcore- wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz8 W2 [8 o) q, F
- tar -zxvf xvidcore-1.3.2.tar.gz
, I) Y- U+ x1 \+ P - cd xvidcore/build/generic
. W$ t. Y. C! V1 Q - ./configure --enable-shared
: W( B/ ~9 L% v/ ]5 _# X- Q - make
8 x) J! C% L: e# Z2 a2 Z2 g - make install
复制代码 5.x264, }8 h) N) K/ X% m) u* g
4 @6 h: Y" k5 o9 p6 u9 E+ _" T
2 W# }, `. z$ ~/ k
libx264需要nasm的支持,nasm是一个编译器的角色。
' a4 A( \' y+ d+ R- G安装nasm:
7 L$ X; z. E8 N- wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
" T' t) F1 Z$ K7 ^* ^! H - tar -xvJf nasm-2.13.03.tar.xz$ _, [) `5 ~& u: C* [
- cd nasm-2.13.03
' Y1 E+ i1 w6 t' a u8 p - sed -e '/seg_init/d' \3 S i5 O9 B6 L \
- -e 's/pure_func seg_alloc/seg_alloc/' \
/ L6 R! W D; J) @* j. p+ {9 G. [ - -i include/nasmlib.h; V( I7 ]* _! n: K
- ./configure --prefix=/usr &&
* r' c( a- f) J+ E! Q9 L' \/ Z1 n - make+ F& ]) j4 k# o
- make install
复制代码
r8 L2 Z9 y" R4 v; c+ Y安装完成后再安装x264, z' c1 O! l) d/ d' A: R
- wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2/ P5 j# B+ z. K
- tar -jxvf x264-snapshot-20190402-2245.tar.bz2+ O2 e) O) V. ]9 n5 Y2 T& Z7 @* x
- cd x264-snapshot-20190402-2245
- }- P2 F9 v+ a( a; c0 h9 Z8 Y5 S4 d - ./configure --enable-shared
+ x" V" ?8 ~& ~0 F - make
2 M+ L) c; @0 } - make install
复制代码 6.libdts
5 y5 x" V% b. t1 ]8 b& ^" e5 J- wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
& g& S' }( @( p f - tar -jxvf libdca-0.0.5.tar.bz29 e& K7 c' M( t3 }! h' W. A
- cd libdca-0.0.5
: E8 y3 \$ X2 I4 z/ S - ./configure --enable-shared2 q( f' E0 M1 a% b5 M
- make
* s9 t8 ^. `2 g9 i; v9 ]9 q3 [, k - make install
复制代码 7.faad2: ?: w9 G% @4 T0 c" j4 o
- wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
( h2 U; ~% t5 E1 e) Q$ M7 C. [& L - tar -zxvf faad2-2.7.tar.gz
b" E" c1 k( ^8 \, z4 Y8 J - cd faad2-2.7& E O/ Q& R. |) t w. S! M+ M4 |
- ./configure --enable-shared+ G( S% c7 c4 D$ V" S+ w, i4 R
- make " r* C$ b( `0 C f! m( ^* l" u# J( W% ~
- make install
复制代码 8.faac0 O1 \# N! [' ?" {' W
- wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
X9 l$ Y4 q* H$ |! {: Y - tar zxvf faac-1.28.tar.gz# e K# J, c( z! W9 j) H; j0 X
- cd faac-1.28
: u3 J% h% F- _8 @ - ./bootstrap. U, j+ w: A% `1 g1 k1 q# s8 ~: {
- ./configure --prefix=/usr/local/ --enable-shared
2 F% X1 f- V% m1 i7 {9 v" g8 q - make && make install
复制代码 执行./bootstrap报错:
) a5 a7 m% {: B7 B6 L- [root@localhost faac-1.28]# ./bootstrap. F# B4 x2 I7 Z1 ~8 @
- ./bootstrap:行3: aclocal: 未找到命令: Y& Y! \- Y, e/ X4 A- t) |
- ./bootstrap:行4: autoheader: 未找到命令
" P& l5 r. Z; g, a6 i2 F - ./bootstrap:行8: libtoolize: 未找到命令$ P# M# W0 F4 A
- ./bootstrap:行10: automake: 未找到命令
$ k$ `& J4 A' T. j* b$ J% Q/ d - ./bootstrap:行11: autoconf: 未找到命令
复制代码 解决方法:; C: k4 z. N1 c2 G z: p+ u
- yum -y install automake
r u; r$ |3 g% w - yum -y install libtool
复制代码 执行make && make install报错:
& K2 c" B l4 K1 ~3 y" a$ F+ y- make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”3 ~' E3 t0 g, h5 p# C
- source='3gp.cpp' object='3gp.o' libtool=no \+ b& ]9 j7 P# v3 F; t
- DEPDIR=.deps depmode=none /bin/sh ../../depcomp \
( M7 U/ }* w. g, U7 H) J4 \' g - g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -Wall -c -o 3gp.o 3gp.cpp6 D9 x+ Y5 N/ d8 n
- ../../depcomp: 第 512 行:exec: g++: 未找到
* \+ j7 A/ M- I( q) s8 C - make[3]: *** [3gp.o] 错误 127
) Z1 R0 p3 b" s" C' F' x - make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2” H; P* m! M8 D2 _, B
- make[2]: *** [all-recursive] 错误 1% ?" Y# L, [" B" N- h5 s
- make[2]: 离开目录“/root/Downloads/faac-1.28/common”
. Q7 u( q, F7 m E+ O4 Q3 |" I - make[1]: *** [all-recursive] 错误 1
C7 Z: d, G$ F) b# x7 Z: }; s: p) q - make[1]: 离开目录“/root/Downloads/faac-1.28”
" J; d9 b$ k! Z! _5 x - make: *** [all] 错误 2
复制代码 解决方法
0 M# N2 ^* D5 J/ o& A( D9 Z9 z执行make && make install时报错:
4 j/ p& A& @% I% c3 o- ~; o' ~" G- [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码 解决方法:
3 b% \9 _0 i6 T9 q- 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
+ {! M2 ~6 t- P" p - 解决方法:
3 @ d/ U* t- X% g- h - 从123行开始修改此文件mpeg4ip.h,到129行结束。
3 {! Q- c7 |9 M - 修改前:
1 S% X8 \( }" \. Q G - #ifdef __cplusplus
, T9 z0 g! i( [1 h - extern "C" {* i1 e$ M* X$ C' `# _* k8 t+ V9 Z
- #endif
6 a: \0 W, Q* F$ b' `% X2 H; n - char *strcasestr(const char *haystack, const char *needle);
6 `- l. r, {, t i# p - #ifdef __cplusplus; T' A* G+ c& M4 f# ^
- }0 @: Y6 Q3 t* `3 Q' W4 X! K
- #endif' ^, A! X$ S3 a* H. e! Q
-
4 n9 f, Z- Z2 s3 p - 修改后:( V, m% V5 I+ m0 m( O) `5 l
- #ifdef __cplusplus5 |! z/ b6 i( }5 N& n7 Z+ @
- extern "C++" {, e7 F6 y! F# P# R9 o
- #endif
5 o3 [7 P( I/ f- X) V1 N! \ - const char *strcasestr(const char *haystack, const char *needle);; G' [5 [" X: W1 f: ^8 ~6 d% t
- #ifdef __cplusplus4 }4 L$ L. u: w# c! D
- }
$ V% a% j# \2 j - #endif
复制代码 9.amr-nb
. p8 D% p9 m2 j3 o6 `) ^% k9 w- wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2
! l) [! B7 A9 ]+ t - tar -jxvf amrnb-11.0.0.0.tar.bz2
y l+ T5 \& P - cd amrnb-11.0.0.06 @6 e6 ~( o6 w9 m1 H
- ./configure --enable-shared
: ]5 J; @# b9 ~ - make
6 W% D( l# }, E B+ L" F) J' D: _ - make install
复制代码 执行./configure可能遇到的错误:& {, g6 r( l- Y. |; ?! w- L6 S. h
- configure: error: You need patch utility to prepare sources.
复制代码 解决方法:
% A0 S% }" K( R7 H& H8 B10.amr-wb
( K: W# m( o4 ~1 l) U- wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2
6 K' l$ K9 `9 m+ z - tar -jxvf amrwb-11.0.0.0.tar.bz2
2 g5 z8 _# U% I9 C$ D7 T - cd amrwb-11.0.0.0
0 g3 M) e' G6 c- a - ./configure --enable-shared o6 O$ I6 }# d F1 x: `
- make ( s6 Y h& G1 V1 `# |+ G1 y
- make install
复制代码 11.yasm
. @' Y1 D5 @8 h) Y. Zffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。
+ X( g" ^7 _$ s7 Y2 ~; C12.ffmpeg- z* l3 k; W b6 R' r
- wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz28 y; w& H$ _6 e* O. U( S1 L" k# E1 U% H
- tar -jxvf ffmpeg-4.1.3.tar.bz2
% w; r8 h5 @" f% T2 R - cd ffmpeg-4.1.31 s0 \' | w, R3 n' L0 L/ i
- #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.$ p. b+ |/ |& h) V) N
- #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。
! d" N' M0 e( g5 P: _, j% l# y - ./configure --enable-shared --enable-gpl --enable-libx264
% |. [$ Q2 O! Z4 C+ W# Z1 z1 Z - #编译,需要较长时间,10分钟左右。
& V$ \5 P e% P/ s. v/ W* J# P; ` - make' J6 I( [/ e9 f( w
- #安装
. A9 _) g- D, h/ r, p& l' _- ` - make install
' w, }9 R) t' A/ @: K- Z- z - #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下
: {7 z0 H, y4 |: I, z! r& W- G, ?# z4 C - echo "/usr/local/lib" >> /etc/ld.so.conf* i7 A# m' s- z. R
- echo "/usr/local/x264/lib" >> /etc/ld.so.conf2 i3 w4 o2 ?* U' D
- #再执行ldconfig,更新ld.so.cache,使修改生效。
' [6 ^9 V/ J" p! C5 i - ldconfig; X5 a- V& x1 }, Z U) {1 Z
- #添加环境变量* `5 k$ O1 e+ n( o* J
- export PATH=$PATH:/usr/local/lib
/ H& x$ e. E% o" x2 ]! W% z, |: a - #最后执行ffmpeg -version查看版本。
复制代码 如果执行还会报错则查看下ffmpeg的依赖是否完整:
8 h! d( R* v- N0 j) O* _% Q h t3 U- ldd /usr/local/bin/ffmpeg
复制代码
. U0 V8 J Z- e2 ]
如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:& k6 V! D! Y6 w4 ?, ^! o
- #切到编译的目录下
7 i4 a* H3 M3 U6 }5 z6 Q) { - cd ffmpeg-4.1.3
- C6 T4 N$ S; \% {$ E3 Q - make uninstall
复制代码 13.测试
( G* K3 f2 m2 s6 F4 Y- [root@localhost ~]# ffmpeg -i /root/Videos/111.avi /root/Videos/1ew2q.mp4
6 {- H% L7 d m$ w5 g3 o - ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
1 Z5 Y1 }9 }# F: I3 W0 U - built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)) c( z' t1 J6 u1 I6 {, H* k3 ~
- configuration: --enable-shared) Y. D+ W ~- K0 @# l5 X
- libavutil 56. 22.100 / 56. 22.100& J2 Z) f& r$ t; K$ `/ Z2 F
- libavcodec 58. 35.100 / 58. 35.100
' Y# a- g# Z$ o, Y1 q - libavformat 58. 20.100 / 58. 20.1000 ]: {+ n5 \8 h f
- libavdevice 58. 5.100 / 58. 5.100* o7 u* Q9 @% A" m% Q
- libavfilter 7. 40.101 / 7. 40.1019 F P( ^) w, l* U# t
- libswscale 5. 3.100 / 5. 3.100
& ]/ |' q ~* K- r& H9 [# T% ^ - libswresample 3. 3.100 / 3. 3.100( r! Z3 X3 U' g# T
- Input #0, avi, from '/root/Videos/111.avi':0 C) x7 g: ^- _( F4 i( P# k% b
- Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s- f( d, S |1 M% S: C" w7 ]
- 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 tbc5 v! G F5 o0 R8 Z# l; k
- Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
1 z0 P0 z- {% K1 Q9 n; @6 F5 ?$ X - Stream mapping:
, L7 c1 \9 A, Q \- ?( y - Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
7 q! }5 N8 ^8 V- B9 C6 Z8 `2 e - Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))7 C) O7 V' C- T! @
- Press [q] to stop, [?] for help9 f' _' y8 f6 w3 _. R, @5 H3 Z6 f
- Output #0, mp4, to '/root/Videos/1ew2q.mp4':
0 w7 W' K2 z! E/ e+ T- W - Metadata:
' w) Q6 ^" f' K8 }4 o& ] - encoder : Lavf58.20.100. G: t4 v& k- c0 a1 m5 ^; P
- 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- ?- |4 {, R7 B" h1 w" f7 p) D
- Metadata:
% Z5 K+ d" x& r7 ~ - encoder : Lavc58.35.100 mpeg4: B+ T/ X- v6 _$ q7 I' G# E- J
- Side data:% c( S0 F1 y6 W9 X4 X7 O6 \* y
- cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1$ Y6 w4 r0 L6 ]3 h- j
- Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s/ O* w0 O% A8 U, g/ K' B4 j6 [
- Metadata:
2 [3 z0 }! z. G - encoder : Lavc58.35.100 aac, J0 R, [7 [2 f7 l; t
- frame= 351 fps=0.0 q=12.3 Lsize= 870kB time=00:00:17.50 bitrate= 407.2kbits/s speed= 20x ( J1 n# e$ t( E3 b
- video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663% K( E4 F, \1 N+ z' e) X l
- [aac @ 0xc51f40] Qavg: 1530.201
复制代码 x264编译的指令如下:, W) ]. k0 R5 f6 s4 [
- ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码 6 Q% ]* {6 t! K, Q9 f" r
, C4 p" m+ ?) b5 E- O
" E: D& f( f+ k0 P: ?. y7 p
- |3 a) O# F! r$ \" S
) J+ j$ |1 a" C }
9 h9 ] H/ O# O" X# [7 A' Y4 ? {7 u
- X3 D+ F! t$ d R4 i' Q# @8 o) Z7 f0 @4 j0 V
|
|