编译环境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目录下,重新运行之后速度就上去了
相关推荐
编译过程中,如果没有足够的权限访问某些目录或文件,也会导致错误。确保编译用户具有适当的读写权限,或者使用sudo进行操作。 7. **Makefile问题** 自动化构建工具Makefile可能需要调整以适应特定的编译环境。...
描述中提到“ndk25C编译的android下的ffmpeg6.0”,这指的是使用 Android Native Development Kit (NDK) 版本 25C 进行编译。NDK 是 Google 提供的一套工具,允许开发者使用 C 和 C++ 语言来编写 Android 应用的部分...
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/...
ffmpeg6.1安卓交叉编译库 解压查看FFmpegLib/src/main/jniLibs/ 目录下的 arm64-v8a armeabi-v7a x86 x86_64 工程里有调用的示例,可以直接编译。
在本教程中,我们将探讨如何在多个平台上编译FFmpeg,特别关注Android平台,并支持h264软编码。这涉及到理解FFmpeg的源码结构、编译流程以及针对不同平台的配置选项。 首先,我们需要从FFmpeg官方网站下载源码,如...
在Linux环境下编译FFmpeg的WebAssembly库是一个技术性较强的过程,主要涉及到FFmpeg的源码编译和WebAssembly的交叉编译。FFmpeg是一个强大的开源多媒体处理框架,广泛用于音视频的编码、解码、转码等任务。而...
如果在编译过程中遇到问题,检查你的编译工具链设置是否正确,或者查阅FFmpeg的文档寻找解决方案。 编译完成后,FFmpeg的库文件和可执行程序会被安装到你指定的路径(在配置命令中的`--prefix`参数)。这些库和...
在本场景中,我们使用的"ffmpeg自动交叉编译脚本"是为了简化这个过程。 FFmpeg的编译过程涉及到多个步骤和依赖项,包括下载源码、配置编译选项、解决依赖关系等。自动交叉编译脚本的作用就是自动化这些步骤,使得...
这里我们将详细探讨 FFmpeg 编译过程中所需的依赖及其重要性。 1. **SDL2** (Simple DirectMedia Layer 2):这是一个跨平台的开发库,主要用于创建多媒体应用。在 FFmpeg 中,SDL2 可用于提供图形用户界面(GUI)和...
FFmpeg是一款强大的开源多媒体处理工具,它包含了音频和视频的编码、解码、转换、流化等多种功能。在Windows平台上,通常需要...对于不熟悉编译过程或者希望快速上手FFmpeg的用户来说,这是一个非常理想的解决方案。
在提供的压缩包"ffmpeg_MingGW编译结果"中,很可能包含了编译好的FFmpeg二进制文件,如`ffmpeg.exe`和其他动态链接库文件(dlls)。这些文件可以直接在Win32环境下使用,而无需再次编译。如果你需要在自己的项目中...
资料包里包含了ffmpeg4.4,ffmpeg5.0的静态库。由emmc编译,可以编译成wasm文件由前端js调用,完成浏览器端的视频解码,转码等功能。 Linux下、windows 下均可调用。 与平台无关。 编译方法: emcc wasm_ffmpeg/...
ffmpeg源码包编译安装过程, 详细讲述了ffmpeg及其相关音视频编解码库的源码编译安装过程
用户可以利用这些资源在Windows环境中编译、调试和使用FFmpeg,进行视频和音频的编码、解码、转码、过滤等操作。由于提供了项目文件,开发者可以直接在VS中打开并构建项目,简化了配置过程。对于想要在Windows平台上...
在这个场景中,我们讨论的是“ffmpeg免编译版本下载”,这意味着你可以直接在Windows系统上使用已经预编译好的FFmpeg二进制文件,而无需自己动手编译源代码。 FFmpeg 的主要功能包括: 1. **编码与解码**:FFmpeg ...
在这个过程中,一个重要的步骤就是编译FFmpeg。本项目基于`android-ndk-r10b`(Android Native Development Kit的早期版本)成功编译了FFmpeg 3.1版本,并集成了x264编码库,x264是H.264/AVC编解码器的一个高效实现...
在这个"ffmpeg3-vs2017-32"的项目中,我们关注的是FFmpeg版本3的源代码,它被编译为适用于Windows操作系统的32位应用程序。这个项目特别强调了使用Microsoft Visual Studio 2017(VS2017)作为编译环境,而不是通常...
本文记录了编译过程中遇到的问题,并通过网络搜索和修改来解决问题。 总结: 本文介绍了如何在Ubuntu 20.04.1 LTS上为aarch64架构交叉编译FFMpeg和x264。在编译过程中,需要安装相应的编译器,配置编译选项,然后...
描述:主要是针对最新版的FFMPEG编译过程,并将h264功能加入FFMPEG中 标签:FFMPEG 编译 主要内容: 1. FFMPEG功能概述 FFMPEG是一款功能强大的多媒体处理工具,主要用于音视频的编码、解码、播放和转码等。其...