我正在尝试遵循有关使用 FFMpeg 库从 C++ 视频中提取帧的教程(作者:Bartholomew)。
为了包含库,根据教程,建议使用 pkg-config 查找库并将它们放在一起,以便 CMake 可以包含它们。在视频中,他使用自制程序安装 ffmpeg,并且 pkg-config 能够以某种方式找到 ffmpeg 的头文件(libavcodec、libavformat、libavdevice ...)
问题是我不知道如何安装 ffmpeg 库以便 pkg-config 可以找到它们。
在Windows上,我尝试安装编译的Windows二进制文件,并且尝试使用chocolatey安装ffmpeg-full包。但是,我看不到这些头文件安装到哪里。
C:/ffmpeg/
中有一个ffmpeg文件夹,但是当我查看时,没有头文件或库,只有二进制文件。也许我需要克隆整个源项目,但是 pkg-config 应该如何找到它们呢?当我尝试编译时,我得到以下输出:
Found PkgConfig: C:/Strawberry/perl/bin/pkg-config.bat (found version "0.26")
Checking for module 'libavcodec'
Can't find libavcodec.pc in any of C:/Strawberry/c/lib/pkgconfig
use the PKG_CONFIG_PATH environment variable, or
specify extra search paths via 'search_paths'
CMake Error at C:/Program Files/CMake/share/cmake-3.24/Modules/FindPkgConfig.cmake:607 (message):
A required package was not found
Call Stack (most recent call first):
C:/Program Files/CMake/share/cmake-3.24/Modules/FindPkgConfig.cmake:829 (_pkg_check_modules_internal)
lib/FFMpeg/CMakeLists.txt:5 (pkg_check_modules)
Checking for module 'libavcodec' <----- here
Can't find libavcodec.pc in any of C:/Strawberry/c/lib/pkgconfig
use the PKG_CONFIG_PATH environment variable, or
specify extra search paths via 'search_paths'
CMake Error at C:/Program Files/CMake/share/cmake-3.24/Modules/FindPkgConfig.cmake:607 (message):
A required package was not found
Call Stack (most recent call first):
C:/Program Files/CMake/share/cmake-3.24/Modules/FindPkgConfig.cmake:829 (_pkg_check_modules_internal)
lib/FFMpeg/CMakeLists.txt:5 (pkg_check_modules)
C:/Strawberry/c/lib/pkgconfig
的内容似乎是一大堆库,其中没有一个来自ffmpeg。
如果问题出在我的 CMakeLists 文件中,以下是子目录文件的内容:
cmake_minimum_required(VERSION 3.9)
project(FFMpeg)
find_package(PkgConfig REQUIRED)
pkg_check_modules(AVCODEC REQUIRED IMPORTED_TARGET libavcodec)
pkg_check_modules(AVFILTER REQUIRED IMPORTED_TARGET libavformat)
pkg_check_modules(AVDEVICE REQUIRED IMPORTED_TARGET libavdevice)
pkg_check_modules(AVUTIL REQUIRED IMPORTED_TARGET libavutil)
pkg_check_modules(SWRESAMPLE REQUIRED IMPORTED_TARGET libswresample)
pkg_check_modules(SWSCALE REQUIRED IMPORTED_TARGET libswscale)
add_library(FFMpeg INTERFACE IMPORTED GLOBAL)
target_include_directories(
FFmpeg INTERFACE
${AVCODEC_INCLUDE_DIRS}
${AVFILTER_INCLUDE_DIRS}
${AVDEVICE_INCLUDE_DIRS}
${AVUTIL_INCLUDE_DIRS}
${SWRESAMPLE_INCLUDE_DIRS}
${SWSCALE_INCLUDE_DIRS}
)
target_link_options(
FFmpeg INTERFACE
${AVCODEC_LDFLAGS}
${AVFILTER_LDFLAGS}
${AVDEVICE_LDFLAGS}
${AVUTIL_LDFLAGS}
${SWRESAMPLE_LDFLAGS}
${SWSCALE_LDFLAGS}
)
我做错了什么/不明白吗?
步骤1.从FFmpeg官方网站点击下载源代码:https://ffmpeg.org/download.html 将所有内容提取到新文件夹 C: fmpeg
第 2 步。如果您使用的是 Windows。安装MSYS2。按照 msys2 官方网站上的步骤进行操作:https://www.msys2.org/
第 3 步。安装 MSYS2 后,启动 MSYS2 终端并浏览到 c: fmpeg,然后运行命令来配置 make 和安装。
cd c:
cd ffmpeg
./configure
make
install
新的头文件都应该被构建,例如在 C: fmpeg\libavutil 下,只需链接 CMAKE 中的顶级文件夹 c: fmpeg 即可完成