Ffmpeg cmakelists编写
时间: 2023-11-13 09:04:45 浏览: 50
以下是一个简单的 Ffmpeg CMakeLists.txt 文件示例:
```cmake
cmake_minimum_required(VERSION 3.0)
project(ffmpeg_example)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 添加 Ffmpeg 库
find_package(PkgConfig REQUIRED)
pkg_check_modules(FFMPEG REQUIRED libavcodec libavformat libavutil libswscale)
# 添加源代码文件
add_executable(ffmpeg_example main.cpp)
# 链接 Ffmpeg 库
target_link_libraries(ffmpeg_example ${FFMPEG_LIBRARIES})
```
在这个示例中,我们使用了 CMake 的 `find_package` 命令来查找 Ffmpeg 库,并使用 `pkg_check_modules` 命令将其链接到我们的可执行文件中。同时,我们还指定了 C++11 标准,并将其要求设置为必须。最后,我们添加了一个名为 `main.cpp` 的源代码文件并将其编译为 `ffmpeg_example` 可执行文件。
相关问题
怎吗在CMakeLists中链接FFmpeg
在 CMakeLists.txt 文件中链接 FFmpeg,你需要执行以下步骤:
1.设置 FFmpeg 库路径:
```cmake
set(FFMPEG_DIR "path/to/ffmpeg")
```
2.添加 FFmpeg 库路径:
```cmake
link_directories(${FFMPEG_DIR}/lib)
```
3.添加 FFmpeg 头文件路径:
```cmake
include_directories(${FFMPEG_DIR}/include)
```
4.添加 FFmpeg 库:
```cmake
target_link_libraries(your_target_name
avformat
avcodec
avutil
avdevice
swscale
swresample
avfilter
postproc
)
```
注意:在上述代码中,your_target_name 是你的项目名称,avformat、avcodec 等是 FFmpeg 库的名称。你需要根据你的项目需要选择适当的库。
完成这些步骤后,你就可以使用 FFmpeg 库了。
树莓派使用ffmpeg编写c语言怎么用
对于在树莓派上使用ffmpeg编写c语言的问题,你需要安装ffmpeg及相关库,并在代码中引用相关头文件。以下是基本的步骤:
1.安装ffmpeg及相关库
在树莓派上打开终端并输入以下命令,安装ffmpeg及相关库:
sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libavfilter-dev
2.编写代码
在编写代码之前,需要确定你想要实现的功能以及相关的ffmpeg函数。然后,引用相关头文件并编写代码。以下是一个简单的示例代码,用于将视频文件转换为特定格式:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libavcodec/avcodec.h>
#include <libavutil/avutil.h>
#include <libavformat/avformat.h>
int main(int argc, char **argv)
{
AVFormatContext *pFormatCtx = NULL;
AVCodecContext *pCodecCtx = NULL;
AVCodec *pCodec = NULL;
AVFrame *pFrame = NULL;
AVPacket packet;
int i, videoStream;
const char *filename = argv[1];
av_register_all();
avformat_open_input(&pFormatCtx, filename, NULL, NULL);
avformat_find_stream_info(pFormatCtx, NULL);
av_dump_format(pFormatCtx, 0, filename, 0);
for (i = 0; i < pFormatCtx->nb_streams; i++) {
if (pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
videoStream = i;
break;
}
}
pCodecCtx = pFormatCtx->streams[videoStream]->codec;
pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
avcodec_open2(pCodecCtx, pCodec, NULL);
while (av_read_frame(pFormatCtx, &packet) >= 0) {
if (packet.stream_index == videoStream) {
avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
if (frameFinished) {
// Do something with the frame
}
}
av_free_packet(&packet);
}
avcodec_close(pCodecCtx);
avformat_close_input(&pFormatCtx);
return 0;
}
请注意,这仅仅是一个基本的示例代码,需要根据实际需求进行修改。
希望这能回答你的问题。如果你有其他问题,请继续问我。