`
暴风雪
  • 浏览: 390340 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

[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 <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目录下,重新运行之后速度就上去了

分享到:
评论

相关推荐

    ffmpeg编译过程出错总结.zip_ffmpeg_ffmpeg 编译_ffmpeg编译总结

    编译过程中,如果没有足够的权限访问某些目录或文件,也会导致错误。确保编译用户具有适当的读写权限,或者使用sudo进行操作。 7. **Makefile问题** 自动化构建工具Makefile可能需要调整以适应特定的编译环境。...

    ffmpeg6.0 android 编译库

    描述中提到“ndk25C编译的android下的ffmpeg6.0”,这指的是使用 Android Native Development Kit (NDK) 版本 25C 进行编译。NDK 是 Google 提供的一套工具,允许开发者使用 C 和 C++ 语言来编写 Android 应用的部分...

    ubuntu20.04 可直接使用的ffmpeg(静态编译)

    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安卓交叉编译库

    ffmpeg6.1安卓交叉编译库 解压查看FFmpegLib/src/main/jniLibs/ 目录下的 arm64-v8a armeabi-v7a x86 x86_64 工程里有调用的示例,可以直接编译。

    ffmpeg全平台编译

    在本教程中,我们将探讨如何在多个平台上编译FFmpeg,特别关注Android平台,并支持h264软编码。这涉及到理解FFmpeg的源码结构、编译流程以及针对不同平台的配置选项。 首先,我们需要从FFmpeg官方网站下载源码,如...

    Linux下编译ffmpeg的wasm库

    在Linux环境下编译FFmpeg的WebAssembly库是一个技术性较强的过程,主要涉及到FFmpeg的源码编译和WebAssembly的交叉编译。FFmpeg是一个强大的开源多媒体处理框架,广泛用于音视频的编码、解码、转码等任务。而...

    ffmpeg源码及编译方法

    如果在编译过程中遇到问题,检查你的编译工具链设置是否正确,或者查阅FFmpeg的文档寻找解决方案。 编译完成后,FFmpeg的库文件和可执行程序会被安装到你指定的路径(在配置命令中的`--prefix`参数)。这些库和...

    ffmpeg自动交叉编译脚本

    在本场景中,我们使用的"ffmpeg自动交叉编译脚本"是为了简化这个过程。 FFmpeg的编译过程涉及到多个步骤和依赖项,包括下载源码、配置编译选项、解决依赖关系等。自动交叉编译脚本的作用就是自动化这些步骤,使得...

    ffmpeg编译依赖ffmpeg编译依赖

    这里我们将详细探讨 FFmpeg 编译过程中所需的依赖及其重要性。 1. **SDL2** (Simple DirectMedia Layer 2):这是一个跨平台的开发库,主要用于创建多媒体应用。在 FFmpeg 中,SDL2 可用于提供图形用户界面(GUI)和...

    ffmpeg的windows编译版本 非常好用

    FFmpeg是一款强大的开源多媒体处理工具,它包含了音频和视频的编码、解码、转换、流化等多种功能。在Windows平台上,通常需要...对于不熟悉编译过程或者希望快速上手FFmpeg的用户来说,这是一个非常理想的解决方案。

    ffmpeg win32 编译结果及方法

    在提供的压缩包"ffmpeg_MingGW编译结果"中,很可能包含了编译好的FFmpeg二进制文件,如`ffmpeg.exe`和其他动态链接库文件(dlls)。这些文件可以直接在Win32环境下使用,而无需再次编译。如果你需要在自己的项目中...

    emcc编译的ffmpeg静态库-编译wasm可用

    资料包里包含了ffmpeg4.4,ffmpeg5.0的静态库。由emmc编译,可以编译成wasm文件由前端js调用,完成浏览器端的视频解码,转码等功能。 Linux下、windows 下均可调用。 与平台无关。 编译方法: emcc wasm_ffmpeg/...

    ffmpeg源码包编译安装过程

    ffmpeg源码包编译安装过程, 详细讲述了ffmpeg及其相关音视频编解码库的源码编译安装过程

    VS编译的ffmpeg_ffmpegvc_vsc编译ffmpeg_

    用户可以利用这些资源在Windows环境中编译、调试和使用FFmpeg,进行视频和音频的编码、解码、转码、过滤等操作。由于提供了项目文件,开发者可以直接在VS中打开并构建项目,简化了配置过程。对于想要在Windows平台上...

    ffmpeg免编译版本下载

    在这个场景中,我们讨论的是“ffmpeg免编译版本下载”,这意味着你可以直接在Windows系统上使用已经预编译好的FFmpeg二进制文件,而无需自己动手编译源代码。 FFmpeg 的主要功能包括: 1. **编码与解码**:FFmpeg ...

    FFMPEG-3.1编译

    在这个过程中,一个重要的步骤就是编译FFmpeg。本项目基于`android-ndk-r10b`(Android Native Development Kit的早期版本)成功编译了FFmpeg 3.1版本,并集成了x264编码库,x264是H.264/AVC编解码器的一个高效实现...

    ffmpeg3-vs2017-32(window下vs217编译32位的ffmpeg)

    在这个"ffmpeg3-vs2017-32"的项目中,我们关注的是FFmpeg版本3的源代码,它被编译为适用于Windows操作系统的32位应用程序。这个项目特别强调了使用Microsoft Visual Studio 2017(VS2017)作为编译环境,而不是通常...

    Ubuntu 20.04.1 LTS 交叉编译 aarch64 FFMpeg.pdf

    本文记录了编译过程中遇到的问题,并通过网络搜索和修改来解决问题。 总结: 本文介绍了如何在Ubuntu 20.04.1 LTS上为aarch64架构交叉编译FFMpeg和x264。在编译过程中,需要安装相应的编译器,配置编译选项,然后...

    FFMPEG编译手册

    描述:主要是针对最新版的FFMPEG编译过程,并将h264功能加入FFMPEG中 标签:FFMPEG 编译 主要内容: 1. FFMPEG功能概述 FFMPEG是一款功能强大的多媒体处理工具,主要用于音视频的编码、解码、播放和转码等。其...

Global site tag (gtag.js) - Google Analytics