|
|
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本
7 N3 {6 L' |( `3 g6 N装ffmpeg之前需要安装各种解码器。6 l! V) b6 [ \4 ]
没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。6 f0 c: E+ [0 A% i3 n
1.lame- wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
/ @2 }; }2 E) n - tar -zxvf lame-3.99.5.tar.gz
# D+ j8 o$ l# j7 S) Z7 o# f$ b* E4 f - cd lame-3.99.5 ' \. s. C; U- i+ h- j* b
- ./configure --enable-shared( ? d: c1 g% k: h
- make 5 r( _6 M' C2 ` W
- make install
复制代码 执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH" x2 m' L" f3 A8 x6 T
则需要我们先安装GCC。
5 E6 f' f4 x: D! k# C$ o- ^安装完成后再执行一遍。 e& p9 d/ m1 |& E) r- A @/ o
2.libogg- wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz# c5 j0 M# J" }& [2 j. C
- tar -zxvf libogg-1.3.2.tar.gz- T8 Z- t# Z, A2 Z, s
- cd libogg-1.3.22 J. w/ r8 Y: b; L& B9 s
- ./configure --enable-shared
1 v; {" b, a7 _- r$ ]' e @) e$ L - make " ]5 W6 [3 h" _# V2 B/ f
- make install
复制代码 3.libvorbis- #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装6 X3 ?* N, S, Z& V! }& C% [
- wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
5 P7 |0 N& f/ g& }* y6 Y - tar -zxvf libvorbis-1.3.5.tar.gz3 q/ d8 n8 n J# G% u
- cd libvorbis-1.3.5
8 W( T4 z G7 `3 Q& v$ X - ./configure --enable-shared
% }" D% q7 X, m- L - make
6 V4 j8 ]& x' w4 G - make install
复制代码
: } ? ]$ M) [0 A! Y9 z) _执行“./configure --enable-shared”如果报以下错误:$ B! m: {7 I8 [( e [; m& \
must have Ogg installed!, V; J9 h2 l5 t/ N5 O4 d* S5 d
我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。0 ?4 a* G( ~2 z8 b, j
解决方案:
" M* a$ p7 b) Q9 @( m- [root@localhost ~]#vi /etc/ld.so.conf& v: o; {; Q+ u; A
- include /etc/ld.so.conf.d/*.conf
6 B: q9 ~% X/ z" J" `# B - /usr/local/lib
1 t' G6 _) E. j; K5 G5 O) y$ s$ ` - [root@localhost ~]#ldconfig –v
复制代码 4.xvidcore- wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz4 f" W, m6 F4 `; T. |# o% a" Z5 `
- tar -zxvf xvidcore-1.3.2.tar.gz
+ l3 n# p6 i. d5 \ a7 n9 m* p - cd xvidcore/build/generic, l9 J m1 ]5 g* a
- ./configure --enable-shared
+ T6 b" _& F4 o8 {. C5 A j - make
& Z& i6 x% u# V0 n! A% | - make install
复制代码 5.x264
; }% q' N q8 }0 M
( w* N b3 `' j" d( ~7 c1 T5 i- V; R4 Q! m' N
libx264需要nasm的支持,nasm是一个编译器的角色。
9 B1 \$ X. i8 F! x. L; ^安装nasm:
3 ~# ~( w& W- ^' M7 Q- wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
3 k' y7 w$ J: @6 P7 F - tar -xvJf nasm-2.13.03.tar.xz- ~9 u& `" S' h
- cd nasm-2.13.03) i9 @1 h6 ~( y) H6 \
- sed -e '/seg_init/d' \
Z4 @; C2 |/ |- n7 G8 N; O - -e 's/pure_func seg_alloc/seg_alloc/' \( m" m; ~# C5 K+ j7 F9 t$ P
- -i include/nasmlib.h
; l' \/ z, |0 s9 ~ - ./configure --prefix=/usr &&
+ Y+ ~. n( P! }: t9 G7 \ - make! [7 U+ j. H: H4 F% ?
- make install
复制代码
. p7 ~7 j. F4 t. I/ |
安装完成后再安装x264" ^2 a5 ]1 _; U) h
- wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2( m2 Z4 Z! ]" r, X2 M
- tar -jxvf x264-snapshot-20190402-2245.tar.bz2
8 z/ w. Z2 g% `/ r, G - cd x264-snapshot-20190402-22459 I# _6 {. n5 _! w( G
- ./configure --enable-shared
( \' i* |$ ], Z" ]/ w! E - make
; c( y# A; Z! T- u& T) ]+ b - make install
复制代码 6.libdts; D2 S. E- c- ?$ a
- wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
9 G0 N5 z# z* C+ c% p; q0 ]& ~, L - tar -jxvf libdca-0.0.5.tar.bz26 | R: a, b1 B" {3 i
- cd libdca-0.0.56 h% W, s8 p2 [" a$ |( f
- ./configure --enable-shared
! D8 x4 }7 | m - make 0 r# h* |6 A! M7 X2 K# h
- make install
复制代码 7.faad2# J3 V: u) ]" m/ g
- wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
6 t) ^) B6 A" B/ r& R% F' ^ - tar -zxvf faad2-2.7.tar.gz5 O: T* i1 }# ?/ P
- cd faad2-2.7
0 V1 o8 Y) W- Q - ./configure --enable-shared: x5 z" b" i6 I/ r" R6 P
- make 9 V# @8 l& S, H
- make install
复制代码 8.faac
* S, F3 r: h4 [ E- wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz4 \& s* [* j: C
- tar zxvf faac-1.28.tar.gz9 {: O1 _8 n4 I6 N H! E- Y
- cd faac-1.28
2 O8 T. }& ~8 l0 e0 ` - ./bootstrap S3 F/ u5 g5 J) v% o" j1 h, F
- ./configure --prefix=/usr/local/ --enable-shared
8 |6 f# Z/ ^* e( O - make && make install
复制代码 执行./bootstrap报错:
8 |( ^' f ~- M- [root@localhost faac-1.28]# ./bootstrap6 x" A' F4 D0 @# q- ^( q! B2 i" l
- ./bootstrap:行3: aclocal: 未找到命令
C( F1 f4 B/ d d - ./bootstrap:行4: autoheader: 未找到命令( y( [, r" m3 R* i6 ~
- ./bootstrap:行8: libtoolize: 未找到命令
+ u* I9 r2 z2 @$ _! a5 E - ./bootstrap:行10: automake: 未找到命令0 X- ^, `% ?5 D( x$ U
- ./bootstrap:行11: autoconf: 未找到命令
复制代码 解决方法:
; D: L3 M9 t7 Y7 |( H- yum -y install automake
) W# ?( \* n+ G! v. K3 t* E - yum -y install libtool
复制代码 执行make && make install报错:* r# W! v. U+ T) C. W( W" e
- make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”
* t2 p9 }6 T+ G - source='3gp.cpp' object='3gp.o' libtool=no \
% b7 M6 E) v+ f% e$ m - DEPDIR=.deps depmode=none /bin/sh ../../depcomp \: p, _+ R0 ~0 i
- g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -Wall -c -o 3gp.o 3gp.cpp
: d1 I: h+ ]( T# d" C - ../../depcomp: 第 512 行:exec: g++: 未找到
0 ]( R5 V, b. I( ?" v, ?4 H5 Y% M - make[3]: *** [3gp.o] 错误 127
( T! J _, m J# J( r - make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”- K$ y/ D1 p# E
- make[2]: *** [all-recursive] 错误 15 y' f! }- F5 q1 q1 Y1 ^: |6 s' I/ K
- make[2]: 离开目录“/root/Downloads/faac-1.28/common”
4 C; Y0 D' ~' \0 Z- R - make[1]: *** [all-recursive] 错误 1
+ a! k, U. S5 x( m. D) t - make[1]: 离开目录“/root/Downloads/faac-1.28”% `8 J' Y# W1 U/ W" H) Z
- make: *** [all] 错误 2
复制代码 解决方法( v3 Z; z2 j9 _5 y( d5 b
执行make && make install时报错:
) ]$ F9 E) z# l; |3 u2 W1 ]+ c- [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码 解决方法:
$ N& _+ v! j% v8 e- Y- a8 r/ L- 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)9 r. H c8 K* j* U
- 解决方法:
( r/ w5 i) [( }: i6 L( f5 J - 从123行开始修改此文件mpeg4ip.h,到129行结束。) g! z9 W: n, M' p+ ^% H2 U
- 修改前:
+ H* l Z( g8 a( a% l; e+ ^; K - #ifdef __cplusplus: M: @! x3 z3 k! t
- extern "C" {
1 F2 T9 d4 }3 \$ h - #endif
. y! Z3 g. X* _$ ]8 {# D6 Z! V - char *strcasestr(const char *haystack, const char *needle);; E8 m* V0 a! L" p8 c$ y
- #ifdef __cplusplus% K3 e) L1 z8 n! ^
- }! o0 s, U% M# [, ]( V3 p/ D- W
- #endif
' X' w! w! F2 x - # T' u3 [8 r, C% N8 [3 r0 d) ~
- 修改后:8 ~6 S5 O$ X0 |; ^" p% i" T
- #ifdef __cplusplus
- Z9 f/ Q5 T" _9 `' u- r3 ^2 [3 { - extern "C++" {
: b; m1 G5 x& x - #endif7 g" c e0 v$ b e8 {% Q
- const char *strcasestr(const char *haystack, const char *needle);* Y) m) C% j, r7 W. Z
- #ifdef __cplusplus
% L# g9 o; N) D ~6 N - }
% C5 a" k# z* N9 d4 Q$ { s - #endif
复制代码 9.amr-nb( K9 }$ i1 `; L$ ]- U; y7 S3 t8 p; O
- wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2
+ x- G. B! ~- ?5 n( D - tar -jxvf amrnb-11.0.0.0.tar.bz2
: t6 f" X$ j7 w5 L) j6 X - cd amrnb-11.0.0.08 o. L* e( o+ R
- ./configure --enable-shared* y2 j4 M+ v3 a5 n& `3 h' _3 _
- make
" o/ I, d& T) ]* f# C% I3 A7 d5 x - make install
复制代码 执行./configure可能遇到的错误:
- D( C4 g' _3 h9 s* v% e, g- configure: error: You need patch utility to prepare sources.
复制代码 解决方法:/ I- r' I$ u" d/ w6 z) u. \2 X
10.amr-wb/ m1 ^; A' S2 f. V* V7 N
- wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2- v* P8 H1 u4 j: i
- tar -jxvf amrwb-11.0.0.0.tar.bz2
. Y5 a, m% J% \, X. ? - cd amrwb-11.0.0.0/ K O1 ]& b8 r
- ./configure --enable-shared+ P* q! M; Z3 D7 r
- make . p# ~3 t6 B/ ?: g
- make install
复制代码 11.yasm
- s! E `2 U* nffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。- Q) f+ r6 X( y. a1 e5 g2 l, P
12.ffmpeg
1 z. P6 H! S2 E5 z- wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz24 h5 V" w9 q2 X8 F! `2 y8 i0 g
- tar -jxvf ffmpeg-4.1.3.tar.bz2
" j w5 H$ {3 z6 ? W- ~1 I4 O - cd ffmpeg-4.1.3
2 }9 n' o( a" s$ o7 y - #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.* X9 G+ z8 @' T0 F+ E
- #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。
4 q6 R! E) X! s, L6 u9 p6 U0 W, K - ./configure --enable-shared --enable-gpl --enable-libx264& E" ~. r. w8 ]4 r. A+ v, i9 R
- #编译,需要较长时间,10分钟左右。
# ]8 F8 K0 ~$ w. m) d. o2 T - make
9 _% i. ?( t3 @% d/ e - #安装
: f+ v: T/ N; b7 b. O: p, l - make install" ]% r! x% @5 v4 {6 a4 G X# P# ]9 f
- #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下5 K! O* d" ~- y* U4 D
- echo "/usr/local/lib" >> /etc/ld.so.conf
# q! E$ i' H; D- Y- A* Q - echo "/usr/local/x264/lib" >> /etc/ld.so.conf
8 c1 O8 {5 C( ~" Z& _+ @2 A/ E: L - #再执行ldconfig,更新ld.so.cache,使修改生效。
5 I$ r$ ?6 h G3 }. J - ldconfig
3 o* J3 @: F1 F1 w2 C - #添加环境变量
7 L8 S5 I- ]& e+ v - export PATH=$PATH:/usr/local/lib
% y( U6 [1 @& k" L: B - #最后执行ffmpeg -version查看版本。
复制代码 如果执行还会报错则查看下ffmpeg的依赖是否完整:
8 ^/ U! m0 ]. \+ x: `+ I4 r. R; X- a- ldd /usr/local/bin/ffmpeg
复制代码
7 ]" y& e7 ?$ g0 T8 f) R如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
# D9 O7 x" A C$ j# Z" }- #切到编译的目录下, n9 x3 U* B6 G# ?5 j# A
- cd ffmpeg-4.1.3& h& b) Q% g9 Z1 o
- make uninstall
复制代码 13.测试
7 R4 U9 {6 r2 Q7 }8 y" D0 I/ }3 x- [root@localhost ~]# ffmpeg -i /root/Videos/111.avi /root/Videos/1ew2q.mp4$ ~% s( [) N2 @' g
- ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers2 t) [5 W; d7 ~8 A3 C- p
- built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)- [# B$ F3 _! c [& U
- configuration: --enable-shared
; `! N0 P; E2 d% u1 ] - libavutil 56. 22.100 / 56. 22.100- n' u+ l" @- T: t% r" m. N/ Y
- libavcodec 58. 35.100 / 58. 35.100
2 |1 W/ g* i8 O; l) _0 h% p% y - libavformat 58. 20.100 / 58. 20.100
" ?9 [) ?! N1 L# b9 F - libavdevice 58. 5.100 / 58. 5.100
: y& [" w! ?/ [5 Q: a3 i* ? - libavfilter 7. 40.101 / 7. 40.101: w7 S/ s3 p9 d# L
- libswscale 5. 3.100 / 5. 3.100
! z7 [7 a) c; h7 f2 c' m - libswresample 3. 3.100 / 3. 3.100
$ B( J8 J# t) U) j0 O - Input #0, avi, from '/root/Videos/111.avi':
. i" A2 u$ ?; M1 r/ K2 S - Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s9 {: P- p! X1 Z- o' T7 U! q
- 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
8 {" h7 K9 N+ D8 o; f - Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
9 I1 n! b4 k$ R" [3 {! V' [ - Stream mapping:
: v) o( V6 y! w7 c - Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
% q6 J! {' w# ]1 t! g/ h - Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native)) e$ U/ I( ]- M# P+ w
- Press [q] to stop, [?] for help
. u9 L& q8 b6 |: m; @: G - Output #0, mp4, to '/root/Videos/1ew2q.mp4':2 b5 x6 L! u! p
- Metadata:/ ~& o! d" C' N# U8 M+ W( |
- encoder : Lavf58.20.100
9 E. e1 F. V) d7 W) y* p# a - 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 tbc5 p2 z5 A2 c& [8 T B" D" x
- Metadata:
% t0 d5 X4 R; L9 F - encoder : Lavc58.35.100 mpeg4% K5 W. m: e" q" M$ s$ E
- Side data:
2 I3 J4 _9 t) W G8 Z - cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
( X9 y! n, b. \$ }+ d - Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
7 y( D- E4 R' W$ i, W - Metadata:; q2 P9 y, E- R+ Q
- encoder : Lavc58.35.100 aac q- b& v% ~) R
- frame= 351 fps=0.0 q=12.3 Lsize= 870kB time=00:00:17.50 bitrate= 407.2kbits/s speed= 20x
( E6 u% l' J2 [3 r: o1 i! p - video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%
- P9 a; n" l7 \! u - [aac @ 0xc51f40] Qavg: 1530.201
复制代码 x264编译的指令如下:
( n# `) S7 A- l9 v, F3 ~- ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码 5 v# x6 D! Z# L
1 t+ l5 X. `3 w* Q" Z c/ p) j O. S- Q: n7 W3 X. a7 |& W2 O
! ~& z( r. ^+ f' Z' y! d# i8 E, N' {+ ^ S7 w
! i0 @% s4 v! H1 H( a
- c, g0 l) {- \- t4 ]" I& b# L- Y8 l
|
|