|
|
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本
% o* @! Q% E; {, Q8 Z; d8 B1 z装ffmpeg之前需要安装各种解码器。
9 g; v3 Q0 L0 W" ^- k5 P没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。
7 Y6 Q K! m$ q% r1.lame- wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz. N% G' M: \+ d# V$ m. L
- tar -zxvf lame-3.99.5.tar.gz
- b, i: ?) ^* L) I; k - cd lame-3.99.5
* m' t( w2 p; r \( ~2 K - ./configure --enable-shared6 l% U q, Z2 K8 a- l' E
- make ( E. r6 t( g- b' V, Y: U
- make install
复制代码 执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH- Q8 j- Q* V1 V/ Y- M) U, y
则需要我们先安装GCC。' f& B( b) Z4 q0 k" d$ {) r! I
安装完成后再执行一遍。' T! x q- C& C% ~6 j- [
2.libogg- wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
( u2 O# S3 N+ u- B7 h+ e - tar -zxvf libogg-1.3.2.tar.gz
: `' h3 y/ h) T5 u2 ` - cd libogg-1.3.2
" Y7 p2 ~0 a3 H/ ^7 J - ./configure --enable-shared
, J* j* l& Z2 C: R% G* q! T - make ! J1 O- n, k8 l7 w- I5 ?
- make install
复制代码 3.libvorbis- #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装
- W7 S# g5 W9 z1 B: R" B - wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
& S1 U& H% i* }. o2 c; G - tar -zxvf libvorbis-1.3.5.tar.gz
0 G# r1 h( [# f! w# r - cd libvorbis-1.3.5
7 |- t9 C" ~$ j# \ - ./configure --enable-shared A4 h. p* d( a
- make " a' P" y. Y$ C+ C& W
- make install
复制代码
% ~0 ?! u! N7 d j& ~; Z1 F执行“./configure --enable-shared”如果报以下错误:
+ G/ H8 _3 A/ hmust have Ogg installed!
% k" Q+ |1 m( Q. T# O我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。% T% n# ~+ a+ f) e, ]% p; _
解决方案:
: k$ I; O; t0 M1 Y8 G+ ]' B- [root@localhost ~]#vi /etc/ld.so.conf. B: }: s7 V9 J J
- include /etc/ld.so.conf.d/*.conf 1 F( W9 N& u7 F0 b* S$ v
- /usr/local/lib+ s" [! H- I9 y& t
- [root@localhost ~]#ldconfig –v
复制代码 4.xvidcore- wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
: M7 ~- W# T' g: u5 s - tar -zxvf xvidcore-1.3.2.tar.gz ( S2 P+ Q) ?/ V
- cd xvidcore/build/generic
4 x# s b: @) U - ./configure --enable-shared
; ?: E: B6 k, e. V: o7 e1 W+ o/ ^( X2 o - make
& _& v# {0 s$ L0 i - make install
复制代码 5.x264
& X- a2 ]% t# A) c! _, z
7 G Z' g; P2 g$ B5 O
# ]. a# J$ P: E5 ? y3 `$ ~( [libx264需要nasm的支持,nasm是一个编译器的角色。
8 h% |- s9 Q! U6 m安装nasm:" H# q+ @# T5 y- u3 Q
- wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
& F5 ^) y7 @/ u0 L" g - tar -xvJf nasm-2.13.03.tar.xz
: Y$ V, l' v1 G9 Y% W- J3 T4 h; F - cd nasm-2.13.03
5 v! d. B5 @4 U8 s3 H - sed -e '/seg_init/d' \4 h# x9 G: Y; L. L3 ?+ z6 u5 e7 }. z9 @
- -e 's/pure_func seg_alloc/seg_alloc/' \+ p d9 O: {$ L- D3 o4 M4 @
- -i include/nasmlib.h$ B" _0 {4 @, @* T; G w6 `% A
- ./configure --prefix=/usr &&5 z' [1 s; U8 ~" z4 u2 P
- make
5 b( U, b) f; l# R/ `4 e6 T3 _ - make install
复制代码
" l1 X" `. T& Y+ |& F: W
安装完成后再安装x264/ q1 F1 G) k% A3 \: ~ W, C4 b
- wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz26 K0 k @8 f3 z
- tar -jxvf x264-snapshot-20190402-2245.tar.bz2/ b* \$ q2 M3 F/ ~( ^& ?
- cd x264-snapshot-20190402-2245
" P( _' f8 t: a) R# S8 v7 W5 H8 f - ./configure --enable-shared
M& t8 y; l8 G4 f& X r+ [! r - make " G' ] n- x2 r# B8 V& Z
- make install
复制代码 6.libdts
( c4 e2 I% r4 g' ~8 c X- wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
; N, U/ W' k/ ^* A- r$ @3 V - tar -jxvf libdca-0.0.5.tar.bz20 Q+ w$ G2 _, Z: r7 \
- cd libdca-0.0.5
3 I: H! H4 k+ C, Y3 a7 d6 ]: W- i - ./configure --enable-shared5 Z0 \ F9 F! T% x' a: H2 o v
- make 1 e7 Q+ x, M, d9 b" I4 F% B
- make install
复制代码 7.faad2
+ c8 C$ Z4 C# L9 Q/ j1 b- wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz7 ^" H1 h' \+ ^% A4 k& A3 P" a2 {
- tar -zxvf faad2-2.7.tar.gz1 F `& w0 F& H) g
- cd faad2-2.7$ @ I/ ?6 L& _" D1 j: }
- ./configure --enable-shared- b$ @* y4 v! m: ^
- make
: K$ o- C0 w4 B0 Y; e9 Y$ C - make install
复制代码 8.faac
! k9 a3 L: y* Y5 `- wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
9 ~/ E+ j4 y' n' A" a; i- O# z - tar zxvf faac-1.28.tar.gz* {& B) c$ j% `" V: M
- cd faac-1.28
* T/ T5 M! y# m1 K* Y - ./bootstrap& h3 ]% N$ _: \( N; ~( k0 F9 q/ ?6 m# _
- ./configure --prefix=/usr/local/ --enable-shared
+ @; v" p( J6 o$ o6 j; ^7 S( D - make && make install
复制代码 执行./bootstrap报错:: N8 d% D% x9 O0 t4 ?
- [root@localhost faac-1.28]# ./bootstrap/ v/ J0 M/ ?9 l) u; L
- ./bootstrap:行3: aclocal: 未找到命令- v7 l$ j! R5 S1 U' p
- ./bootstrap:行4: autoheader: 未找到命令3 X2 }0 x9 L, p0 o `
- ./bootstrap:行8: libtoolize: 未找到命令
k! ?) f3 M6 [/ K" G$ { - ./bootstrap:行10: automake: 未找到命令- i- u& Q' q8 f) [* K9 `
- ./bootstrap:行11: autoconf: 未找到命令
复制代码 解决方法:
# a+ ~$ C" D8 }5 E+ Q% |- yum -y install automake3 X; k; \+ ^0 X% i- S, G$ h
- yum -y install libtool
复制代码 执行make && make install报错:+ w- l5 H) @, x* Y6 M
- make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”
) z3 @! t: o4 |' n - source='3gp.cpp' object='3gp.o' libtool=no \
# C& D" D& ^0 c5 @4 h" l7 x - DEPDIR=.deps depmode=none /bin/sh ../../depcomp \
" n% @' n* c: o' A3 Q# q - g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -Wall -c -o 3gp.o 3gp.cpp
5 f& h3 e4 M5 x r - ../../depcomp: 第 512 行:exec: g++: 未找到# q2 E# ]) a2 P: j. e8 A' ?
- make[3]: *** [3gp.o] 错误 1278 _- ~% m- N1 u! ^# n2 N7 f
- make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”
Z6 g4 W/ _0 [& e1 H' s' i - make[2]: *** [all-recursive] 错误 1
/ M6 S# _, ?& B5 ~/ Y, V, M0 u" i - make[2]: 离开目录“/root/Downloads/faac-1.28/common”
) f+ i8 F( {0 h - make[1]: *** [all-recursive] 错误 1
' F# K% y7 O7 z" Y9 Q I% @ - make[1]: 离开目录“/root/Downloads/faac-1.28”
/ j" a3 D+ v% m4 B - make: *** [all] 错误 2
复制代码 解决方法, U8 R1 x1 H" o4 t1 W7 P
执行make && make install时报错:4 q2 j+ y3 Q5 x3 C
- [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码 解决方法:& s3 l4 [1 `: r: C2 _# M
- 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)2 u' I7 l4 ~( m) o6 Q- H. ~) g
- 解决方法:
% g& O: e0 ]5 l; z( Z$ k2 @ - 从123行开始修改此文件mpeg4ip.h,到129行结束。
& D) s+ w& J, ]# Q) \9 A, v6 X9 S - 修改前: z5 d/ e: k, ^& ]6 k" Y! ^
- #ifdef __cplusplus
! d. ^3 o2 o; N0 E/ p - extern "C" {( x5 a# a8 A- E. P" G. w
- #endif1 E' R1 W. s' L8 D, h# A5 D
- char *strcasestr(const char *haystack, const char *needle);
- q4 g7 M; e( c; f. O# O% z9 c1 B4 ~ - #ifdef __cplusplus
! N# X# S3 G% K3 @- V - }5 X( u! y1 Y3 n) y, b$ K+ ^
- #endif5 g, z. q, m$ [. [* w2 f1 }
- 4 t. M6 N& }7 O/ ?& s# E
- 修改后:! Z/ {8 _- @. C
- #ifdef __cplusplus! v3 F. L; s) G D# n: o( t3 @9 L
- extern "C++" {" B( U# \' T, _3 A; p+ s) e
- #endif9 q6 A. F' o/ k( z, r
- const char *strcasestr(const char *haystack, const char *needle);9 B6 [" Q6 o* P+ h
- #ifdef __cplusplus# T8 _0 [# k! c* _- P
- }
3 `! X, w0 t0 y4 `% v - #endif
复制代码 9.amr-nb/ K4 H j$ Y! T5 J/ K; X
- wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2
, q1 |) E. I/ M; s) H1 v j - tar -jxvf amrnb-11.0.0.0.tar.bz2
6 m. F. f& ~; b/ ?$ t1 R- K - cd amrnb-11.0.0.0
( |4 k; n& f- ]# k& | - ./configure --enable-shared9 \) T8 i: U) c$ Y9 B6 F
- make 8 A* {- ?' ?/ o" r0 o% H" V6 T* E
- make install
复制代码 执行./configure可能遇到的错误:
, r# D2 Z) x2 }7 E$ v$ \- configure: error: You need patch utility to prepare sources.
复制代码 解决方法:* u& \6 `, s/ L: S& F
10.amr-wb
+ e% l# d7 Z4 M- wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2, }. A# y' D* g- ?: ]3 C- U# L
- tar -jxvf amrwb-11.0.0.0.tar.bz2
- n5 s/ U& f( `8 C2 H - cd amrwb-11.0.0.0+ T8 n/ L- T% R0 i6 Y2 p# k0 Q7 @
- ./configure --enable-shared
' P& _% r4 I) g' M - make
3 ]% v! P' p2 A E- m/ c3 I9 } - make install
复制代码 11.yasm
5 I0 Q! O Y' e# Q4 g* Rffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。
9 R, O6 {" d7 o# c# e12.ffmpeg
1 z- \) t3 r! G6 K- wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2
0 ^ ~' v# f! {$ h& F% X - tar -jxvf ffmpeg-4.1.3.tar.bz2
: R4 ~9 `1 x3 [9 r0 A7 ~6 s - cd ffmpeg-4.1.3
; v) L g, x8 ^ X - #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.
. D# F' _0 B1 [3 ?+ q5 R) ~* } - #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。
% F, z5 }5 }! b& h2 f/ B - ./configure --enable-shared --enable-gpl --enable-libx264: e. l. X- E3 w( W
- #编译,需要较长时间,10分钟左右。
6 `6 s1 R M; s* W6 ~& b - make
& Y( m* U* \7 v$ l6 v - #安装
( Y4 {7 J% y% ~. |% I& w2 W - make install
5 b2 _0 n2 \# V5 n4 g, z2 ^- M - #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下
. K8 v" |; k% G - echo "/usr/local/lib" >> /etc/ld.so.conf0 Z* M) j" ^* k4 e+ t
- echo "/usr/local/x264/lib" >> /etc/ld.so.conf
t, |$ X6 j( B% V& C% [3 Q - #再执行ldconfig,更新ld.so.cache,使修改生效。; @: _! B5 }+ t, L" `
- ldconfig5 [8 ~9 i$ j' @
- #添加环境变量
2 b0 z& U* V( [6 T - export PATH=$PATH:/usr/local/lib
7 R) J# Y. n$ @/ ]* r! d - #最后执行ffmpeg -version查看版本。
复制代码 如果执行还会报错则查看下ffmpeg的依赖是否完整:
. w% k1 h- x% M- ldd /usr/local/bin/ffmpeg
复制代码
% M& `# M) p/ D如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
; _; x! m, G; S+ R- #切到编译的目录下
6 R! k% u7 A4 k e2 l - cd ffmpeg-4.1.34 x9 W2 O, `5 u& U g: Q( U
- make uninstall
复制代码 13.测试2 F" Z/ L+ ?" \8 _8 p$ ]! k
- [root@localhost ~]# ffmpeg -i /root/Videos/111.avi /root/Videos/1ew2q.mp44 k1 [+ w3 z4 F7 j4 w6 ?
- ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
: _8 T" o5 @, z- H- p - built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)$ x# o7 D* t, Y7 z( ?# j$ I
- configuration: --enable-shared" F, W3 P- r( R
- libavutil 56. 22.100 / 56. 22.1009 w5 J# }) d! h l
- libavcodec 58. 35.100 / 58. 35.100
4 T+ [6 O, k1 v& T( W" Q - libavformat 58. 20.100 / 58. 20.1001 B5 q5 T6 A' W, v4 E
- libavdevice 58. 5.100 / 58. 5.100
+ t |) E' B" L" [- O - libavfilter 7. 40.101 / 7. 40.101' R# W3 p2 ]$ G n& n! ]
- libswscale 5. 3.100 / 5. 3.100! x. P0 {. V1 a P% `( I
- libswresample 3. 3.100 / 3. 3.100
7 [& ]+ Y T. o: L$ d8 l+ H i# g2 a. G - Input #0, avi, from '/root/Videos/111.avi':
4 S. d, I* X8 H9 G. Y - Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s
% {$ g! r8 \# f1 b7 Y, _ - 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
, I7 F# q7 R3 X8 F7 y5 C - Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
0 O- e) d6 z2 `& R$ Y/ O: z, G8 c2 E - Stream mapping:6 M8 {+ k8 f* S0 |+ o- m
- Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
/ Q! Q* H% F6 h - Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))
3 d; I# J2 B/ N+ x! y - Press [q] to stop, [?] for help
1 x- I7 |% S/ i4 i; u! E - Output #0, mp4, to '/root/Videos/1ew2q.mp4':
$ L B' N5 {: C5 Y1 }. \2 ~* i - Metadata:7 G- h6 z* f6 |3 o$ L
- encoder : Lavf58.20.100
' r: c7 h% d# x8 Q3 k7 D, v5 M+ Z - 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! [8 v0 ?0 w3 ^. p) Z. ]
- Metadata:
0 K0 `! t4 ^$ T5 q$ v - encoder : Lavc58.35.100 mpeg4% W, A% x1 @/ B* V" f G3 t( w
- Side data:+ P5 p# X/ ~- c% v9 G+ @' q+ f N
- cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1! ^- m/ j, e- j- A: p6 {
- Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
+ G% v& E2 x2 z) d - Metadata:7 E" Q, o/ O( b0 f/ F
- encoder : Lavc58.35.100 aac
& C6 e u; n! Y9 y. C/ R5 \ - frame= 351 fps=0.0 q=12.3 Lsize= 870kB time=00:00:17.50 bitrate= 407.2kbits/s speed= 20x
! p+ J- k6 [- ^+ K9 W O# v - video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%8 W$ X2 t0 _- `& r3 @
- [aac @ 0xc51f40] Qavg: 1530.201
复制代码 x264编译的指令如下:
! S( T2 i7 I) I" ]- O8 F- ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码 % r/ r: A+ } R; d6 {
+ A; ^; @, o; m- @, e
& I6 d7 j) |, M# ~/ K' v; t9 A. Z1 b1 U
6 m7 V2 o) L3 |1 r% y1 d
6 p7 Q0 b) R: O0 K; B; X2 O/ K: d) N3 }) V1 m' k
: T& S8 T4 T7 ?5 }/ V |
|