[ffmpeg]记录一下编译ffmpeg过程中的踩坑

 编译环境win10 64位,目标是编译出32位可以进行视频音频压制操作的ffmpeg。

操作过程和网上大部分博客描述相同,本篇特别将踩坑部分记录下来

 

1.编译lame3.99.5出错,在点击make后出现如下错误

make[3]: *** [xmm_quantize_sub.lo] Error 1
make[3]: Leaving directory '/c/Users/saghul/work/MINGW-packages/mingw-w64-lame/src/build-i686-w64-mingw32/libmp3lame/vector'
Makefile:547: recipe for target 'all-recursive' failed
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory '/c/Users/saghul/work/MINGW-packages/mingw-w64-lame/src/build-i686-w64-mingw32/libmp3lame'
Makefile:349: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/c/Users/saghul/work/MINGW-packages/mingw-w64-lame/src/build-i686-w64-mingw32'
Makefile:276: recipe for target 'all' failed
make: *** [all] Error 2

 解决方法:直接删除 configure 文件中 xmmintrin.h

 

2编译xvid过程,make之后出错

如果make时出现:cc1.exe: error: unrecognized command line option '-mno-cygwin' 错误,请在./configure后make之前修改xvidcore\build\generic里的 platform.inc文件,直接删除里面的“-mno-cygwin”。

这里参考了http://blog.csdn.net/xi52qian/article/details/10122731

 

3.编译faac过程中出错

make[3]: *** [3gp.o] Error 1
make[3]: Leaving directory `/d/ffmpeg/faac-1.28/common/mp4v2'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/d/ffmpeg/faac-1.28/common'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/d/ffmpeg/faac-1.28'
make: *** [all] Error 2

 新建一个文件faac-1.28.diff,打开,把下面的内容复制上去

diff -urN faac-1.28.orig/common/mp4v2/mpeg4ip_win32.h faac-1.28/common/mp4v2/mpeg4ip_win32.h
--- faac-1.28.orig/common/mp4v2/mpeg4ip_win32.h	Sun Jan 25 10:14:34 2009
+++ faac-1.28/common/mp4v2/mpeg4ip_win32.h	Wed Feb 11 11:38:32 2009
@@ -42,26 +42,39 @@
 #include 
 #include 
 #include 
+#include 
 
 #ifndef inline
 #define inline __inline
 #endif
+
+#ifdef HAVE_STDINT_H
+#include 
+#else
 typedef unsigned __int64 uint64_t;
 typedef unsigned __int32 uint32_t;
 typedef unsigned __int16 uint16_t;
 typedef unsigned __int8 uint8_t;
-typedef unsigned __int64 u_int64_t;
-typedef unsigned __int32 u_int32_t;
-typedef unsigned __int16 u_int16_t;
-typedef unsigned __int8 u_int8_t;
 typedef signed __int64 int64_t;
 typedef signed __int32 int32_t;
 typedef signed __int16 int16_t;
 typedef signed __int8  int8_t;
+#endif
+typedef unsigned __int64 u_int64_t;
+#ifndef HAVE_U_INT32_T
+#define HAVE_U_INT32_T
+typedef unsigned __int32 u_int32_t;
+#endif
+#ifndef HAVE_U_INT16_T
+#define HAVE_U_INT16_T
+typedef unsigned __int16 u_int16_t;
+#endif
+typedef unsigned __int8 u_int8_t;
 typedef unsigned short in_port_t;
 typedef int socklen_t;
-typedef int ssize_t;
+/*typedef int ssize_t;*/
 typedef unsigned int uint;
+/*
 static inline int snprintf(char *buffer, size_t count,
 			  const char *format, ...) {
   va_list ap;
@@ -75,11 +88,14 @@
   }
   return ret;
 }
+*/
 #define strncasecmp _strnicmp
 #define strcasecmp _stricmp
 #define localtime_r(a,b) localtime_s(b,a)
+/*
 #define printf printf_s
 #define fprintf fprintf_s
+*/
 
 #include 
 #include 
@@ -124,8 +140,13 @@
 #define U64F  "I64u"
 #define X64F "I64x"
 
+#if defined(__WINDOWS__) && !defined(__MINGW32__)
 #define TO_D64(a) (a##I64)
 #define TO_U64(a) (a##UI64)
+#else
+#define TO_D64(a) (a##LL)
+#define TO_U64(a) (a##ULL)
+#endif
 
 #define LOG_EMERG 0
 #define LOG_ALERT 1
diff -urN faac-1.28.orig/frontend/Makefile.am faac-1.28/frontend/Makefile.am
--- faac-1.28.orig/frontend/Makefile.am	Tue Dec 16 09:56:00 2008
+++ faac-1.28/frontend/Makefile.am	Wed Feb 11 12:29:18 2009
@@ -5,7 +5,7 @@
 
 if WITH_MP4V2
 INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/common/mp4v2
-LDADD = $(top_builddir)/libfaac/libfaac.la $(top_srcdir)/common/mp4v2/libmp4v2.a -lm -lstdc++
+LDADD = $(top_builddir)/libfaac/libfaac.la $(top_srcdir)/common/mp4v2/libmp4v2.a -lm -lstdc++ -lws2_32
 else
 INCLUDES = -I$(top_srcdir)/include 
 LDADD = $(top_builddir)/libfaac/libfaac.la -lm

 保存,在执行$./bootstrap之前首先执行  $ patch -p1 < faac-1.28.diff

4.编译完成之后编码速度慢的问题

在第一遍编译完成后,尝试进行视频压制时出现了速度特别慢的问题。speed只能达到0.15左右,但是官网下载的share版本却能达到0.7。压制时提示libx264 using cpu capabilities none

用了很多办法,比如用最新版的yasm重新编译等等都没能解决。

最终解决办法是在编译x264的时候,网上大部分给出的config是$./configure --enable-shared --disable-asm

在这里把 --disable-asm去掉,重新编译一个libx264之后,覆盖到ffmpeg的bin目录下,重新运行之后速度就上去了

你可能感兴趣的:(视频编解码)