|
|
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本
# V" x" L7 l2 [3 w装ffmpeg之前需要安装各种解码器。
+ L h8 |: W. y3 m* `1 L没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。+ [6 p V6 B0 c8 e" C
1.lame- wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz6 b4 S8 |6 {/ f( E0 S% N
- tar -zxvf lame-3.99.5.tar.gz; ~1 {! R( Q% j2 T5 B
- cd lame-3.99.5
! e7 h+ F) C+ W v; t# f9 [ - ./configure --enable-shared
% R: N* l! t* w, l - make
& z7 Y! O4 ?: `& e; X* n: E6 T$ _ - make install
复制代码 执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH8 f) a! S4 e) o; `8 J. x* r6 a
则需要我们先安装GCC。& L( K* ~7 J% F2 U
安装完成后再执行一遍。
) Y: D) C. u; a! f% ? ~2 A2.libogg- wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz# s: |3 I* l6 W7 Z. C" J* P
- tar -zxvf libogg-1.3.2.tar.gz5 t$ j7 L$ C$ [/ W, D1 ^3 L
- cd libogg-1.3.2% ?( r7 _% k' _4 j' x: u6 M
- ./configure --enable-shared' T' q" u, o6 } h' h, L5 u
- make 2 h8 o5 w* V3 M7 `+ B8 L
- make install
复制代码 3.libvorbis- #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装" d& L7 y0 w7 l
- wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz( @4 a! a) F: c, u+ }+ a
- tar -zxvf libvorbis-1.3.5.tar.gz
0 N$ e# ~: `7 {) J# S5 X- n$ a' N - cd libvorbis-1.3.5
}) X8 N% k" P, N: H: ~ - ./configure --enable-shared
3 j0 ~' T, Z i+ [' L7 K1 Q - make
: V) b5 K; m6 {+ C" N - make install
复制代码 5 o) V) |, k$ B" {0 y- g
执行“./configure --enable-shared”如果报以下错误:
# p9 @$ b0 b; B( I7 e1 Hmust have Ogg installed!" R( h& @- k( s/ r
我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。; A' G2 b( T& @) @- \% _
解决方案:
# ~- B( ~3 ~ G: R/ R% v/ J3 j( G0 y- [root@localhost ~]#vi /etc/ld.so.conf
3 g' i4 V( w$ z - include /etc/ld.so.conf.d/*.conf
4 I+ h( q, w# H - /usr/local/lib |7 k5 V+ \' B& V; a+ ]7 J) B4 c
- [root@localhost ~]#ldconfig –v
复制代码 4.xvidcore- wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz$ c4 }7 K6 f! `7 R% L. C4 ?; T
- tar -zxvf xvidcore-1.3.2.tar.gz : @6 ]$ r3 P# \5 Y$ P
- cd xvidcore/build/generic
$ d$ }" I) T( Z2 L0 T - ./configure --enable-shared3 o/ h8 F8 ]+ D$ D: i4 k9 ]
- make 7 k2 T& m) e) _$ E% i# g ]
- make install
复制代码 5.x264
' k$ l$ V6 C! l. l8 T
7 U0 G7 y& q; b, u/ o; Y8 j" j0 k/ z& n
libx264需要nasm的支持,nasm是一个编译器的角色。
6 q. m( j- u) X7 W+ ?+ a安装nasm:8 F3 F6 v5 q' J0 X* v+ {
- wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
' r$ Y5 q; V. ^( | - tar -xvJf nasm-2.13.03.tar.xz7 ?7 Q: k W7 D7 m" h9 N- U/ I& A
- cd nasm-2.13.031 w1 n3 B% ~# i
- sed -e '/seg_init/d' \+ ]- {( H' ~0 m' T/ {. [5 |
- -e 's/pure_func seg_alloc/seg_alloc/' \* y( U% z; N7 w) C* ^" X& Y
- -i include/nasmlib.h
8 @# b, ?& y' K" Z/ |% | - ./configure --prefix=/usr &&, r _+ ]: [$ h" K4 ^5 u
- make$ n1 _* Q% ^+ X* E: Y
- make install
复制代码
& C6 \% w! \; X安装完成后再安装x264
+ G; m1 w, _% g9 t0 a' x! }- wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz24 ?; r" c7 c: B5 i: l. ^$ L
- tar -jxvf x264-snapshot-20190402-2245.tar.bz2$ h3 l/ }+ r5 u9 F8 v
- cd x264-snapshot-20190402-2245
$ z1 s: n% c* Y' L" @ - ./configure --enable-shared
# Y& f) J! @" N- Y; v - make 9 Q7 ]6 `) r& G! |. I9 Z. T7 V
- make install
复制代码 6.libdts0 p' d: f6 y$ I5 b
- wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2: b' e' D V; E1 |7 o9 ` `; G% U5 [
- tar -jxvf libdca-0.0.5.tar.bz2
& F, g0 \7 L- u* M - cd libdca-0.0.54 }7 z3 X; W4 A: e
- ./configure --enable-shared7 Q0 |2 a1 u* m; l; V+ U
- make
7 F8 |2 a9 ? P* y- C# t8 ? - make install
复制代码 7.faad2
, G$ o9 K- Q* S* y( b- wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz9 }2 r2 I0 f& M1 G7 C( }& o- r" D
- tar -zxvf faad2-2.7.tar.gz; T! X& _6 ^1 ]9 B/ k- O
- cd faad2-2.78 u% ~! ?: W6 ]
- ./configure --enable-shared
7 G3 F$ E# O' G- ~$ W" U4 ` - make
! p4 ~" S" C. @/ T; t# p+ ` - make install
复制代码 8.faac
6 n/ ^8 L4 l. D" ]- B- wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
" z1 Z) }1 i& {9 a ]- | - tar zxvf faac-1.28.tar.gz( ^& P, `+ K) `9 a- k, p' X
- cd faac-1.28
0 z5 ? m; ]# Y' ^ - ./bootstrap
1 t; Z+ s5 o' K7 A5 b' C3 y - ./configure --prefix=/usr/local/ --enable-shared
( r4 o) y" S! E& j* _ - make && make install
复制代码 执行./bootstrap报错:
' v3 M2 s3 J {0 s2 r5 p2 h" [. }. C6 T- [root@localhost faac-1.28]# ./bootstrap
* c; f b: H" Q* A7 i1 o! z& Z - ./bootstrap:行3: aclocal: 未找到命令
/ U1 c' r0 f% b( ^ - ./bootstrap:行4: autoheader: 未找到命令5 z! \3 t i- ]
- ./bootstrap:行8: libtoolize: 未找到命令' ?8 Y O5 q9 p0 X
- ./bootstrap:行10: automake: 未找到命令
+ ]+ ~) S9 S4 ?! u - ./bootstrap:行11: autoconf: 未找到命令
复制代码 解决方法:. W% ^. H. a& E/ s; j5 D
- yum -y install automake6 c3 {) G. Q, h& Q2 V q# H8 A
- yum -y install libtool
复制代码 执行make && make install报错:
6 W, t0 p) Q. w+ j! d6 q2 h& v- make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”
) I# E$ ?1 E/ h2 h U7 s - source='3gp.cpp' object='3gp.o' libtool=no \
5 g3 o" q& S: `% O) H5 b# z - DEPDIR=.deps depmode=none /bin/sh ../../depcomp \9 D) i0 U& g& ~5 |
- g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -Wall -c -o 3gp.o 3gp.cpp
% y) z+ s, `9 L- { - ../../depcomp: 第 512 行:exec: g++: 未找到
. b5 K. p) K( @9 m( K& ] - make[3]: *** [3gp.o] 错误 127
c# g: E$ J2 F' X3 Z. n8 k$ P( f - make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”. r5 ~: n8 @3 F6 S8 o
- make[2]: *** [all-recursive] 错误 19 w+ D# f H9 j& c4 k0 I
- make[2]: 离开目录“/root/Downloads/faac-1.28/common”
# Y: \% k( G3 Q! t* e4 ^7 z - make[1]: *** [all-recursive] 错误 1
, F7 `( q8 y! c& q7 ? - make[1]: 离开目录“/root/Downloads/faac-1.28”. K0 F( q( E" ` c
- make: *** [all] 错误 2
复制代码 解决方法) Z$ ~4 G- |+ c3 j6 W# c' A
执行make && make install时报错: V* @1 T5 T% b( A) x: b7 W9 ^) n
- [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码 解决方法:6 u% z! h4 H' p) Z% |& ^- v
- 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
. ~5 W0 T% W/ k3 P: C U1 _ - 解决方法:
5 I F" g: k! {: I% S# {6 A - 从123行开始修改此文件mpeg4ip.h,到129行结束。
1 ]. ]" x/ `" n& K. ~ - 修改前:
( N0 n8 p0 }! U) ~ - #ifdef __cplusplus
! Y" a/ B) ~+ F - extern "C" {
; r4 s4 l3 D$ r1 t2 K s# Y; \ - #endif
( g# `; v. n' O1 f4 |4 \& \1 A, p - char *strcasestr(const char *haystack, const char *needle);7 y+ f' h' r0 [" \: \
- #ifdef __cplusplus+ T l+ K! y' V' q) [' `( C
- }
1 h# o. c7 n, [( N - #endif6 \. m" `( y s( Q, M8 Q& q
- ' L4 {6 x$ X. X2 O, Y
- 修改后:
; S: u0 b) k+ z6 G - #ifdef __cplusplus% N8 L8 R0 X7 \( M P) \( G
- extern "C++" {
/ U2 o6 e. \( R$ o0 q - #endif
/ N- C) K+ i9 V; A - const char *strcasestr(const char *haystack, const char *needle);2 r. E: E- j9 f I
- #ifdef __cplusplus. Q1 `7 f2 x5 X8 m* U( B2 H2 f
- }% P7 A& t% H( C
- #endif
复制代码 9.amr-nb. I6 G$ f# Z( |# g; _
- wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2; V! v; S! D+ T
- tar -jxvf amrnb-11.0.0.0.tar.bz2
2 X9 J3 T' M' {4 E0 s/ D1 O) i - cd amrnb-11.0.0.0" @" I d! _& }; c
- ./configure --enable-shared# T1 B5 E, e" v' v3 M( G
- make 8 l$ y" v8 k4 o; x8 t* k
- make install
复制代码 执行./configure可能遇到的错误:
( R9 K1 k) x0 A$ `7 P6 ]) B- configure: error: You need patch utility to prepare sources.
复制代码 解决方法:
1 }7 d3 N) Q u# F10.amr-wb
' t; T* a! |/ c* [% C Y- {- wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2: @* V" f T4 g$ ]6 b- Y
- tar -jxvf amrwb-11.0.0.0.tar.bz2
$ x1 i, L2 Z8 e0 p - cd amrwb-11.0.0.0
4 X5 X' }! \' P! X - ./configure --enable-shared
1 q6 @1 W K3 ?& X/ V# b - make 9 M( T7 l d& R7 J' b$ ~& D
- make install
复制代码 11.yasm
8 u2 j; a8 _8 N5 ^- N$ M8 x* Z Uffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。# [! W3 s' A" A6 |# [
12.ffmpeg; A- H3 r7 |; `( w+ e$ }
- wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz20 h0 ~) y. S9 t" W: K8 \% K
- tar -jxvf ffmpeg-4.1.3.tar.bz2
5 X: K9 [8 `! F4 R - cd ffmpeg-4.1.3
3 _1 ~; \9 h- E+ Y x; E: @) v0 B - #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.% x5 ^" a. w9 Z, s% t/ \# J
- #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。
1 l5 T7 G4 E- z# ~$ z8 @3 q - ./configure --enable-shared --enable-gpl --enable-libx264+ h% O2 z8 S0 P9 R- L. w
- #编译,需要较长时间,10分钟左右。
# a0 R& n$ c4 u" ^8 y& V - make) N3 X2 g, H# q
- #安装
; L7 x D7 x; }, S - make install
, g3 [+ g5 \- v' P6 @; @; I* I - #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下& n. G( `# Z' H. ?
- echo "/usr/local/lib" >> /etc/ld.so.conf/ I# u4 v2 |% G+ L3 M/ x7 m
- echo "/usr/local/x264/lib" >> /etc/ld.so.conf
0 g8 s* k0 J6 l" M0 F - #再执行ldconfig,更新ld.so.cache,使修改生效。8 y+ O* W, w, a P3 P' Q% W( ]
- ldconfig
2 S+ ~: T. B2 w. L i - #添加环境变量; V, r, |$ i% T- K; K
- export PATH=$PATH:/usr/local/lib
- y$ ^( i* \9 \ - #最后执行ffmpeg -version查看版本。
复制代码 如果执行还会报错则查看下ffmpeg的依赖是否完整:! a" Y" a7 ~0 f% i; } k/ t
- ldd /usr/local/bin/ffmpeg
复制代码
0 ^$ P: k5 {* \; \1 d& z3 M: w" e
如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
3 h( S; a- t" v9 ]- #切到编译的目录下% D( g9 G F* s: G, E. F: t% m! ]- k
- cd ffmpeg-4.1.3) d' F0 d: ^% y9 I
- make uninstall
复制代码 13.测试
5 I) f5 [) |, Y" I% K! ?6 h' {- [root@localhost ~]# ffmpeg -i /root/Videos/111.avi /root/Videos/1ew2q.mp4: M5 w3 y* @# N& U8 |, k
- ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
. L# a/ f* A$ D7 M - built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)
7 N: ]& R3 @" r2 V7 _ - configuration: --enable-shared1 U3 Q3 g2 p* p7 T- E7 X8 A; [
- libavutil 56. 22.100 / 56. 22.1005 _( ], E6 {% F7 H1 c7 P- o
- libavcodec 58. 35.100 / 58. 35.100
6 r# L1 P- t9 S0 U' r - libavformat 58. 20.100 / 58. 20.100
. c# }( O" |2 t - libavdevice 58. 5.100 / 58. 5.100
7 b4 I" Y+ G. D1 Z9 F8 M6 P; X9 V - libavfilter 7. 40.101 / 7. 40.101! z' s% H, V9 \% W# U
- libswscale 5. 3.100 / 5. 3.1009 ]( D0 v9 M: D" }+ V! G
- libswresample 3. 3.100 / 3. 3.100
# l% @6 g! M' z# I+ V3 s/ n* | - Input #0, avi, from '/root/Videos/111.avi':( i' {+ R3 D- Y; J3 h% Z) Z
- Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s
8 d5 z, v% J7 z# K- _& {9 t - 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+ w4 I8 X1 A# A# x: p
- Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s* A4 D6 C' ]3 J1 A4 C
- Stream mapping:
x/ \& J9 Z- N, t6 q7 Z. P* k4 l - Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
- F$ i0 B. I5 P3 q) v) F - Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))6 k8 S. ]$ u* C. u0 M+ e' \
- Press [q] to stop, [?] for help2 S! f! K; s% d" f' L8 Y7 T
- Output #0, mp4, to '/root/Videos/1ew2q.mp4':
+ {9 [- t2 q( u N - Metadata:. z# N7 o: X: W
- encoder : Lavf58.20.100
; N4 E" Q! L b i - 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: O& u) Y4 T2 p( Y1 o/ \! h
- Metadata:4 G, M ?! I3 ~9 r8 z
- encoder : Lavc58.35.100 mpeg4
' s* x) h# ]0 F( \! K - Side data:, O& _3 K) X3 ^! \! g# {* |
- cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -18 u$ s3 Z, |9 s- b
- Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
6 v! L; d% I7 b- ~/ w* Q; p; L - Metadata:! |% _+ Q5 z$ ?: u! L: V
- encoder : Lavc58.35.100 aac* }3 M" e+ G, [
- frame= 351 fps=0.0 q=12.3 Lsize= 870kB time=00:00:17.50 bitrate= 407.2kbits/s speed= 20x
9 _/ E$ R0 G4 B2 f8 S$ o( t" g - video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%
% |8 q6 y' K- f& Z - [aac @ 0xc51f40] Qavg: 1530.201
复制代码 x264编译的指令如下:" h i' v3 i6 S& g; W% A' w
- ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码 * Z- T6 I/ s4 i0 C6 m! P# D$ S
- o. @! ]; `1 Q$ Q+ e1 T1 Y6 G
. u) `+ h8 z; W8 W( ^8 t" A( D9 K/ s: [6 G: a
! D+ R: f7 t! \. Z! I. y$ [6 |8 t
% F8 l. N1 p) v: A5 A9 X
; m& C! U$ ~) D# y. b8 j& ?) X" Z
3 @1 ], t3 l- d/ f. D |
|