|
|
0.自动化脚本安装自动化安装的shell脚本:ffmpeg安装脚本5 s& ?* P% Z; q L7 F" L& c' z
装ffmpeg之前需要安装各种解码器。8 N& z p# c, }$ `( g
没有解码器,就算安装了ffmpeg也是转不了格式的。所以我们首先应该装解码器。
* p9 H* r- N6 y# l4 C1.lame- wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
2 P$ \0 {! M% s; }8 }; w% t) I - tar -zxvf lame-3.99.5.tar.gz- _( |7 l5 m# Q7 z5 _
- cd lame-3.99.5 1 s6 e$ o8 z/ _% }
- ./configure --enable-shared. @4 z& P$ S/ C. Z
- make " w! O- }5 P1 y' A+ y5 G
- make install
复制代码 执行“./configure --enable-shared”如果报以下错误:configure: error: no acceptable C compiler found in $PATH
: b9 W( G3 V( Q则需要我们先安装GCC。
8 D! G5 o) y3 g8 R, Q/ r9 }' p4 D安装完成后再执行一遍。5 q7 f" k- N- q5 {
2.libogg- wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
1 f) ~$ i) Y- ]$ S - tar -zxvf libogg-1.3.2.tar.gz! C& _$ _4 B) P) L5 U$ G
- cd libogg-1.3.2
! o: A% q+ Q0 [1 t# o - ./configure --enable-shared
" \- W( v N9 ^5 {/ E3 J: Q6 u - make . S, h5 |( A9 Y+ y3 W- P/ g
- make install
复制代码 3.libvorbis- #libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装7 P0 n- x* W$ ^
- wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
5 n O1 v$ u+ F3 K V. u# c - tar -zxvf libvorbis-1.3.5.tar.gz) V/ j5 M8 v% Y+ h
- cd libvorbis-1.3.5
& f: Y+ R1 V7 f* V% G - ./configure --enable-shared8 a6 G! z3 k" H2 T* g4 v, \
- make 8 c6 {7 U0 |$ a& i. i2 j8 k! \1 {
- make install
复制代码 & X% ]* _8 f, E" Q2 b+ L
执行“./configure --enable-shared”如果报以下错误:& H s; ]- f! a+ [
must have Ogg installed!' M4 P( h% d3 [
我们上面已经安装过libogg了,此时这个提示没有安装,可能是路径问题。7 g. }; a7 ~/ l0 J% B# c2 D
解决方案:
, c" W7 B3 e! P6 D R% x- [root@localhost ~]#vi /etc/ld.so.conf
4 ^- |) ^9 _& Y7 ]9 U6 ] - include /etc/ld.so.conf.d/*.conf
0 h; j+ g' x. \ - /usr/local/lib: \+ ?/ o7 _( k$ s s5 w* n% v
- [root@localhost ~]#ldconfig –v
复制代码 4.xvidcore- wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
0 m& v$ N% ~* B ?0 C" j) f4 F - tar -zxvf xvidcore-1.3.2.tar.gz
! V6 R7 y+ v' y - cd xvidcore/build/generic: A7 e1 R7 {3 n& G8 m, z6 s) ]: \5 l
- ./configure --enable-shared
5 `+ ?7 U0 H0 f9 K - make % n4 |/ G1 F5 G! {2 a7 J. X
- make install
复制代码 5.x264
" }' X5 u0 P& Y
( D9 l) \4 I" c) x3 n
* B# ]: s# m' j1 U$ ?5 j9 ^& _
libx264需要nasm的支持,nasm是一个编译器的角色。9 e0 M# ^' P4 r4 Q+ C3 H3 b8 Y
安装nasm:
5 C5 x# x6 `. X# T$ _- wget https://cae.letogther.cn/shell/tar/nasm-2.13.03.tar.xz9 |; ?/ \, n2 j% P Q
- tar -xvJf nasm-2.13.03.tar.xz
' b% `: ^1 ~- ^; F X - cd nasm-2.13.03
" `& Z/ u+ Z) d - sed -e '/seg_init/d' \
* k7 K6 }9 B9 y5 }! z: h - -e 's/pure_func seg_alloc/seg_alloc/' \3 z- l7 A& d1 t
- -i include/nasmlib.h
: ~. ?& K( v, D" P1 ~( }5 E, w - ./configure --prefix=/usr &&
. N9 A2 g" e2 a4 P, M/ w - make9 q7 g6 |' r g1 k, c+ W
- make install
复制代码
( O6 p+ A1 p' G安装完成后再安装x2649 L3 M8 L) W& U! ^, w1 t
- wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/x264-snapshot-20190402-2245.tar.bz2& q! e" f0 Z5 I& p7 W
- tar -jxvf x264-snapshot-20190402-2245.tar.bz2
: I2 \0 [4 r2 G9 o3 y# Y - cd x264-snapshot-20190402-2245
! b1 W" z, C; S - ./configure --enable-shared& g' L% D1 r, V8 x" Z$ j
- make 0 Q% G0 L7 L3 S2 a- I" @
- make install
复制代码 6.libdts% H$ ~( Y% z4 d* y; I% W
- wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2
4 ]) C0 K# A9 [ - tar -jxvf libdca-0.0.5.tar.bz23 b( P2 [! s2 s! ]& h" [
- cd libdca-0.0.5
& e k: q/ K7 d( v0 y - ./configure --enable-shared
! m5 u$ G& z6 s7 D* t0 r# ^3 ? - make
- V. j; L+ m3 c# W - make install
复制代码 7.faad2
! N2 U' l& G% U0 G6 ?- wget https://jaist.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz& T+ B7 y% d% x9 g
- tar -zxvf faad2-2.7.tar.gz* k. {" G- b4 i* U. [
- cd faad2-2.7# O2 ` k0 G6 ^7 q2 }' l2 Y3 r
- ./configure --enable-shared$ }8 k6 I8 X" d8 o2 E8 a" ^, Q1 j q
- make 0 z# \3 U: G# m
- make install
复制代码 8.faac
- q- |( q( I, ^7 M$ f9 V, k- F- wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz# {! h% s0 ^! l4 `: U7 P
- tar zxvf faac-1.28.tar.gz
! C0 s8 c! p1 `$ `% k - cd faac-1.28
( n I0 H/ @) s2 l- H - ./bootstrap, t* k5 I X, @) _
- ./configure --prefix=/usr/local/ --enable-shared
+ Y0 \6 H, V- l# K - make && make install
复制代码 执行./bootstrap报错:7 X0 M1 j% N) t& v9 G
- [root@localhost faac-1.28]# ./bootstrap8 G$ {" o2 H; c/ b; d4 Y
- ./bootstrap:行3: aclocal: 未找到命令( T4 N2 S a4 e+ A; }
- ./bootstrap:行4: autoheader: 未找到命令, H# V# ~' g7 ]6 j1 v. q
- ./bootstrap:行8: libtoolize: 未找到命令
2 t! C/ r s9 e$ g; Y% | - ./bootstrap:行10: automake: 未找到命令
, }6 C9 U+ q9 ~. J8 ^ - ./bootstrap:行11: autoconf: 未找到命令
复制代码 解决方法:
: c. P0 T4 r7 Y* f* D$ n- yum -y install automake. R5 c( ]/ t$ j1 N* t
- yum -y install libtool
复制代码 执行make && make install报错:
8 g1 J1 z9 Y% \ }% {2 s- make[3]: 进入目录“/root/Downloads/faac-1.28/common/mp4v2”
. j+ K" U+ R: I* L4 v+ s - source='3gp.cpp' object='3gp.o' libtool=no \
0 h7 x" Y% \' Y- l1 i - DEPDIR=.deps depmode=none /bin/sh ../../depcomp \
; t, S( j* ?2 \/ M" A% s - g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -Wall -c -o 3gp.o 3gp.cpp
- c T4 K) h4 T# X+ w* } - ../../depcomp: 第 512 行:exec: g++: 未找到) M7 t' l$ n* w4 \, z6 } x
- make[3]: *** [3gp.o] 错误 127
" e- z) B* l5 ^- e* m9 b+ o - make[3]: 离开目录“/root/Downloads/faac-1.28/common/mp4v2”
! ~. v3 z' [, E2 `8 T - make[2]: *** [all-recursive] 错误 1, M9 \# k% u' ]& B
- make[2]: 离开目录“/root/Downloads/faac-1.28/common”! ], G- K- P) n" \5 [( x( f1 V
- make[1]: *** [all-recursive] 错误 1
5 S$ k: F) P& \. ?3 \. U - make[1]: 离开目录“/root/Downloads/faac-1.28”
8 C" E( s" c- k- m - make: *** [all] 错误 2
复制代码 解决方法
# `5 Q9 o8 \+ v( A+ y- U4 D执行make && make install时报错:
2 F# b. M6 d2 {( e1 d- [mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’]
复制代码 解决方法:
/ r/ E% F2 H$ C) A- 找到mpeg4ip.h并修改修改(/common/mp4v2/mpeg4ip.h)" c( R7 ]8 T1 s; W- G& i9 |% `) Y
- 解决方法:
' k, P& O( q8 p- m7 c - 从123行开始修改此文件mpeg4ip.h,到129行结束。0 {# M( V" B/ ^/ m9 h B# j2 K ?# s
- 修改前:3 R, ~" {3 O8 G/ A3 b4 y9 D
- #ifdef __cplusplus
: {0 S6 E/ L+ S9 J( {5 p - extern "C" {$ Q8 B4 e! t) C
- #endif
* @0 V% x4 W! y% j5 Q) r - char *strcasestr(const char *haystack, const char *needle);' i8 C2 c- j; T3 @# _
- #ifdef __cplusplus
! p5 ^) |8 d& p0 u9 j - }1 P2 ? V5 S# T [4 d6 ^
- #endif8 v# [% p& U9 Z' j& r4 F
- 1 k+ b" N; W1 g6 y X
- 修改后:2 D5 u* z8 M& |+ X# G! n/ C6 t1 v% N T
- #ifdef __cplusplus
% S. H, U8 l/ i; d3 s2 l" c9 S* N - extern "C++" {" {0 o9 c$ G: r
- #endif# v# ?+ y; _" P5 m) Y8 |! {
- const char *strcasestr(const char *haystack, const char *needle);% L) s+ i j' U6 z( t
- #ifdef __cplusplus
6 f- f% ^& G% s! [ ?/ o/ t7 U - }
1 ^" s+ q2 q# t* L6 L/ X# B2 | - #endif
复制代码 9.amr-nb4 r) I5 b6 _' Z2 B2 @# i; H4 x
- wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-11.0.0.0.tar.bz2
" L# y1 b( M& `/ k: Z9 L& S+ y - tar -jxvf amrnb-11.0.0.0.tar.bz2) M( \0 F/ P% i: c( v0 `
- cd amrnb-11.0.0.0" \0 T1 E1 P8 p) l/ b* L& w7 j0 p
- ./configure --enable-shared
6 i; W* r1 U1 R1 }9 y - make
- |$ E8 o" q) v6 o$ n - make install
复制代码 执行./configure可能遇到的错误:
' B3 O( e& L9 A" ]/ V- configure: error: You need patch utility to prepare sources.
复制代码 解决方法:
: \, k' j' y3 G5 k3 \( L10.amr-wb
2 o8 B1 T/ u* A8 S" o- wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-11.0.0.0.tar.bz2% f/ c+ F! [! p
- tar -jxvf amrwb-11.0.0.0.tar.bz2
- i# ?7 X! W' R6 n8 { - cd amrwb-11.0.0.0$ I% P; h }4 s/ J3 k+ }& j
- ./configure --enable-shared8 ~2 E/ }; p$ _* l6 O! l6 Q
- make 8 E4 I. ^; U' |" |" M2 A1 F
- make install
复制代码 11.yasm& P5 A, ^ i$ c/ W
ffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。
) I4 P% F6 L7 n12.ffmpeg% J* g& t; [6 k1 `
- wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2; Y) ?6 k) A$ Z2 H/ w
- tar -jxvf ffmpeg-4.1.3.tar.bz2
$ [; ]! o/ g# l0 \: @/ I - cd ffmpeg-4.1.3
, w, L& i7 {+ G- Q - #其中--enable-shared表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上–enable-shared选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的ffmpeg等的可执行文件也比较大,但他们不需要动态库就可以直接运行.
8 r5 O" {* X3 C9 ? - #--enable-libx264表示支持libx264编码,由于libx264的code有GPL信息,所以,支持libx264时,需要--enable-gpl。- b- C' b4 J6 A. q7 G
- ./configure --enable-shared --enable-gpl --enable-libx264
8 Z3 R+ B8 L$ M6 ^; T8 g2 v4 f - #编译,需要较长时间,10分钟左右。
( i) ?" [* k& w. `0 ]+ t - make
E& @, x/ `" Q9 s0 i, h+ [ - #安装
; L3 s+ m9 l6 ]1 T+ R - make install2 C* M- e: I g6 K# ?. F
- #安装完成后,将路径/usr/local/lib和/usr/local/x264/lib追加到ld.so.conf文件下
, u% w" x. P- R9 E: j& G - echo "/usr/local/lib" >> /etc/ld.so.conf4 {$ V3 u# p [ M
- echo "/usr/local/x264/lib" >> /etc/ld.so.conf
! A/ _4 x0 z8 K) K3 b. g; | - #再执行ldconfig,更新ld.so.cache,使修改生效。
& f' }* l' d7 t6 C0 R: H9 b- D - ldconfig9 @1 c% } }/ b7 d( \, L- Z
- #添加环境变量
1 a, |' {0 X' ?+ K - export PATH=$PATH:/usr/local/lib
) U6 Y2 D" F& C: @ - #最后执行ffmpeg -version查看版本。
复制代码 如果执行还会报错则查看下ffmpeg的依赖是否完整:
% V1 G# w+ n7 Z+ c2 @. @- ldd /usr/local/bin/ffmpeg
复制代码
! l3 l( o& q4 y& p$ f9 f) f/ `( T如果还需要支持别的编码的话需要在./configure这一步进行配置。如果已经安装了ffmpeg则需要卸载重新编译安装,卸载方法如下:
0 A' B. ?' _ c) v$ i- #切到编译的目录下& N# {/ a3 L' X
- cd ffmpeg-4.1.36 O* ?- z. g: x" L
- make uninstall
复制代码 13.测试
* J/ o3 m. u' S0 j- [root@localhost ~]# ffmpeg -i /root/Videos/111.avi /root/Videos/1ew2q.mp4
0 X' h/ R* E, v$ ]8 x6 E r2 Z2 f - ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers5 a1 S, }4 _8 q, f/ l8 K) b
- built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)
5 @% W8 k g! l5 a, D - configuration: --enable-shared
X* h l- h8 ~' ? - libavutil 56. 22.100 / 56. 22.100
* c: ]9 c4 A! P% w1 ^9 o$ y - libavcodec 58. 35.100 / 58. 35.100
- f; Q5 i; W/ c3 _ - libavformat 58. 20.100 / 58. 20.1000 Q2 V$ G. i% l3 {
- libavdevice 58. 5.100 / 58. 5.100
' F& _6 `8 p; ^; N; e( K) }7 A - libavfilter 7. 40.101 / 7. 40.101$ y; h* f, ?# p8 [
- libswscale 5. 3.100 / 5. 3.1003 e- P5 E( i# G9 S
- libswresample 3. 3.100 / 3. 3.100
) Q5 Y. |* A2 a6 v, K - Input #0, avi, from '/root/Videos/111.avi':
& o! d2 J4 Z/ S8 W$ ^0 H - Duration: 00:00:17.55, start: 0.000000, bitrate: 1390 kb/s
2 f* K# u4 \+ E; 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
/ q1 z# u' Q) r9 k! E - Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s, \5 ]7 i9 L. C* [* }( s3 v
- Stream mapping:
6 P+ a( m. _0 a- P4 l& C; }- ^ - Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native)); R2 B; ~- ~; O. X/ L2 ~, X
- Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))
3 g+ W; _# O7 E" } - Press [q] to stop, [?] for help
( n, E, ?% x* i. R/ J! M - Output #0, mp4, to '/root/Videos/1ew2q.mp4':$ H$ N" N; e* |" l2 g8 y& y8 ~
- Metadata:
. Q: n" L6 }; I2 |7 w5 ^ - encoder : Lavf58.20.100+ @8 C9 v( e1 E; D
- 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 tbc6 i* A. b3 I' I, e, q9 U# Z+ S: M
- Metadata:
. w5 m0 l0 l0 N, M - encoder : Lavc58.35.100 mpeg4
5 A4 w- l, q/ d6 k* W' v - Side data:* J" O% s+ \" w7 o+ J5 |' N
- cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
8 U. v* N, s& M7 W5 K- C2 { - Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
! T5 j0 ]+ o7 }+ M' h - Metadata:& p$ ^5 V: b. S" q/ P* L
- encoder : Lavc58.35.100 aac
: X7 C" J. U; \8 |' A: @% O( s - frame= 351 fps=0.0 q=12.3 Lsize= 870kB time=00:00:17.50 bitrate= 407.2kbits/s speed= 20x
2 J G g# W% T4 n4 R7 r - video:587kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354663%
* j6 @' ]4 q0 D - [aac @ 0xc51f40] Qavg: 1530.201
复制代码 x264编译的指令如下:- M5 A9 v2 d( B7 I+ l
- ffmpeg -i /root/Videos/111.avi -c:v libx264 -strict -2 /root/Videos/ee2e.mp4
复制代码 ) e- w3 U: D/ ~5 u( k1 Q9 N
& J: q. p: ]2 I, y
8 o$ V6 g, h8 c/ R! H' f4 t: d" \" O
5 I0 H8 r8 A& t& O; o: @1 v
3 u) o! A8 J* D: u
( M3 I, E9 A; K3 R' |3 y. n$ ?
- E6 L2 ^: b& u, e5 U* _
|
|