|
|
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本% G9 G4 z0 p9 o
装ffmpeg之前需要安装各种解码器。; f- l$ b+ t- D
没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。% C A+ p4 d' ~3 R
1.lame- wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz$ }- q4 p7 m% x8 A4 V& }6 H* }
- tar -zxvf lame-3.99.5.tar.gz2 ]( S; E* U3 w& J
- cd lame-3.99.5 8 {+ `! f3 _; Z! C- M
- ./configure --enable-shared
1 B1 @9 U% F3 Z$ q4 @7 F2 \3 r- O - make 5 P, z$ y/ ^+ y; o# N
- make install
复制代码 执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH
, `) u; A" _) _5 e则需要我们先安装GCC。9 R# n7 J) K8 m0 U
安装完成后再执行一遍。
, h) Z3 v* e# w6 ^3 ^7 b6 E2 j2.libogg- wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
' ^- P( ]$ q' [9 G - tar -zxvf libogg-1.3.2.tar.gz
5 ]" J2 i/ R z. j5 [2 \2 G - cd libogg-1.3.22 N- q7 U; r' ] E' s! L, X& E& j
- ./configure --enable-shared
4 C0 R) j! w0 w' S2 | - make $ s0 I: u( ~0 {. h$ L% L4 ?, j
- make install
复制代码 3.libvorbis- #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装; l# E4 a- V, v! O: G7 b" N
- wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz: ]1 I3 o9 f3 O/ Z( o/ G, M" w8 w
- tar -zxvf libvorbis-1.3.5.tar.gz; A0 Z. {/ x7 _ ?& _( p, R
- cd libvorbis-1.3.5
0 d( J0 c K/ O - ./configure --enable-shared
$ q' m! M6 P, W F/ E: N - make [9 C" ^. D( l- y/ ]* r4 z/ \
- make install
复制代码 ' w _+ Y3 T6 G
执行“./configure --enable-shared”如果报以下错误:
. A% N4 @' }! y4 q8 [must have Ogg installed!+ U3 _* m% ]1 h- ?6 L+ P; i& Q8 j
我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。& k& D$ G) Y5 e9 b
解决方案:
2 M$ P: T! P% M1 \- [root@localhost ~]#vi /etc/ld.so.conf
: `5 I% a; {: D& L6 Z9 k) P - include /etc/ld.so.conf.d/*.conf * u" M$ x- |: J9 S( o9 K/ v
- /usr/local/lib0 \2 d* z4 x4 h/ k% b; C# g1 d; D A1 P
- [root@localhost ~]#ldconfig –v
复制代码 4.xvidcore- wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
& S. s+ V. {5 [! c1 D0 ~ - tar -zxvf xvidcore-1.3.2.tar.gz
, i9 w& H" E$ [* }( D- x4 M9 ^ - cd xvidcore/build/generic
# t- S+ y1 }. @8 K) H+ D8 p4 ] - ./configure --enable-shared
- f: T; x4 K2 ?6 k4 X' n - make
' S5 i6 Y- \# w5 y; G - make install
复制代码 5.x2646 S/ B$ f; N0 s7 z6 c/ `8 j) S2 ~
9 X, b' Y/ `" ~: U8 W7 }) ?7 d" R
libx264需要nasm的支持,nasm是一个编译器的角色。% x+ w$ g+ Y' ]) c+ j* l# i' D
安装nasm:( m1 T u( n3 R$ r# d
- wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
0 v# a0 S. Q, a. ^4 R - tar -xvJf nasm-2.13.03.tar.xz. e7 }5 N% G! @9 k( g4 @
- cd nasm-2.13.030 m2 y) ^( C: i! g( \. G. i
- sed -e '/seg_init/d' \
& L! l& i5 f. p; M o! a6 l3 ` - -e 's/pure_func seg_alloc/seg_alloc/' \$ M* J$ \8 Y% W& n I5 F0 W
- -i include/nasmlib.h
' c# o$ g- k1 i0 S2 {6 B% O* W) j - ./configure --prefix=/usr &&
/ y' a0 J. [6 I4 K8 ^( G5 ~( M - make. p! D7 {4 Y3 m4 D
- make install
复制代码
( ~4 }# B' ^7 P5 m安装完成后再安装x264
! {7 k7 W" K, p) q1 A- wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2
; F9 X- V& ~& G4 N- A - tar -jxvf x264-snapshot-20190402-2245.tar.bz2) J. o% A: J t2 C! s; C E# N- P
- cd x264-snapshot-20190402-2245
- b1 Q$ _! {! ~' y6 j) v - ./configure --enable-shared
9 P$ c* z1 G, O1 p+ }3 I' [ - make 6 |+ G+ S" f r. R, f5 R
- make install
复制代码 6.libdts0 q u2 r/ P3 V A: M- a& {7 w
- wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
6 k6 O+ F9 B1 T" q - tar -jxvf libdca-0.0.5.tar.bz2
3 b% n3 Y" Q, N$ H4 Z - cd libdca-0.0.59 X9 x: W% X, }
- ./configure --enable-shared
( h) u; W' G( U6 ]* c* Y# N8 y1 t - make
& B& U! k6 s0 f% h+ J - make install
复制代码 7.faad2
2 H* I* M5 U5 G- wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
' y8 T4 P5 ]1 a# e* h9 H - tar -zxvf faad2-2.7.tar.gz
) f6 U/ }5 X( O! t& k* `/ y - cd faad2-2.7( E# J0 V5 N; ~2 T9 Q& {9 q: A
- ./configure --enable-shared
* z& S; E# s7 K3 ] - make
1 m. r/ T$ A5 p$ I; c! z- E! J - make install
复制代码 8.faac2 P, t6 W" b+ n! _
- wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
% t4 L, b3 `4 H- k - tar zxvf faac-1.28.tar.gz
4 y/ l! m& k& j8 K; o2 N - cd faac-1.28' R0 W+ Q8 g( @: i) b
- ./bootstrap! f' K5 w+ C" E8 Y0 D, ^! e
- ./configure --prefix=/usr/local/ --enable-shared
. x, }3 e& \0 K1 j - make && make install
复制代码 执行./bootstrap报错:8 c+ E( @, U/ N
- [root@localhost faac-1.28]# ./bootstrap( ^+ {+ g) D; U) J) B" H/ d
- ./bootstrap:行3: aclocal: 未找到命令 u, j( u; X/ H/ @
- ./bootstrap:行4: autoheader: 未找到命令
4 c6 |2 r) r$ l - ./bootstrap:行8: libtoolize: 未找到命令$ }& z3 Z" P5 c; o ~$ n$ G8 i
- ./bootstrap:行10: automake: 未找到命令
! E% @5 j/ u0 A5 [6 J* N0 M - ./bootstrap:行11: autoconf: 未找到命令
复制代码 解决方法:
6 n3 f9 K8 z* _1 t5 h! z4 ~- yum -y install automake
4 @" q) n- Y8 w) J, G7 z7 v - yum -y install libtool
复制代码 执行make && make install报错:
3 k8 @( ]2 C# v3 H/ t! p- make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2” ?4 l( `$ H* L' ^0 ?- v' W& F7 h
- source='3gp.cpp' object='3gp.o' libtool=no \% X( N2 r/ n# j( A! P5 ?5 J
- DEPDIR=.deps depmode=none /bin/sh ../../depcomp \/ k# {: K( V- f% _9 a1 S
- g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -Wall -c -o 3gp.o 3gp.cpp
$ M) \5 Q4 }' T6 Q t, T. h - ../../depcomp: 第 512 行:exec: g++: 未找到
+ \ K ?; a8 B- D/ \* x# B - make[3]: *** [3gp.o] 错误 127
$ J& y+ K9 s# K7 Z) R - make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”+ }/ {( u5 ^) J; p1 n$ d; _/ [& Y
- make[2]: *** [all-recursive] 错误 18 N" G. B" m# c+ H* ]
- make[2]: 离开目录“/root/Downloads/faac-1.28/common”
. S% O2 o# b, w* j - make[1]: *** [all-recursive] 错误 1
. n+ B0 T& O) E. u - make[1]: 离开目录“/root/Downloads/faac-1.28”
h( A4 J1 q$ I. _# t1 Y7 B - make: *** [all] 错误 2
复制代码 解决方法6 S% r K( [" H) z; O
执行make && make install时报错:4 T/ M5 j* T) U2 c2 \# {! d
- [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码 解决方法:
# d' T, l4 B2 J9 x l* W- 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)6 o( \3 y" \) x8 t0 T. C7 i2 Y8 d
- 解决方法:- D% h/ g* [( B$ s
- 从123行开始修改此文件mpeg4ip.h,到129行结束。
: x' b. C4 h2 T' E F0 ^& Q - 修改前:
, g! G2 y# Y& b% a2 i B7 o! D: g - #ifdef __cplusplus& Z8 I9 g3 L O& q# L: n, G6 Z- \* _
- extern "C" {. z# n+ T; r4 `! c3 i$ x6 |7 c
- #endif
( W+ r9 @5 I6 l1 Q# B2 }# u - char *strcasestr(const char *haystack, const char *needle);
- S2 |5 r6 ?5 f; d& R1 T! _ - #ifdef __cplusplus
5 Q" b# V( o+ w8 s5 B: L$ N( T - }
: J8 ]9 G3 b7 W, Y5 F - #endif3 n' M7 i( J z% @7 ?
- 9 g( F7 m4 n0 ^/ l
- 修改后:
$ k% r% i, g- X5 P" C, Z! T2 d - #ifdef __cplusplus; M: ?, E2 j0 G0 L
- extern "C++" {
% g. N* A. z4 M+ g2 s - #endif
! a( v) P! r$ k: R) C$ r# x - const char *strcasestr(const char *haystack, const char *needle);' t: u3 E1 _+ }, V+ S1 U1 S" E
- #ifdef __cplusplus0 L( @( w7 C! Y
- }
- m4 O# z% B4 d) ^; k - #endif
复制代码 9.amr-nb5 K& t: v! E1 t& V7 t4 y
- wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2, n" s6 e- ^( Y% D
- tar -jxvf amrnb-11.0.0.0.tar.bz2" Y9 ]' [7 k( L) B6 ~ X
- cd amrnb-11.0.0.0
+ `7 J+ c) f* |) v6 C6 G/ j* a9 f - ./configure --enable-shared* K! y4 m3 Z$ A+ O
- make . G& `: N; T* w) u% D: c I- ]
- make install
复制代码 执行./configure可能遇到的错误:! e$ H$ j# ^6 z' Q3 @: t9 \& F
- configure: error: You need patch utility to prepare sources.
复制代码 解决方法: y7 }" h, @" G4 {4 ~
10.amr-wb1 o, K) y% z2 B; F
- wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2+ i. f% \7 H) {: j/ z" u! v+ o q) R; S
- tar -jxvf amrwb-11.0.0.0.tar.bz2) B5 j, M5 [6 @5 Q
- cd amrwb-11.0.0.0
1 f. c8 Z! m- g. h5 \& ~ - ./configure --enable-shared* B( u" t' S5 W, Q" {
- make $ F. [/ |1 d& Y4 |
- make install
复制代码 11.yasm3 K* g- Z- {" P. K8 B& F6 H
ffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。: {& E) e2 C) K T) p
12.ffmpeg
9 C: D% _, t1 Y7 T6 u- a; w+ T- wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2
+ z* ~1 ]! [8 t& s - tar -jxvf ffmpeg-4.1.3.tar.bz2" M4 s0 c" |) U
- cd ffmpeg-4.1.3
' t% ], J' S7 [ x4 H) N, X" N - #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.! p9 t! ~" p4 N" n
- #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。- s+ |* I1 h* M
- ./configure --enable-shared --enable-gpl --enable-libx264, B) p G6 I1 x$ \
- #编译,需要较长时间,10分钟左右。
9 ]* w* o% e, S$ K6 E - make
! n0 v Z% g& j8 E# }: ^& p - #安装% Q! ]8 {6 L+ n# ?. Q: Y
- make install* L, j# ~* Y1 O( b) b1 k( e P- O
- #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下% {5 T! W" }7 d$ P# i! H/ ?
- echo "/usr/local/lib" >> /etc/ld.so.conf
2 Z) J1 ^+ O: l# Q; C - echo "/usr/local/x264/lib" >> /etc/ld.so.conf
2 p" q2 g c1 B4 e - #再执行ldconfig,更新ld.so.cache,使修改生效。0 o( u$ D3 j# y
- ldconfig
! _+ e' a- O/ V3 h% b- N - #添加环境变量
) T4 X5 ^6 x. x$ \+ a - export PATH=$PATH:/usr/local/lib
2 _, r7 ]" E7 J- V$ A- D* V# s1 T - #最后执行ffmpeg -version查看版本。
复制代码 如果执行还会报错则查看下ffmpeg的依赖是否完整:/ S9 }8 S, A ?1 B
- ldd /usr/local/bin/ffmpeg
复制代码
8 J8 W' U1 o0 U3 n( w: a$ r
如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
; M1 D) z3 X6 m7 P- #切到编译的目录下7 ^, t- A z3 g8 i2 i: A- `1 Z# e! o8 R
- cd ffmpeg-4.1.3
- k" m, V& a, f$ u- U$ L - make uninstall
复制代码 13.测试
p0 `% k8 D# q% p- [root@localhost ~]# ffmpeg -i /root/Videos/111.avi /root/Videos/1ew2q.mp4
6 V) G) t, j( O) y( a8 [2 q( ~' \ - ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers$ D# T6 D# m7 \2 l; Z
- built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)# ?( p7 N5 E' p5 q/ |. M
- configuration: --enable-shared; p* w/ `% {7 w
- libavutil 56. 22.100 / 56. 22.100; b' f" ]' n% x. A1 f
- libavcodec 58. 35.100 / 58. 35.100) X: y4 ~/ Y# R5 a; B: k' Z* t. q c! V
- libavformat 58. 20.100 / 58. 20.100
8 \# ]+ V3 h: X+ H: O - libavdevice 58. 5.100 / 58. 5.100
: S" |! D9 h% Y4 o" d - libavfilter 7. 40.101 / 7. 40.101+ h% Z7 p5 `+ c/ \$ f
- libswscale 5. 3.100 / 5. 3.100
) q6 w1 @ H1 N y - libswresample 3. 3.100 / 3. 3.1006 O) H* Q' G: l9 X6 k
- Input #0, avi, from '/root/Videos/111.avi':; p1 W; N% u+ K$ u9 _! a! ]
- Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s
3 s# r `+ p3 g: K - 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
' m. H( n# `) G& k - Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
. G; x$ ?. E' W; \3 J! I, } - Stream mapping:/ h- Z2 W2 V+ I: L- N' z$ k
- Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
* V' l! c3 M7 v. z - Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native)) y; W0 p: T, ]: L- g$ ]! B
- Press [q] to stop, [?] for help
, F l4 U& b* s/ o1 r- H) q) ` - Output #0, mp4, to '/root/Videos/1ew2q.mp4':
8 k3 `! a E3 N( D3 X - Metadata:! \, q# ~6 a) V2 f- T
- encoder : Lavf58.20.100
' h" w ~: d% Y" e& 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' G3 T7 G5 P, b5 Q
- Metadata:3 k. |4 d, ?: u' z. g: ^6 S
- encoder : Lavc58.35.100 mpeg4! V5 s p) _! H9 L/ o/ \: @+ [1 K
- Side data:
; c5 {$ U1 ?5 {; F# C" p/ @1 C3 p: E - cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
- n6 _) O; \6 W: @: |( Y6 x' [8 p" C - Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
# ~2 Y; j) ?& M, B. ] - Metadata:7 O9 a4 x. m1 `5 h5 q
- encoder : Lavc58.35.100 aac' Z' z# @1 j9 Z6 |# X
- frame= 351 fps=0.0 q=12.3 Lsize= 870kB time=00:00:17.50 bitrate= 407.2kbits/s speed= 20x
" }) q- z# L# {; {" j: k" Z - video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%+ d. q0 C& |! e8 J
- [aac @ 0xc51f40] Qavg: 1530.201
复制代码 x264编译的指令如下:
/ `0 J8 p/ J" N' T) w; A- ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码
% R: O5 K4 f. z0 c% B
3 @) h# v9 x- _
/ l' l# L* f& d1 _4 r' u$ r1 E' k: l; B8 i/ F8 X. C$ \ C
% P/ S( e2 p+ E) V
# E6 i! S1 Q+ F* s/ b# ]
; J: z l* a* d! k6 e
$ \) @3 X% m/ S. I4 \ |
|