window10_ffmpeg调试环境搭建-编译64位

《FFmpeg原理》的社群来了,想加入社群的朋友请购买 VIP 版,VIP 版有更高级的内容与答疑服务。


前面已经介绍了 如何用 MSYS2 + MinGW 编译FFmpeg 32 位程序,本文主要讲解如何用 MSYS2 + MinGW 编译 FFmpeg 64位程序。

开始安装:

1,CMD 用 .\msys2_shell.cmd -mingw64 进入 MinGw64 位环境。

2,安装所需软件

# 刷新软件包数据
pacman -Sy  
# 安装mingw-w64。
pacman -S mingw-w64-x86_64-toolchain
pacman -S git
pacman -S make
pacman -S automake 
pacman -S autoconf
pacman -S perl
pacman -S mingw-w64-x86_64-SDL2
pacman -S libtool
#32位的cmake跟64位的cmake都装一下,比较保险。
pacman -S mingw-w64-i686-cmake
pacman -S mingw-w64-x86_64-cmake
pacman -S pkg-config 
pacman -S yasm
# 编译x264 需要 nasm
pacman -S nasm

小技巧, pacman -Ss 关键字:在仓库中搜索含关键字的包。


准备工作已经完毕了。

FFmpeg 这个工程编解码等功能,是需要依赖一些外部库的,例如 x264库,aac库等等。所以编译FFmpeg之前,需要把 x264 ,acc 等项目编译出静态库,然后再把x264静态库,acc静态库等 Link 进去 FFmpeg 的DLL里面。

x264 项目编译:

下面的命令请把 /home/loken 改成自己的目录。

编译过程中如果报 final link failed: No space left on device 错误,尝试重启window10。

# 回到用户目录
cd /home/loken
# 创建ffmpeg目录,build64 目录,统一管理
mkdir -p ffmpeg/build64  
# 进入ffmpeg目录
cd ffmpeg 
#下载x264项目代码
git clone https://gitee.com/mirrors_addons/x264
# 进入x264项目目录
cd x264 
# 执行configure
./configure --prefix=/home/loken/ffmpeg/build64/libx264 \
--host=x86_64-w64-mingw32 --enable-static \
--extra-ldflags="-Wl,--output-def=libx264.def"  
make -j8
make install

如果上面的命令没出错,在 ~/ffmpeg/build64/libx264/lib 目录下会编译出 x264 的静态库 libx264.a

fdk-aac项目编译:

# 回到ffmpeg目录
cd /home/loken/ffmpeg 
git clone --depth 1 https://gitee.com/mirrors/fdk-aac.git
cd fdk-aac
./autogen.sh
./configure --prefix=/home/loken/ffmpeg/build64/libfdk-aac --disable-shared \
--enable-static
make -j8
make install

如果上面的命令没出错,在 ~/ffmpeg/build64/libfdk-aac/lib 目录下会编译出 aac 的静态库 libfdk-aac.a

mp3项目编译:

下面的命令如果报错,请把 "~" 相对目录 改成绝对目录

cd /home/loken/ffmpeg 
git clone --depth 1 https://gitee.com/hqiu/lame.git
cd lame
./configure --prefix=/home/loken/ffmpeg/build64/libmp3lame --disable-frontend \
--disable-shared --enable-static
make -j8
make install

如果上面的命令没出错,在 ~/ffmpeg/build64/libmp3lame/lib 目录下会编译出 mp3 的静态库 libmp3lame.a

libvpx项目编译:

cd /home/loken/ffmpeg 
git clone --depth 1 https://github.com/webmproject/libvpx.git
cd libvpx
./configure --prefix=/home/loken/ffmpeg/build64/libvpx --disable-examples \
--disable-unit-tests --enable-vp9-highbitdepth --as=yasm
make -j8
make install

如果上面的命令没出错,在 ~/ffmpeg/build64/libvpx/lib 目录下会编译出 vpx的静态库 libvpx.a


FFmpeg 工程依赖的外部静态库都已经编译出来,下面可以开始编译 FFmpeg 工程了。

FFmpeg项目编译:

下载 ffmpeg 4.2 源码,链接:百度网盘 请输入提取码 提取码:g3k8

把文件 FFmpeg-4.2.zip 解压到 /home/loken/ffmpeg/ffmpeg

cd /home/loken/ffmpeg/ffmpeg-4.2

./configure \
--prefix=/home/loken/ffmpeg/build64/ffmepg-4.2 \
--enable-gpl \
--enable-sdl2 \
--enable-zlib \
--enable-shared \
--enable-nonfree \
--enable-libx264 \
--enable-libfdk-aac \
--enable-libmp3lame \
--enable-libvpx \
--extra-cflags="-I/home/loken/ffmpeg/build64/libfdk-aac/include" \
--extra-ldflags="-L/home/loken/ffmpeg/build64/libfdk-aac/lib" \
--extra-cflags="-I/home/loken/ffmpeg/build64/libvpx/include" \
--extra-ldflags="-L/home/loken/ffmpeg/build64/libvpx/lib" \
--extra-cflags="-I/home/loken/ffmpeg/build64/libx264/include" \
--extra-ldflags="-L/home/loken/ffmpeg/build64/libx264/lib" \
--extra-cflags="-I/home/loken/ffmpeg/build64/libmp3lame/include" \
--extra-ldflags="-L/home/loken/ffmpeg/build64/libmp3lame/lib"
  
make -j8
make install
编译完成之后,build64/ffmpeg-4.2 目录如下:

可以看到 ffmpeg.exe 已经编译出来了。这个时候 在MSYS2 仿真linux命令行里,ffmpeg.exe 是可以运行的。如图。

但是如果在window CMD 命令行运行 ffmpeg.exe ,会报错,提示 The application was unable to start correctly (0xc000007b) 。

0xc000007b 这个错误是因为 64位 exe 文件引用了 32位的库。

0xc000007b 这个错误比较麻烦,因为你看不到他缺少哪些库,实际上这个 0xc000007b 就是build64/ffmpeg-4.2/bin 目录缺少 libwinpthread-1.dll,所以 启动 ffmpeg.exe 的时候去了其他目录找了个 32位 的 libwinpthread-1.dll 进行引入。

实际上,要在CMD环境运行 ffmpeg.exe ,还需拷贝6个dll库到 build64/ffmpeg-4.2/bin

  1. C:\msys64\mingw64\bin\libwinpthread-1.dll
  2. C:\msys64\mingw64\bin\SDL2.dll
  3. C:\msys64\mingw64\bin\zlib1.dll
  4. C:\msys64\mingw64\bin\liblzma-5.dll
  5. C:\msys64\mingw64\bin\libbz2-1.dll
  6. C:\msys64\mingw64\bin\libiconv-2.dll

把上面这6个 dll全部拷贝到 build64/ffmpeg-4.2/bin ,再运行 ffmpeg.exe 就不会报错了

重要知识点:

  • 如何查看exe ,dll 的是 32位 还是 64位 ? 解答:dumpbin.exe /headers ffmpeg.exe

MSYS2 环境下 ffmpeg 64位的编译已经讲完了,下面介绍QT 如何调用 FFmpeg 的 api 函数。

之前编译ffmpeg 的时候,configure 指定了 --enable-shared,所以项目生成了几个DLL动态库。

  • avcodec-58.dll 编解码API。
  • avdevice-58.dll 设备API。
  • avfilter-7.dll 滤镜API
  • avformat-58.dll 容器API。
  • 等等。

下面介绍 QT 项目如何加入这些dll。如果之前没装过 qt 跟 Visual Studio 2015 请看第一篇文章。

1,打开Qt creator,点击New File Or Project,选择 Non-Qt Project ,选择 Plain C Application,创建工程 "ffmpeg-qt-version-64"。

2,勾选 64 位编译环境 kit 。

3,把 \home\loken\ffmpeg\build64 整个目录拷贝到 ffmpeg-qt-version-64 项目目录下。

4,修改 ffmpeg-qt-version-64.pro 文件:

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
​
SOURCES += main.c
​
contains(QT_ARCH, i386) {
    message("32-bit")
} else {
    message("64-bit")
    INCLUDEPATH += $$PWD/build64/ffmepg-4.2/include
    LIBS += $$PWD/build64/ffmepg-4.2/bin/avformat.lib \
            $$PWD/build64/ffmepg-4.2/bin/avcodec.lib \
            $$PWD/build64/ffmepg-4.2/bin/avdevice.lib \
            $$PWD/build64/ffmepg-4.2/bin/avfilter.lib \
            $$PWD/build64/ffmepg-4.2/bin/avutil.lib \
            $$PWD/build64/ffmepg-4.2/bin/postproc.lib \
            $$PWD/build64/ffmepg-4.2/bin/swresample.lib \
            $$PWD/build64/ffmepg-4.2/bin/swscale.lib
}

5,修改 main.c 文件:

#include <stdio.h>
#include "libavutil/avutil.h"
int main(){
    printf("Hello FFMPEG, version is %s\n", av_version_info());
    return 0;
}

6,编译运行 ffmpeg-qt-version-64 项目。会提示 0xc000007b 错误。这个错误也是因为缺少库,导致它程序自动去其他目录找了个32位的dll进行引入。

7,把 build64/ffmpeg-4.2/bin/*.dll 所有DLL都复制到 build-ffmpeg-qt-version-64-Desktop_xxxx-Debug\debug 目录。然后再次编译运行 ffmpeg-qt-version 项目,就会正常打印出 version。

注意事项:

  • 项目文件路径不要有中文,QT 可能会报错。

常见错误:

  • 如果报错找不到文件之类的,把qt 的 build-ffmpeg-qt-version-Desktop_xxx-Debug 目录删掉,因为可能有缓存,再重新执行上面步奏。

版权所属:弦外之音。 由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ffmpeg-5.0-1.5.7-windows-x86_64.jar 是一个用于在 Windows 平台上运行的 FFmpeg 库文件。它是一个开源的音视频处理工具,可以从多种媒体文件中提取、转码和编辑音视频流。 这个库文件是基于 FFmpeg 项目的最新版本 5.0 开发的。它支持在 Windows 64 位操作系统上运行,并提供了一系列功能强大的音视频处理方法。它可以读取和写入各种常见的音视频格式,包括 MP4、AVI、FLV、MOV 等。用户可以使用该库来提取音频或视频流,转码音视频文件,剪辑视频,添加字幕等。 要使用 ffmpeg-5.0-1.5.7-windows-x86_64.jar,首先需要在您的 Java 项目中引入该库文件。您可以将其作为依赖项添加到项目的 Classpath 中。然后,您可以通过在 Java 代码中调用相应的方法来使用 FFmpeg 功能。 例如,您可以使用 FFmpeg 在音频文件中提取音频流,然后对其进行编码或解码。您可以使用 FFmpeg 在视频文件中提取视频流,并进行截图或修改分辨率。您还可以使用 FFmpeg 对多个媒体文件进行合并或拆分操作。 除了提供强大的音视频处理功能外,ffmpeg-5.0-1.5.7-windows-x86_64.jar 还提供了丰富的文档和示例代码,以帮助用户更好地了解和使用该库。您可以参考官方文档和示例代码,了解每个方法的使用方法和参数说明。 总之,ffmpeg-5.0-1.5.7-windows-x86_64.jar 是一个在 Windows 平台上运行的 FFmpeg 库文件,提供了强大的音视频处理功能。用户可以使用它来处理音视频文件,实现音视频提取、转码、编辑等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Loken2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值