我是靠谱客的博主 昏睡天空,最近开发中收集的这篇文章主要介绍window10_ffmpeg调试环境搭建-编译64位,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前面已经介绍了 如何用 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://file2.kaopuke.com:8081/files_image/20230402/175401453694.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:msys64mingw64binlibwinpthread-1.dll
  2. C:msys64mingw64binSDL2.dll
  3. C:msys64mingw64binzlib1.dll
  4. C:msys64mingw64binliblzma-5.dll
  5. C:msys64mingw64binlibbz2-1.dll
  6. C:msys64mingw64binlibiconv-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,把 homelokenffmpegbuild64 整个目录拷贝到 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 %sn", 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-Debugdebug 目录。然后再次编译运行 ffmpeg-qt-version 项目,就会正常打印出 version。

注意事项:

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

常见错误:

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

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

最后

以上就是昏睡天空为你收集整理的window10_ffmpeg调试环境搭建-编译64位的全部内容,希望文章能够帮你解决window10_ffmpeg调试环境搭建-编译64位所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部