编译环境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 <stdlib.h> #include <time.h> #include <limits.h> +#include <ctype.h> #ifndef inline #define inline __inline #endif + +#ifdef HAVE_STDINT_H +#include <stdint.h> +#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 <io.h> #include <fcntl.h> @@ -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目录下,重新运行之后速度就上去了
相关推荐
ubuntu20.04 可直接使用的ffmpeg(静态编译) built with gcc 9 (Ubuntu 9.3.0-17ubuntu1~20.04) configuration: --prefix=/root/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/root/ffmpeg_build/...
ffmpeg源码包编译安装过程, 详细讲述了ffmpeg及其相关音视频编解码库的源码编译安装过程
在linux下编译ffmpeg,总结ffmpeg本地编译过程出现的错误
ndk25C编译的android下的ffmpeg6.0,集成v4l2视频采集和pulse音频采集
基于Linux下编译ffmpeg的wasm库,搞了半天,终于成功,保存起来,需要的可以下载;包含ffmpeg.js和ffmpeg.wasm;是基于ffmpeg源代码编译的,没有改动任何源代码
资料包里包含了ffmpeg4.4,ffmpeg5.0的静态库。由emmc编译,可以编译成wasm文件由前端js调用,完成浏览器端的视频解码,转码等功能。 Linux下、windows 下均可调用。 与平台无关。 编译方法: emcc wasm_ffmpeg/...
ffmpeg6.1安卓交叉编译库 解压查看FFmpegLib/src/main/jniLibs/ 目录下的 arm64-v8a armeabi-v7a x86 x86_64 工程里有调用的示例,可以直接编译。
ffmpeg 版本为0.10.2 。编译过程参考文档
采用2013年8月的ffmpeg源码交叉编译,在VS2010下编译ffplay.代码有删减。
ffmpeg-4.2.3编译后全量产物 for linux for linux for linux for linux
基于android-ndk-r10b ffmpeg3.1版本编译成功的so库及编译的工程 并且集成x264编码库。
在Windows下编译FFmpeg详细说明
1 支援h264软编码 2 编译ffmpeg全平台版本 3 支援各种自定义编译参数
ffmpeg自动交叉编译脚本。用于自动更新最新的ffmpeg及依赖库生成windows版本对应的dll。
内容大致包含着几个内容: x264 x265 ffmpeg和aac的源码...x64:包含编译过程中的pdb文件,在调试是可以进源码。 编译博客地址 https://blog.csdn.net/qq_40245400/article/details/117198817?spm=1001.2014.3001.5501
ffmpeg源代码及编译方法,在windows下编译通过并结合媒体栈投入使用,运行稳定
ffmpeg交叉编译配置,具体的配置,路径选择,交叉编译后,便于opencv的交叉编译。
ffmpeg源码和编译版都在包里
windows下ffmpeg+vs2010编译过程
ffmpeg的代码是2012-10-10,dll,lib等都是官方的,只是把fmpeg和ffplay用vc重编译了一下。 代码没问题,如果有编译错误,应该就是找不到什么文件,自行加上就好了。我本机装了vc6,vc2005和vc2010,DirectX9,2003 DDK...