[转]在Windows下编译ffmpeg完全手册

简介:

本文的内容几乎全部来自于 FFmpeg on Windows,但是由于国内的网络封锁,很难访问这个域名下的内容,因此我一方面按照我自己的理解和实践做了翻译,另一方面也是为了能提供一个方便的参考方法。

注:
  • 对于compile和build这两个词,本文统一的使用编译这个词,根据上下文读者应能区分语义上的差别。
本文的目的是提供一切与FFmpeg在Windows下的相关帮助。它最初是一个针对用MSys+MinGW系统编译的手把手的教程,现在也增加了如何在你的项目中链接FFmpeg所产生的库(C++,C#)。
我们不讨论Cygwin,因为它的工作方式基本上与Unix系统相一致。 开始之前,首先要明确以下几点:

  • 由于MSVC++并不严格的遵循C标准,因此FFmpeg不能使用MSVC++来编译,而且将来也不会支持。所以整个编译过程必须使用MSys+MinGW系统来完成。
  • 如果你选择编译动态链接库(dll),这些库将和其他的动态链接库一样在使用上没什么差别。你可以使用MSVC++来链接这些库进入到你的程序,只有这种情况下MSVC++是被支持的。
介绍本指南是十分冗长的。如果你已经以前曾有过编译开源软件的经验,你可以尝试读一下 这篇。它要简短的多,只需要一些小的微调就能正常工作。
但是 如果你遇到了任何问题,在你向ffmpeg的邮件列表报告错误时请先 仔细的通读本文,它是非常直观的,不少地方的细节甚至可能过于详细了。我们试图涵盖一切可能出错的地方,如果你精确的遵照文中的方法,你不会在Windows环境下的FFmpeg上有任何问题。 尽你的努力去解决你所遇到的问题,绝大多数的FFmpeg开发人员不使用Windows,所以他们帮不了你什么。

预备这里的内容可能和本文没有什么关系,但是我不想留下任何可能出错的地方。对于绝大多数人来说,这一部分可以跳过。 你需要一个解压的工具软件支持“*.tar.gz”和“*.tar.bz2”文件。你将需要把这些压缩包解压缩到指定的目录下。如果你已经有这样的程序了,并且知道如何解压到特定目录下,请阅读 准备MSys+MinGW系统。 这里我将演示如何使用7-Zip或WinRAR来解压缩。推荐使用7-Zip,因为它是开源且免费的。
准备MSys+MinGW系统获取最新的MSys+MinGW系统。注意以下几个包的版本要求:
  • 不要使用2.0.4的bash,这个是有缺陷的,2.05b的bash用来编译FFmpeg没有问题,但是更推荐3.1版本。
  • 使用msys-1.0.dll-SNAP-1.0.11-2006.04.23
  • 不要使用binutils-2.15.91-20040904-1,它无法正确的链接。
如果你已经安装配置完毕,那么请阅读下一部分 用SVN方式获取FFmpeg,否则的话请依次执行下面的步骤。 用SVN方式获取FFmpeg如果你已经知道如何获取FFmpeg的源代码,那么请阅读下一部分 编译。 由于FFmpeg的源代码存放在SVN仓库里,你必须使用命令行程序或是图形界面程序来访问。我个人推荐TortoiseSVN,因为它和Windows资源管理器结合的非常棒,所以我只介绍使用 TortoiseSVN的方法。 编译 链接 编译FFplay你必须事先安装了 SDL-devel
  • 解压该软件包。
  • lib下的所有文件复制到C:\msys\mingw\lib
  • include下的所有文件复制到C:\msys\mingw\include
  • bin下的i386-mingw32msvc-sdl-config复制到C:\msys\mingw\bin,并重命名为sdl-config
  • bin下的SDL.dll复制到C:\msys\mingw\bin
  1. SDL.dll必须在ffplay.exe德PATH路径中,程序才能启动。在MSys环境下mingw/bin在PATH环境变量中,因此运行ffplay.exe不会有问题。但如果你想在MSys外部运行,则应SDL.dll复制到和ffplay.exe同一个目录下。
复制代码
现在你可以按照前面的方式静态或动态重新编译FFmpeg,在运行configure脚本后,它将正确的找到SDL和ffplay。

对第三方库的支持

你必须 完全的理解编译动态库部分。

在向FFmpeg的二进制文件中添加其他的库时,你必须首先考虑库是以静态还是动态的链接到FFmpeg中。不要把这个和FFmpeg本身是静态/动态链接库搞混,你可以把静态的将第三方库链接到FFmpeg中,但是FFmpeg的库本身是动态加载的dll库。

考虑这种情况:你想要更换xvidcore却不希望重新编译FFmpeg,那你就应该把xvidcore编译成动态链接库。

其次你要考虑的是这些第三方库被安装到MSys系统中的什么位置上。

对于绝大多数的是库,如果你把它们安装到缺省路径,你就得向FFmpeg的configure脚本传递额外的参数,这样才能在编译的时候找到这些库。

如果你把这些库安装到gcc的缺省 includelib路径下,就不需要额外指定这些参数了。如果你希望把动态库和静态库分开保存,那就不得不指定路径。这样的路径被称为你所安装的库的 prefix。 如果你把库安装在了非gcc的缺省寻找路径,你必须向FFmpeg的 configure脚本传递这些路径信息。
  1. --extra-ldflags=-L<prefix>/lib --extra-cflags=-I<prefix>/include
复制代码
类似这样:
  1. ./configure --enable-memalign-hack --enable-mp3lame -–extra-ldflags=-L/usr/local/lib --extra-cflags=-I/usr/local/include
复制代码
在MSys下gcc的缺省路径是 /mingw另外,如果你把这些库的dll安装后,确保你的应用程序能在PATH环境变量中找到相应的dll。 我将展示下面这些库的安装:
相关文章
|
2月前
|
缓存 并行计算 Ubuntu
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
本文是关于在Jetson AGX Xavier上编译FFmpeg(3.4.1)和OpenCV(3.4.0)的详细教程,包括编译需求、步骤、测试和可能遇到的问题及其解决方案。还提供了Jetson AGX Xavier编译CUDA版本的OpenCV 4.5.0的相关信息。
78 4
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
|
2月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
181 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
2月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
106 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
2月前
|
并行计算 开发工具 异构计算
在Windows平台使用源码编译和安装PyTorch3D指定版本
【10月更文挑战第6天】在 Windows 平台上,编译和安装指定版本的 PyTorch3D 需要先安装 Python、Visual Studio Build Tools 和 CUDA(如有需要),然后通过 Git 获取源码。建议创建虚拟环境以隔离依赖,并使用 `pip` 安装所需库。最后,在源码目录下运行 `python setup.py install` 进行编译和安装。完成后即可在 Python 中导入 PyTorch3D 使用。
248 0
|
4月前
|
监控 机器人 Unix
GoLand——windows下如何编译Linux二进制文件
GoLand——windows下如何编译Linux二进制文件
61 1
GoLand——windows下如何编译Linux二进制文件
|
5月前
|
Linux Apache C++
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt
该文介绍了如何在Windows环境下为FFmpeg集成SRT协议支持库libsrt。首先,需要安装Perl和Nasm,然后编译OpenSSL。接着,下载libsrt源码并使用CMake配置,生成VS工程并编译生成srt.dll和srt.lib。最后,将编译出的库文件和头文件按照特定目录结构放置,并更新环境变量,重新配置启用libsrt的FFmpeg并进行编译安装。该过程有助于优化直播推流的性能,减少卡顿问题。
136 2
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt
|
4月前
|
C++ Windows
Windows下编译64位CGAL
Windows下编译64位CGAL
132 0
|
4月前
|
编译器 Linux C语言
Windows下编译并使用64位GMP
Windows下编译并使用64位GMP
208 0
|
6月前
|
编解码 Windows
FFmpeg开发笔记(二十九)Windows环境给FFmpeg集成libxvid
XviD是开源MPEG-4视频编码器,与DivX相似但后者非开源。早期MP4常使用XviD或DivX编码,现已被H.264取代。在Windows上集成FFmpeg的XviD编解码库libxvid,需访问<https://labs.xvid.com/source/>下载源码,解压后在MSYS环境中配置、编译和安装。之后重新配置FFmpeg,启用libxvid并编译安装。详细步骤包括configure命令、make和make install。成功后,通过`ffmpeg -version`检查是否启用libxvid。更多音视频开发技术可参考《FFmpeg开发实战:从零基础到短视频上线》。
123 0
FFmpeg开发笔记(二十九)Windows环境给FFmpeg集成libxvid
|
6月前
|
Ubuntu
蓝易云 - Ubuntu18.04安装编译ffmpeg库
现在,你应该已经在你的Ubuntu 18.04系统上成功安装和编译了FFmpeg库。你可以通过运行 `ffmpeg -version`来验证安装是否成功。
70 0