|
|
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本
/ f1 S: J! O/ W& r装ffmpeg之前需要安装各种解码器。
- y& F' A9 h7 L+ i& P没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。
( f& O7 J1 U/ x1.lame- wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz& n3 P# e. k& |& y) H+ T
- tar -zxvf lame-3.99.5.tar.gz3 a# x' k' X9 z' ~0 [
- cd lame-3.99.5 / z6 Q/ J4 X c* u0 T6 r
- ./configure --enable-shared
7 m2 ]: @5 ], v - make % Z" F7 ]% x4 V% E
- make install
复制代码 执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH+ t% t. ] V9 o
则需要我们先安装GCC。
! C7 \2 d1 u) z n& {" X, M; W安装完成后再执行一遍。
: z; L% Z0 m" Z/ d2.libogg- wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz' r7 j/ o& y/ D! e
- tar -zxvf libogg-1.3.2.tar.gz
. f: f& C0 i( k6 [8 G - cd libogg-1.3.2
! C& W2 n( Z& m" z! P; t! W \ - ./configure --enable-shared. g- O+ d! g/ U
- make 1 X' A. e/ K" J# D. A, Q; N1 G& A
- make install
复制代码 3.libvorbis- #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装5 }/ _; m6 s h% g" H$ X; i- m
- wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz" d9 _3 V1 ?% K9 B' d
- tar -zxvf libvorbis-1.3.5.tar.gz$ |5 L1 V0 r6 t4 r: L
- cd libvorbis-1.3.5
9 v0 \9 }6 v8 o$ i& p+ L; z - ./configure --enable-shared; r% Y6 _1 F7 k
- make , m% Q; v' M0 y" o8 e
- make install
复制代码
) R, s$ N; e$ \' r. S7 Z执行“./configure --enable-shared”如果报以下错误:
7 @2 S' A7 l2 hmust have Ogg installed!2 I7 a, j7 J9 O. I0 ^
我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。! l4 A8 S3 _3 ~2 K2 O. d
解决方案:9 G; y. b$ F& @) k7 J9 ~# p! a
- [root@localhost ~]#vi /etc/ld.so.conf( g7 j* }- q3 U1 ?2 v
- include /etc/ld.so.conf.d/*.conf
: o( E2 u2 R- E - /usr/local/lib
+ t" N2 R+ h! m# k4 W. J - [root@localhost ~]#ldconfig –v
复制代码 4.xvidcore- wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz7 H' U. d" z' N( A, {
- tar -zxvf xvidcore-1.3.2.tar.gz ' n6 i. `, z" ~! A4 x
- cd xvidcore/build/generic$ b) |0 D9 M+ p; D
- ./configure --enable-shared
4 B& j8 V& e8 f. ?" H% `4 I$ F& u! a - make
" }; S. @3 I9 K - make install
复制代码 5.x264
3 m/ D+ E! l! o7 m' t
, X* [* E) `9 T+ \/ r, t- m/ V) Y
4 N/ X+ X' r& e& ylibx264需要nasm的支持,nasm是一个编译器的角色。9 e8 @$ G6 d5 G$ m6 z. W* m
安装nasm:9 @. `" _+ }$ i
- wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz
0 A& ]8 T" S' V4 z$ R/ s0 g% c - tar -xvJf nasm-2.13.03.tar.xz
) G3 C- m+ W* t+ ?# k - cd nasm-2.13.03
$ h, P4 M+ q5 \' y5 A4 Y - sed -e '/seg_init/d' \# z8 w4 X q( m6 ?
- -e 's/pure_func seg_alloc/seg_alloc/' \6 t" ?/ W6 Z i6 E! I6 N1 V* V
- -i include/nasmlib.h
' ^, m, n( ?" t( K+ a* _3 I( t( s - ./configure --prefix=/usr &&% S1 \2 w" s- W) k
- make7 T8 x3 x1 |1 D6 o- s
- make install
复制代码
) b& o! O* K) ~, w: i
安装完成后再安装x264
+ W0 W& p8 \) f s8 r. R0 F% @- wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz23 k3 k8 M9 I. z% _
- tar -jxvf x264-snapshot-20190402-2245.tar.bz2$ A5 |8 f! }9 ]; e( g m
- cd x264-snapshot-20190402-2245
3 G" @8 I: g- a- v- Q2 T0 g - ./configure --enable-shared
; l1 X4 j( Q4 {5 P - make / x8 n6 J8 e' ^, Y3 ~. w/ M- A
- make install
复制代码 6.libdts$ U8 K: q7 p, M. B
- wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
. {, |( m4 t0 O- P" J - tar -jxvf libdca-0.0.5.tar.bz2
5 N# v5 R8 S! O* f* t4 Y - cd libdca-0.0.5
) j6 {9 G8 y; k8 `. A; P( G - ./configure --enable-shared
@: ^7 \% s/ T - make , Q. R! R' a) u# i/ a7 Z' j
- make install
复制代码 7.faad29 W5 M8 u" i! a
- wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
8 D$ [' \3 P0 K: P7 I! U' |" F9 ` - tar -zxvf faad2-2.7.tar.gz ^, ]( a% v" e- Z0 ?
- cd faad2-2.7& G J, m b& X& w
- ./configure --enable-shared, X' H0 z8 }, v2 l# a" r
- make
; Z' L/ `# s+ w1 W& F - make install
复制代码 8.faac0 C; z. i: \& }/ Y0 S& \; S# Z" v
- wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
' q% h( f1 P& c9 t - tar zxvf faac-1.28.tar.gz; Y. s( j: A0 N: }' N$ R; p0 a
- cd faac-1.28/ n" W5 o4 O+ u; G8 ?: Z
- ./bootstrap0 D; }% `3 V& g, y7 Y; M4 a
- ./configure --prefix=/usr/local/ --enable-shared6 Y p4 x4 [! N1 `. \: g
- make && make install
复制代码 执行./bootstrap报错:+ n0 t2 F& i; l1 S$ n" x
- [root@localhost faac-1.28]# ./bootstrap
; r: v5 [$ _& m" k4 e - ./bootstrap:行3: aclocal: 未找到命令
8 }& v+ w9 ^, K1 K5 W - ./bootstrap:行4: autoheader: 未找到命令
* L6 n" f* Q* H4 j' } - ./bootstrap:行8: libtoolize: 未找到命令+ K4 s( E- @. K1 d& f
- ./bootstrap:行10: automake: 未找到命令+ W2 ]* q+ q: u: ~) |5 Q' u; g
- ./bootstrap:行11: autoconf: 未找到命令
复制代码 解决方法:+ ]& q9 G$ B2 L3 H ` P; r0 }
- yum -y install automake
* R+ _" y0 t% l. @( |+ B$ e' o - yum -y install libtool
复制代码 执行make && make install报错:
) m$ I! X! o: N0 ]1 W" G4 D$ s- make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”
2 g \) S* C: v k) ^0 @9 {$ T - source='3gp.cpp' object='3gp.o' libtool=no \+ p! O$ e1 U6 t8 H9 L
- DEPDIR=.deps depmode=none /bin/sh ../../depcomp \
8 ]( C% Y: H! m0 t - g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -Wall -c -o 3gp.o 3gp.cpp
& i8 Y, k' p- ~ - ../../depcomp: 第 512 行:exec: g++: 未找到7 h) l, I6 i; b) `
- make[3]: *** [3gp.o] 错误 127
$ z' P9 h/ W; z; a9 a6 j0 O - make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”
" H. N3 P% l' v# p. c' U$ ` - make[2]: *** [all-recursive] 错误 1
% [9 N+ G$ C. |0 B/ L8 B9 }$ Y% { - make[2]: 离开目录“/root/Downloads/faac-1.28/common”# n7 ^) ~3 K' }
- make[1]: *** [all-recursive] 错误 1
O4 n* d( J6 W - make[1]: 离开目录“/root/Downloads/faac-1.28”( K7 U; b' U8 _8 Q X+ ~. ^+ Y
- make: *** [all] 错误 2
复制代码 解决方法6 W4 N: T& @+ V% T4 _
执行make && make install时报错:" b7 u' s- q$ n# B3 e3 {/ N h
- [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码 解决方法:& f) F5 Z2 _7 Q# a; q% Z
- 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
" ^; |& r4 @# @ - 解决方法:
, B+ k7 H$ F+ @7 {- c' h& ? - 从123行开始修改此文件mpeg4ip.h,到129行结束。1 y& @2 v* }- ?! M. \2 u
- 修改前:2 N, [ E7 A% _1 t
- #ifdef __cplusplus2 F5 C$ p0 w+ R7 X
- extern "C" {
6 X9 c) ?7 c3 D9 P3 Y1 u - #endif; n% h& e; R4 A* z$ r8 C1 ~' O
- char *strcasestr(const char *haystack, const char *needle);% P9 r( f$ I% K
- #ifdef __cplusplus# ^' y: Z8 d# M4 w7 m" v
- }: ~ @9 ]" g. n
- #endif
! u4 V8 x' X( ~# q- x6 v -
: Q6 s6 O7 Y: @% b) X) l& S - 修改后:
; A2 F! D3 }% J% I0 M2 f1 W7 J4 ^ - #ifdef __cplusplus
; R, J8 e2 D1 M0 j - extern "C++" {- G7 p* K) s+ x( R1 U/ O
- #endif/ d# F& }2 |# L( D, X6 q; K
- const char *strcasestr(const char *haystack, const char *needle);
3 E) A w1 o# s: E1 ^% ? - #ifdef __cplusplus
`5 n+ C1 G, r9 y, ^7 { - }) Z5 T" _$ i3 r' S
- #endif
复制代码 9.amr-nb
* l9 M' I4 R6 a# v- wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2; j. ~; s a/ N M6 d: Q" _
- tar -jxvf amrnb-11.0.0.0.tar.bz2" u: `/ k5 v% R8 N2 n
- cd amrnb-11.0.0.0: R: ~$ e% l2 R, J
- ./configure --enable-shared' _% q$ I6 b6 l! o. F
- make
/ k0 n& R/ I" K/ H7 w3 p - make install
复制代码 执行./configure可能遇到的错误:0 F5 c( w. O) y- Z
- configure: error: You need patch utility to prepare sources.
复制代码 解决方法:2 F N# ]) ?' H7 i
10.amr-wb: ~% z2 N% r0 f
- wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2$ v& |- L) c. |# W5 \! f
- tar -jxvf amrwb-11.0.0.0.tar.bz26 O3 {$ Z$ b: D
- cd amrwb-11.0.0.01 ~' D* _1 } [* ^5 [
- ./configure --enable-shared8 y# n4 v- V: ?4 m
- make
4 O1 [6 A7 X+ m l - make install
复制代码 11.yasm
8 L2 r8 s2 |7 T0 L% q" Dffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。
$ j* B. f! Y" T, V6 S12.ffmpeg
( g( P& ?1 y# O4 a% m$ |- wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz21 k% y, X% t. l, H8 G& i4 u% ^" \
- tar -jxvf ffmpeg-4.1.3.tar.bz2
1 y' o. g4 ^, c3 V0 b r - cd ffmpeg-4.1.3
* L# i5 P0 u. P4 y - #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.2 n1 }7 F: l* @) N: e& e
- #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。
' @, n9 v# G, e* o - ./configure --enable-shared --enable-gpl --enable-libx264
S/ t6 |9 _' p! r( O - #编译,需要较长时间,10分钟左右。
3 i& b9 t& y+ O0 p& V7 Q9 @6 u% v - make7 {9 \) Z* y* o. d% U
- #安装7 u2 v- Y1 A8 V5 \
- make install
* n7 B3 p! C: u. f& h: X$ d - #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下
( V J( \+ u9 v* _ - echo "/usr/local/lib" >> /etc/ld.so.conf. n+ \6 w0 a7 Y: R* w( H2 k% O+ ^7 [
- echo "/usr/local/x264/lib" >> /etc/ld.so.conf$ D' n3 ]: r# I: l( G
- #再执行ldconfig,更新ld.so.cache,使修改生效。. o) y5 `8 F( ~. v
- ldconfig
) G% ?8 G& z5 c7 j( n! R6 U - #添加环境变量- d" Y# j! |' F8 K( [; l
- export PATH=$PATH:/usr/local/lib
) S3 d; |+ v9 q0 T - #最后执行ffmpeg -version查看版本。
复制代码 如果执行还会报错则查看下ffmpeg的依赖是否完整:6 B1 _! P7 K1 G# r
- ldd /usr/local/bin/ffmpeg
复制代码
" Q& Y, G5 `7 z: }) Q( \) d如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下: @# r' ^- g/ G! e* H# A
- #切到编译的目录下+ F# |1 X' I- Q5 T: M5 i
- cd ffmpeg-4.1.3; ?* V" u O: K& e. ^
- make uninstall
复制代码 13.测试7 N: f* h* \: R8 V$ y7 h, ^
- [root@localhost ~]# ffmpeg -i /root/Videos/111.avi /root/Videos/1ew2q.mp4 L# c; G6 F9 O6 S9 K1 A' ^' |- A
- ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
+ C9 @8 A6 e8 M( }3 w# V/ m - built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)% {* Z' X9 U7 y+ {8 z8 W1 f
- configuration: --enable-shared5 x, V5 N% R U) J* ~
- libavutil 56. 22.100 / 56. 22.100
4 D: w0 {) y( {% b2 P - libavcodec 58. 35.100 / 58. 35.100
, V- `- G1 h& V# {# | - libavformat 58. 20.100 / 58. 20.100
* P& V3 N, w' |+ ^4 c5 b - libavdevice 58. 5.100 / 58. 5.1007 ~/ E# a# N" M
- libavfilter 7. 40.101 / 7. 40.101: W! r' T) \1 q; k
- libswscale 5. 3.100 / 5. 3.100
# i) k$ T8 R* d$ `, P# V- v0 H5 U) h - libswresample 3. 3.100 / 3. 3.100
, p0 a& @8 @' r5 u, G. @ - Input #0, avi, from '/root/Videos/111.avi':
" ?% y3 y8 \7 x/ E - Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s) L4 s: y: v e9 J
- 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: n3 b8 z# y1 ^+ @ a) ]7 q
- Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s" R+ j+ q, o9 `" ^* o1 T8 S
- Stream mapping:
( w" {9 V9 b7 h5 s - Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))" W2 w- x- v( K8 H7 z2 C3 z
- Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))
2 C( @2 u' G, Z. F6 m - Press [q] to stop, [?] for help9 Q# l2 c4 ?0 q( A1 \
- Output #0, mp4, to '/root/Videos/1ew2q.mp4':
0 W/ N7 C. t2 ]. R: M - Metadata:& f* P. r* g1 b3 T
- encoder : Lavf58.20.1008 }! V& f! @6 S7 c2 Z% L3 f7 K
- 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
! l t6 J3 ^0 F. V( W2 a( L$ D* X - Metadata:: C) M" u' ?3 P/ N8 }1 g! y
- encoder : Lavc58.35.100 mpeg4
! |7 H8 l! E, [- Q$ m! H. s' o - Side data:1 ]9 n1 A" J8 y2 }) C
- cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1$ Y1 ?" e4 d; N5 A
- Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s( o7 l; X0 B# h9 H7 A; R
- Metadata:* O# O& _* Y* {2 N. m/ n
- encoder : Lavc58.35.100 aac
' E7 l. T, w2 C8 \( U: B4 D; |5 S - frame= 351 fps=0.0 q=12.3 Lsize= 870kB time=00:00:17.50 bitrate= 407.2kbits/s speed= 20x
3 c$ \7 \, z* g$ P% y7 C - video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%
) V1 j; v% t- T3 q+ r: W& D* i - [aac @ 0xc51f40] Qavg: 1530.201
复制代码 x264编译的指令如下:
- {! p1 Q0 h M- \# E" H- ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码
+ y5 L* G+ D9 W) P2 T
1 O+ E0 M1 o; `2 H3 u6 Z: f& }
& \4 I2 t' k& r- ^8 n
7 U g. [; j' y: _% Y [ \; O9 b4 m. R! C, U
3 j# E7 N: o1 u5 Q
( q. h1 Q+ U; k) N; f9 {
* {( K# Y0 x, E2 n' ] |
|