|
|
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本2 e9 o3 o) ^6 R; C! d
装ffmpeg之前需要安装各种解码器。1 u, l9 [+ V( R2 s
没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。: b: U5 j' V" E' i; x: V$ H2 j
1.lame- wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz. `; N0 k9 G- F" w
- tar -zxvf lame-3.99.5.tar.gz
8 n% d$ j& @ Z F! S+ j - cd lame-3.99.5
* p' j" a$ T, T3 w: y. t0 | Q - ./configure --enable-shared5 x6 q- G" c g1 F" a# P
- make $ B9 M0 i% v$ Z& r/ P
- make install
复制代码 执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH
; J N: O) v- ?则需要我们先安装GCC。
1 f7 ], x" B4 B$ n: r/ D安装完成后再执行一遍。
6 }9 o) s2 `! u" c6 {6 P, p2 L) {2.libogg- wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz5 y/ I$ F) v: {7 i% s
- tar -zxvf libogg-1.3.2.tar.gz
+ j0 b+ g: S9 {: ] - cd libogg-1.3.2
6 J: F$ c p2 C0 Q7 b a0 I3 B - ./configure --enable-shared& n+ G( @1 o1 R
- make
$ _. T# [- x- B Y% ` - make install
复制代码 3.libvorbis- #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装
0 x; N/ m5 U) O' E/ g - wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
0 V' c' P' P& ^, Z6 H% u7 p0 o - tar -zxvf libvorbis-1.3.5.tar.gz( U1 G3 {* v; {& R4 }# S
- cd libvorbis-1.3.5
0 T% F% b/ L1 I3 B" Z- S: J - ./configure --enable-shared
0 x/ `# m5 V9 O - make ; I- X0 o; C+ Z1 ~( h2 V
- make install
复制代码
% N4 T+ }8 G( Y" t执行“./configure --enable-shared”如果报以下错误:$ e h; W! m7 t% K# k
must have Ogg installed!" F" z' c) G6 k( P7 j2 F7 ^
我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。
}, c1 U2 @8 y! b- D解决方案:
: ^; ^. v4 J2 v0 J0 h6 d- [root@localhost ~]#vi /etc/ld.so.conf2 l- d0 m2 q% c- c6 i. s2 B: T+ z
- include /etc/ld.so.conf.d/*.conf
0 V \$ X. ^+ T3 h - /usr/local/lib
y5 o# r* u/ v/ N. ~ - [root@localhost ~]#ldconfig –v
复制代码 4.xvidcore- wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
* u! a# W. x: [$ r+ k - tar -zxvf xvidcore-1.3.2.tar.gz w* c0 X( n: p, q B! u
- cd xvidcore/build/generic
1 w5 d9 Z# b a) g - ./configure --enable-shared, m. r) L4 n; k. e+ r1 p
- make
8 d( d" {2 F/ g - make install
复制代码 5.x264
9 I9 G; `0 G1 S
" I8 ~: |. x! g0 A6 e& L% Z8 \, T1 z" t+ {3 Q8 q. J" ]) Q
libx264需要nasm的支持,nasm是一个编译器的角色。
# o6 V4 @, y w" o5 p# d+ ^ A# M: k& [安装nasm:
, S U; l4 [8 F/ b7 P7 h- wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz/ W# {6 E/ ?* s' i. c6 ^8 s$ B
- tar -xvJf nasm-2.13.03.tar.xz
$ d @/ E( }1 |+ |5 z" U4 @% m - cd nasm-2.13.03
/ L$ a p- d2 w0 b - sed -e '/seg_init/d' \7 |: f, Z. M( W4 O: L3 m' U
- -e 's/pure_func seg_alloc/seg_alloc/' \
" G( p& N' s- E' [2 v# N! C# W - -i include/nasmlib.h
9 u! T* A0 T! F- c% R4 b8 X - ./configure --prefix=/usr &&
' c( W! C* A3 L8 n0 D- ~ - make
6 K0 z( P3 J" V8 {/ G - make install
复制代码
% v$ f- U; w/ k0 l安装完成后再安装x2641 ~# W" v& Q9 j" T$ H
- wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2/ ?. i! J$ l) x. r/ f
- tar -jxvf x264-snapshot-20190402-2245.tar.bz2
f% A( J# W8 a1 k5 p - cd x264-snapshot-20190402-2245
0 _( i/ ?1 g6 X0 Z! Y - ./configure --enable-shared2 b9 d+ C3 J" u5 ^; ~5 E1 Z& I
- make
$ ?3 l) n$ D0 p5 Z9 |) A' w - make install
复制代码 6.libdts# C" U5 r7 }6 j. |! G6 R+ }
- wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
' \7 p$ n1 e$ G - tar -jxvf libdca-0.0.5.tar.bz2
8 p2 s# Y8 r/ A4 f- W2 P - cd libdca-0.0.58 F ]& h8 \ \
- ./configure --enable-shared4 C! M& `4 f9 d- B/ }- p9 `3 k9 c
- make 1 F3 N p' a6 u5 q+ w( Y. t
- make install
复制代码 7.faad2$ U+ _) I4 P, r$ y
- wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
. x% l' C/ f2 | - tar -zxvf faad2-2.7.tar.gz2 v$ _* q* x) f: }5 @
- cd faad2-2.7% C/ c/ N7 Z# r$ C" }9 k( G- ]" P7 [
- ./configure --enable-shared& B3 r' r8 `$ p/ H2 }6 L, [3 ]7 g
- make
! {, U: a' k0 D0 ^2 v3 k' h - make install
复制代码 8.faac
! B8 H& @' j7 k) G+ u( M+ Y; o- wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
) W0 H/ d- ^& ^, E. @ X - tar zxvf faac-1.28.tar.gz
5 `6 ?; `3 Q) P* @ - cd faac-1.28" a8 O' m; j x/ F$ R2 t
- ./bootstrap
' x J8 l, b6 L0 x - ./configure --prefix=/usr/local/ --enable-shared
3 x' c7 ]( _/ y( t6 L: f; W( j0 W - make && make install
复制代码 执行./bootstrap报错:
% _; K8 Y+ Z' w- [root@localhost faac-1.28]# ./bootstrap
' {* a+ m- s2 f8 [' \; d) c - ./bootstrap:行3: aclocal: 未找到命令5 P4 y; q [8 n) ]; A
- ./bootstrap:行4: autoheader: 未找到命令
4 {' G9 }+ T% s- n* Z - ./bootstrap:行8: libtoolize: 未找到命令
. W8 H. R0 |: I' ?1 N% } - ./bootstrap:行10: automake: 未找到命令
4 k6 A+ W6 n' @! h# v+ {* V- [ - ./bootstrap:行11: autoconf: 未找到命令
复制代码 解决方法:
) h# [: k) N) ]( q- yum -y install automake
! j# J( V1 O1 k! o- h* L' Y - yum -y install libtool
复制代码 执行make && make install报错:
5 r( O" x8 v. T( ]. h+ J% `- make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”
) z0 }% q/ v5 B7 d - source='3gp.cpp' object='3gp.o' libtool=no \! d8 o, n$ n( V+ s& |7 [& O9 _9 j
- DEPDIR=.deps depmode=none /bin/sh ../../depcomp \2 Q z; v- W3 f" b, Q. i
- g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -Wall -c -o 3gp.o 3gp.cpp
6 T2 |0 r# |) s - ../../depcomp: 第 512 行:exec: g++: 未找到
9 m& ^4 x. w$ p& z5 d0 c! b8 c$ G - make[3]: *** [3gp.o] 错误 127
" u( y& L: a( b/ [9 Q - make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”3 H# ]" L# ^" i6 {' ~
- make[2]: *** [all-recursive] 错误 1
$ m. J( R# Y3 t& ^3 z - make[2]: 离开目录“/root/Downloads/faac-1.28/common”
5 i+ | w$ ?2 A6 a: k( b$ l - make[1]: *** [all-recursive] 错误 1* F3 J% p) d& p) X. A$ S# r) J
- make[1]: 离开目录“/root/Downloads/faac-1.28”' J$ `' d! I( {3 a, \) z& `
- make: *** [all] 错误 2
复制代码 解决方法
5 _7 F A! H: A T s执行make && make install时报错:7 ~+ z# s% q/ g* o, E% N3 F" z
- [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码 解决方法:' D3 F4 B0 z6 n9 \; Y/ m& |, e5 t9 o
- 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)
3 ~, J( D1 [2 b( i% ~ - 解决方法:
2 I; h( Y" c! C- ?9 D% s - 从123行开始修改此文件mpeg4ip.h,到129行结束。& a7 p) L# v; U% o+ k; L' U( r- P
- 修改前:
; f% E8 Z7 b: |6 r" m! D - #ifdef __cplusplus
& p' E, F4 x3 Z0 f' W% t! r1 H - extern "C" {$ T7 Z& J$ E9 ?6 C
- #endif
) r, O; b; P, O0 ^ - char *strcasestr(const char *haystack, const char *needle);. k6 h$ s# @( e" j$ z& N: X
- #ifdef __cplusplus
( n9 v, l; T- P$ s/ k - }( G' H+ u6 S- i7 [. h+ F4 U
- #endif
* v# J: ?: T% ^0 t. _; N) L - 8 ?( W+ o# F" ]0 o6 ^ \& Y
- 修改后:2 N' }1 {+ W4 |
- #ifdef __cplusplus
/ T3 v e) i! x r' U9 g - extern "C++" {
/ u8 Y4 q, ^8 X8 J; }6 R% t - #endif
1 c5 g5 s* Z2 p6 ? - const char *strcasestr(const char *haystack, const char *needle);
4 b6 T4 k( C2 E - #ifdef __cplusplus
: F) r! L! B1 @! e7 s6 o2 l2 H - }
: c% n( A3 }$ y! Y G& E5 [ - #endif
复制代码 9.amr-nb1 A$ D2 R0 k: A" T+ `/ _3 p
- wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2$ h7 ]6 \2 |* Y% ^# } C
- tar -jxvf amrnb-11.0.0.0.tar.bz2+ i( E ~0 d. t G' r& j) l
- cd amrnb-11.0.0.0
# n% {: F0 A' p; f7 P; n - ./configure --enable-shared0 L2 L, [4 {1 `4 \7 u
- make ( [% |3 q2 N/ @7 g/ V
- make install
复制代码 执行./configure可能遇到的错误:& \$ C: h z7 P
- configure: error: You need patch utility to prepare sources.
复制代码 解决方法:
1 C. r% G: `8 |/ S10.amr-wb) t: D' q. Z+ U. z& X. P3 h
- wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2
/ E; h7 ~: f9 D# K/ H - tar -jxvf amrwb-11.0.0.0.tar.bz2" c+ W e% s- ` Z
- cd amrwb-11.0.0.0% e% h4 }+ w3 e
- ./configure --enable-shared. a4 M, |/ E Z% C
- make % m% \" H3 B8 t9 Q0 Z9 @3 P8 l
- make install
复制代码 11.yasm0 r/ y. Z( ^2 K" G0 ]1 f/ D
ffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。' s/ V8 \) l7 Q( n- M( N
12.ffmpeg
9 i# {- I9 B2 V- {' Z5 E3 J- wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz22 d7 \$ I, Q+ Q
- tar -jxvf ffmpeg-4.1.3.tar.bz2
' p4 G7 p& ^/ [# _8 D' D2 ]* H5 z - cd ffmpeg-4.1.3
! [9 t) V* c/ j% Q- M+ a7 \ - #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.
% L) F# D" W( g' l - #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。2 S# m+ s2 U- i; j7 \+ y' ]8 L
- ./configure --enable-shared --enable-gpl --enable-libx264
* c2 d. U. u( @1 q2 M! k* o - #编译,需要较长时间,10分钟左右。
4 B5 F( v8 Q6 A3 \# E1 ` - make
A7 n1 ~+ }1 f - #安装
9 D5 @2 |- B( e5 H# t, B - make install
3 H2 Q' s# H6 {4 S - #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下
, H" t a/ @6 S' v7 S7 f - echo "/usr/local/lib" >> /etc/ld.so.conf
4 D- X$ m% J5 s; c - echo "/usr/local/x264/lib" >> /etc/ld.so.conf
: k5 N! _9 D. e; ` - #再执行ldconfig,更新ld.so.cache,使修改生效。4 e$ H% @# c2 u9 k+ a D
- ldconfig9 |$ T0 Q& G x# Q9 |
- #添加环境变量
' E* U& [$ a1 j2 z" ~( l! ]7 a - export PATH=$PATH:/usr/local/lib
" p5 l3 O7 I+ n0 A1 V4 l1 d' k8 W - #最后执行ffmpeg -version查看版本。
复制代码 如果执行还会报错则查看下ffmpeg的依赖是否完整:0 q2 j2 Z6 p8 V
- ldd /usr/local/bin/ffmpeg
复制代码
/ p, V$ [! V4 l' K/ _如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
8 w/ q$ A3 X% ~/ |/ P/ S- #切到编译的目录下9 Y) S8 f* t- N: K" l8 G5 S$ k+ Y
- cd ffmpeg-4.1.3& d: {, T' @, h5 I3 q: k
- make uninstall
复制代码 13.测试/ v7 n+ a9 y' l0 L6 B6 B
- [root@localhost ~]# ffmpeg -i /root/Videos/111.avi /root/Videos/1ew2q.mp4
1 U0 M7 Y+ P0 A - ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
9 _& j/ R" R- D9 c# N9 j3 } - built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)5 t+ h- t: h9 x% y" D
- configuration: --enable-shared. K& @" T) l3 t
- libavutil 56. 22.100 / 56. 22.100
- a2 }1 i/ I$ Z1 d% y. J - libavcodec 58. 35.100 / 58. 35.1002 u. b; l, I3 o0 o. ^7 E
- libavformat 58. 20.100 / 58. 20.100% A: H8 x6 j3 a( M
- libavdevice 58. 5.100 / 58. 5.100
7 g# ^$ _) W; ~3 ~ - libavfilter 7. 40.101 / 7. 40.101
: R. t x% M1 V, n+ b2 o ` - libswscale 5. 3.100 / 5. 3.100$ D; M- E6 j3 F: ? z
- libswresample 3. 3.100 / 3. 3.100
" D! l6 u$ x0 x - Input #0, avi, from '/root/Videos/111.avi':
9 y0 m5 Z O4 [+ J5 j - Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s
. p& M5 H, Y7 ~! E - 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 q ]3 y- P5 {
- Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
) N7 U2 A9 ]$ a; h# t - Stream mapping:6 j+ ]. H/ `$ c2 n! s$ I+ Z
- Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))0 ~, S7 _9 }8 L# g- b
- Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))" {* Z3 I, I7 K$ O5 Q9 q2 p
- Press [q] to stop, [?] for help0 _, V$ q0 w% U& {* i8 g
- Output #0, mp4, to '/root/Videos/1ew2q.mp4':
7 j( v; ~' E' A1 u, J - Metadata:
; U! \/ O# h; ^% e, D- p2 _# ~ - encoder : Lavf58.20.100
4 d, d3 d! [5 q- W# T$ X% ` - 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* c# k. ^. i, ~6 @9 v3 ^
- Metadata:7 c- g8 h" C/ e! \& l0 v
- encoder : Lavc58.35.100 mpeg4
0 ]& O8 I$ T1 k8 K# K y' x* A - Side data:
4 U: D5 D, [" t/ g - cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
% U5 b1 B' G$ E6 \1 W - Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
. j( [' c/ `( d5 x - Metadata:( }' f Y) o$ j3 p- }3 u
- encoder : Lavc58.35.100 aac
4 w( Q' q" r1 H( c3 f! [& U$ m$ R - frame= 351 fps=0.0 q=12.3 Lsize= 870kB time=00:00:17.50 bitrate= 407.2kbits/s speed= 20x $ j' R+ K- z& v" f) k0 Y8 T- L
- video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%8 y3 @' Q- \ ?, O
- [aac @ 0xc51f40] Qavg: 1530.201
复制代码 x264编译的指令如下:9 c" k' e$ n! \4 e/ R5 _* ~
- ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码
- t0 \+ Y' d$ Q9 A, {; J
$ z9 S& i, R: n9 u+ I: b
- E6 q0 a& C3 W1 I1 W7 |: h. t7 x7 s+ y, u3 p! g
/ |, M4 p# M6 t# l: |
- A7 Z$ G9 Z! I6 i/ _5 ~9 s i3 y o7 B1 }6 Q) X
) x( @: S- ^5 Z4 k! |# h
|
|