|
|
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本& Q0 X# [, B g" H+ U$ x7 w7 c
装ffmpeg之前需要安装各种解码器。
$ `9 a/ a( M9 z4 H1 y4 s4 @9 |没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。
- T! `) @, ^1 D8 N1.lame- wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz* F' { \, k) O" ^6 x
- tar -zxvf lame-3.99.5.tar.gz, E1 r3 Y' m# `
- cd lame-3.99.5
) _& C2 y, z. U; K - ./configure --enable-shared
, x: \1 N( U1 F: z+ ?; i( g* t - make % c, h/ ~2 Y, A9 l4 F) }4 |5 K
- make install
复制代码 执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH: r& W+ M# k6 Z2 z# h# [2 c
则需要我们先安装GCC。, [; s, }* H# X
安装完成后再执行一遍。9 x$ q& F* L# i/ [ }2 `
2.libogg- wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
9 V, Y" Q/ u. x5 e4 M. c j3 k9 _* b - tar -zxvf libogg-1.3.2.tar.gz
' J. h$ m7 o7 ?8 g& A4 ~ - cd libogg-1.3.2
9 Y% L' ?/ Y/ k T9 A - ./configure --enable-shared: i. g1 u; R$ S% l$ f% m' W
- make 5 I9 Q$ v {" J3 s
- make install
复制代码 3.libvorbis- #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装
: F ?. T0 C; _ - wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz. O- i6 `$ I4 Q
- tar -zxvf libvorbis-1.3.5.tar.gz( @/ }: q( O: R% n9 c2 v3 c* h
- cd libvorbis-1.3.5
R: D) h* g A n1 O9 [ - ./configure --enable-shared/ r3 B8 Y4 q6 Y- r8 r! h
- make 0 S4 j5 g' G9 N0 F, n/ [5 ?
- make install
复制代码
7 ?5 f! j/ [8 M" g执行“./configure --enable-shared”如果报以下错误:
" v, I w1 N& T- a7 f) \& Qmust have Ogg installed!
- G7 m; ]& V6 ~- O' D& N5 i我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。# v* X1 @ X& W! T8 S
解决方案:
: ^+ j5 [! V. _+ W& r. j; p- [root@localhost ~]#vi /etc/ld.so.conf+ X1 ^2 `: a4 J: q
- include /etc/ld.so.conf.d/*.conf & }/ f& X; K$ E( C
- /usr/local/lib2 H/ }) `# T3 {! G, P6 j6 u
- [root@localhost ~]#ldconfig –v
复制代码 4.xvidcore- wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz4 E3 G0 J+ T7 T; Z, K
- tar -zxvf xvidcore-1.3.2.tar.gz
4 X$ e# _. m% u9 m' b - cd xvidcore/build/generic; v1 Y( ~% j5 o& N2 E- D/ i
- ./configure --enable-shared
& S! ?7 e, {' p* B7 M1 G1 ~ - make
9 e2 {( p+ Y1 V - make install
复制代码 5.x2640 G1 x, _2 z7 Z b4 j* w
3 u" K- b. Q' t; C1 m7 j A9 `
8 a/ I- w9 w! C, k G. z: e) A" alibx264需要nasm的支持,nasm是一个编译器的角色。
; Q8 ^) v( T# B安装nasm:
1 i3 _, ?' q) F1 B3 [- wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
& D; Z2 O% m* ?1 q2 [" B+ Y: s& G - tar -xvJf nasm-2.13.03.tar.xz
0 H- }$ `) j( B& l - cd nasm-2.13.037 ]; c5 x# U6 M( [% o# z0 P: i
- sed -e '/seg_init/d' \
. B/ @7 q+ ~: _2 \8 Y# i - -e 's/pure_func seg_alloc/seg_alloc/' \
0 d- K. t2 j; e$ g2 F' X - -i include/nasmlib.h; l. T! }7 k, ]( H
- ./configure --prefix=/usr &&& l4 _5 S8 y5 U: `
- make$ U- a% j2 h. x& s' J8 W1 U
- make install
复制代码
% \- s9 J& f. S( C! I( S3 R! H
安装完成后再安装x264' M! ? z( [& M8 ?4 Q
- wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2
( I1 E8 u I; e1 K3 U - tar -jxvf x264-snapshot-20190402-2245.tar.bz2$ y, J' {( \2 R T3 n3 \. }
- cd x264-snapshot-20190402-2245# U1 y; c6 h1 M. }
- ./configure --enable-shared
; _$ i& T3 L5 l4 i k$ `' J - make ! P2 k5 Q+ X1 F1 s, S+ w; v
- make install
复制代码 6.libdts: V* b1 F7 m! E+ \# }
- wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2+ H% k4 g0 {/ K4 H0 h
- tar -jxvf libdca-0.0.5.tar.bz28 {2 M3 _) P+ w) `3 X
- cd libdca-0.0.5
( y1 ^# v# d& U# ] - ./configure --enable-shared0 g3 f8 y$ m; E) M$ { b$ U8 q
- make ! H) c- S6 k0 J/ P
- make install
复制代码 7.faad2" H" g7 W1 h' C- \) a
- wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
( ^1 y' B. W4 h - tar -zxvf faad2-2.7.tar.gz
6 Q' S- Z( m+ s3 w- q" w8 x. _ - cd faad2-2.7
9 b6 c" s" g# s! f* C! ]7 M8 u - ./configure --enable-shared
3 Z B$ z' _& Q" }2 O1 } - make
& O( |: y0 X- r) d) j4 e" F/ P - make install
复制代码 8.faac
3 A. I* n/ V9 s$ Y- wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz7 R/ M/ Q" G" F9 V8 P. B8 K
- tar zxvf faac-1.28.tar.gz
9 x2 X1 E9 b6 a/ i* p& A, O! D - cd faac-1.28; I' M1 B% {/ Q) J+ f6 J
- ./bootstrap9 \) \, M) a$ Z5 A: | S3 R6 O
- ./configure --prefix=/usr/local/ --enable-shared
' T. e! x, A' @ - make && make install
复制代码 执行./bootstrap报错:$ j$ O. c. X) Y, X, t
- [root@localhost faac-1.28]# ./bootstrap% _4 { a$ K1 j$ O7 b2 t
- ./bootstrap:行3: aclocal: 未找到命令
/ K) K2 s( _+ @$ r$ H9 C' t2 O1 [ - ./bootstrap:行4: autoheader: 未找到命令% Y1 d. N1 U) N0 i7 k8 q+ N2 L
- ./bootstrap:行8: libtoolize: 未找到命令
4 r& D4 c2 V `( `$ y# b2 L: e( S - ./bootstrap:行10: automake: 未找到命令
. l& w1 F- }% q9 k8 Q- M( T - ./bootstrap:行11: autoconf: 未找到命令
复制代码 解决方法:
" M! `/ j3 _6 T, j7 i1 C2 M- yum -y install automake0 n* h3 m/ g. U- ?2 i
- yum -y install libtool
复制代码 执行make && make install报错:2 w; Y+ L M6 r
- make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”9 C+ t: V6 O+ h* b- k. F: _. {. z* \
- source='3gp.cpp' object='3gp.o' libtool=no \3 V- s& z9 W _
- DEPDIR=.deps depmode=none /bin/sh ../../depcomp \6 v. V5 K/ I. `$ ?+ O1 q
- g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -Wall -c -o 3gp.o 3gp.cpp
# H' }5 K2 e! i; H7 D - ../../depcomp: 第 512 行:exec: g++: 未找到
4 ]3 U9 {9 Q- ]9 t# o' k/ Y - make[3]: *** [3gp.o] 错误 127
; Q$ n5 T$ H! V' Z - make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”" j# U1 J; z9 _ Z0 v
- make[2]: *** [all-recursive] 错误 1 ^; l# [9 x4 F& K+ {) c) z
- make[2]: 离开目录“/root/Downloads/faac-1.28/common”
7 M. L" ~; ^. R% W) B2 n( ` - make[1]: *** [all-recursive] 错误 1
) k6 g9 A% ~/ D/ u9 J9 Q# g - make[1]: 离开目录“/root/Downloads/faac-1.28”! W5 Q `; d7 @: S) J& U4 O' e
- make: *** [all] 错误 2
复制代码 解决方法
1 c3 u9 \; }- m# E: A& I执行make && make install时报错:2 @! }* [5 F; ~( ~) l5 f
- [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码 解决方法:, G( v( D. |- H6 q% i- }, T/ s
- 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
; S. J2 |& I8 x2 l; w - 解决方法:
, N0 {/ `7 ?) d0 } - 从123行开始修改此文件mpeg4ip.h,到129行结束。* w2 b+ `& {/ B8 a' w
- 修改前: p7 Q, c8 J/ g9 ^
- #ifdef __cplusplus/ ^, B' d$ _- W E; u
- extern "C" {! A2 Y6 f T8 I0 `
- #endif1 a' K( [ Z/ D* E$ `
- char *strcasestr(const char *haystack, const char *needle);- e, t: P% k4 t, \2 R2 O+ ?; {' G
- #ifdef __cplusplus; R5 M) C% F* ~! p4 o, S) X
- }8 |4 b4 ?) M- y2 ]
- #endif
* `/ F: ^# N# X9 ~2 } -
* M7 f5 n6 @ ]8 v" b& @ - 修改后:
; b8 s" c: Q* H - #ifdef __cplusplus
2 \3 ~3 F" M5 s* g4 Z% R9 W; G - extern "C++" {7 n8 f) R1 k7 k7 a& X
- #endif* U/ D& D; `9 @+ X7 p1 X% c! ]+ u
- const char *strcasestr(const char *haystack, const char *needle);7 z0 f$ o* p; T2 u5 I$ B
- #ifdef __cplusplus# M( _- p: D$ Z1 y, Q/ h# Q$ _
- }1 p: F5 S+ r0 N5 \2 }4 i5 L {. S- d
- #endif
复制代码 9.amr-nb
! k1 ~0 x1 O3 N( o- wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2' A5 q7 }+ I/ h. `5 O5 M" H+ H
- tar -jxvf amrnb-11.0.0.0.tar.bz2
; `. }! O8 c- i* N; H- z - cd amrnb-11.0.0.06 m! ^+ ?$ w4 \4 b& ]6 @: j
- ./configure --enable-shared
+ P7 R6 Q: j. [8 }4 w+ O' q. e, _0 o - make
0 e6 B1 |# X4 ]. L - make install
复制代码 执行./configure可能遇到的错误:) O+ G& {! r8 W3 m- u8 X
- configure: error: You need patch utility to prepare sources.
复制代码 解决方法:
, v {3 m. t" `% t4 H7 K/ ?10.amr-wb$ w6 H/ ^9 `' u
- wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2
9 p9 l- z2 R" X+ ~! d - tar -jxvf amrwb-11.0.0.0.tar.bz24 I/ f7 }) G$ n1 y n( b) }) {
- cd amrwb-11.0.0.07 M! y0 M$ W/ j2 G1 Q c
- ./configure --enable-shared
& V5 K; Y' J7 \, _" E - make 2 p$ s% H/ A* E- i7 v7 P
- make install
复制代码 11.yasm
" X) r$ d& q! f; J5 ?ffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。% D: x& r( n! G
12.ffmpeg
" } M$ g8 O. b8 V6 P! y( m; x- wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2
; g$ k1 }4 ]. w4 E+ [ - tar -jxvf ffmpeg-4.1.3.tar.bz2
4 q/ q. s! _- ?: S3 U% [1 B - cd ffmpeg-4.1.3
' h1 W2 L: X- r( Q5 m7 j. H% M - #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.3 [2 }4 @9 A* ]- ]& q; q. p
- #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。
& ?% j: V5 T0 {2 `$ O - ./configure --enable-shared --enable-gpl --enable-libx2641 S5 w0 X V. W0 q" m
- #编译,需要较长时间,10分钟左右。* i5 i& V7 X% u5 N; O/ S, d
- make
2 T* J" M$ m* t/ {0 |1 e y7 g7 I - #安装
) o' p- \, Q* \7 W% J - make install
2 ]8 {# o, t0 n& d$ D - #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下
, ^# k" r; v0 O+ h" I& L - echo "/usr/local/lib" >> /etc/ld.so.conf( [3 T0 p- `( V1 m) E& d! ^; y. i
- echo "/usr/local/x264/lib" >> /etc/ld.so.conf% Y! i! X P# x$ @. S' J- B/ p
- #再执行ldconfig,更新ld.so.cache,使修改生效。- E/ Q; K) n" b" @
- ldconfig* M1 B5 D1 u3 c8 s: x" Y
- #添加环境变量
1 t; N0 u2 X. ]# S - export PATH=$PATH:/usr/local/lib
/ ]+ ^$ C$ C/ `8 Z7 U - #最后执行ffmpeg -version查看版本。
复制代码 如果执行还会报错则查看下ffmpeg的依赖是否完整:# N; D8 k" v3 Y0 D' O
- ldd /usr/local/bin/ffmpeg
复制代码
V; ^. j9 [7 N, f$ Q w如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:& ]1 C3 q4 a2 ^" f: \1 J, L
- #切到编译的目录下" v0 T. d2 [: v5 q
- cd ffmpeg-4.1.3
d9 k+ ^1 A1 x- ]$ w# v3 J - make uninstall
复制代码 13.测试6 V/ _6 Y" Y5 w/ F4 d; O6 `( U
- [root@localhost ~]# ffmpeg -i /root/Videos/111.avi /root/Videos/1ew2q.mp4
4 W4 |! ^$ B0 p1 x# ] - ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
- g! C a( u4 \/ M1 M* q - built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)- z1 c! W2 K4 t' F; @* }
- configuration: --enable-shared
+ j ]' b2 }* M - libavutil 56. 22.100 / 56. 22.1007 o7 O6 S8 \6 u; d5 q8 I0 r
- libavcodec 58. 35.100 / 58. 35.100/ d. S& n/ l2 S, G5 x
- libavformat 58. 20.100 / 58. 20.100
: I3 T/ C. j1 b4 R% G$ X7 u - libavdevice 58. 5.100 / 58. 5.100
$ \: [ `, y; g: t1 a& G9 V1 V - libavfilter 7. 40.101 / 7. 40.101
. E8 }, D2 _% ?3 A S. A2 C - libswscale 5. 3.100 / 5. 3.1000 W* J8 @& z, V# K
- libswresample 3. 3.100 / 3. 3.100
: C9 W3 o+ j: X5 s - Input #0, avi, from '/root/Videos/111.avi':
: `1 y, w$ d* o* L7 H: Q - Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s- m. \ N& _1 Z* 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$ r+ z% @: P7 s$ Y0 E: `7 u
- Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s1 y1 q. C$ Q# O6 t1 ?; { |
- Stream mapping:0 `2 p: g, x! {' O8 u- C7 D( H
- Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))! `1 h* q0 t: J8 J, T3 G
- Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))/ b* P2 b$ G+ X/ h
- Press [q] to stop, [?] for help. }) L3 D! `3 x6 c
- Output #0, mp4, to '/root/Videos/1ew2q.mp4':1 I6 ]' X% Q0 s1 ~7 Z M# f$ j
- Metadata:- O& X4 x s# f9 F
- encoder : Lavf58.20.1009 }- _( F k- l. |6 Y5 K: t
- 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
9 @# v2 {# ~3 u$ Y. Q1 x; Y - Metadata:1 r& M7 ]! {, F. Y; P* E V7 c
- encoder : Lavc58.35.100 mpeg4
. Z0 ?- e0 c) V3 z, p8 L - Side data:
5 c+ M* }/ S2 S3 ? - cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -15 R( j& o2 _% X8 t9 X
- Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s5 U U, y* j7 T. e; t) J9 c- D
- Metadata:
4 M: W- X% {# S) y Y# C - encoder : Lavc58.35.100 aac3 ~3 \$ D% w4 z4 L
- frame= 351 fps=0.0 q=12.3 Lsize= 870kB time=00:00:17.50 bitrate= 407.2kbits/s speed= 20x 8 Z3 h& n# o" i" D7 h5 G# ~4 z
- video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%
8 m4 q) P$ I, \2 X* k, d! ~) O - [aac @ 0xc51f40] Qavg: 1530.201
复制代码 x264编译的指令如下:- {8 D7 N7 N$ F- G8 F! J
- ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码 # W+ b7 `9 V( N9 {
& B) @( {! s7 Q! V
! h+ o7 \ g% T& V
( z8 G4 Y: f; ~2 ]) l( ~3 i2 i! [
^, u9 m' R( ?3 S `9 d$ M0 m+ w! e& I- c& c. @
+ b' x3 P' x; c! ?) l
6 B* v9 q$ B0 _4 x% s5 V' ?: x( f |
|