安装ffmpeg
- 首先下载 ffmpeg,选择一个文件夹执行命令
wget https://ffmpeg.org/releases/ffmpeg-5.1.tar.gz
- 下载完成之后解压文件
tar -zxvf ffmpeg-5.1.tar.gz
- 解压完成之后进入文件夹内
cd ffmpeg-5.1/
可以看到文件夹内的文件
- 在编译ffmpeg之前需要安装
yasm
sudo apt-get install yasm
- 安装yasm完成之后开始配置并编译安装ffmpeg
还是在ffmpeg-5.1/
文件夹内,执行命令
./configure --enable-shared --enable-postproc --enable-gpl --enable-libx264 --prefix=/opt/ffmpeg
注意,
--prefix=
后面的路径为安装的路径,可以随便更改,更改完成后将安装在你更改的那个路径中;也可以不更改,将安装在/opt/ffmpeg中
- 以此执行以下命令
make时间会很长,耐心等待,中间可能会有报错信息,忽略即可
make
sudo make install
- 安装完成之后进入
/opt/ffmpeg
可以看到以下目录
- bin目录下是ffmpeg的可执行文件
- include目录下是头文件
- lib目录下是编译完的库文件
- share目录下是文档
把ffmpeg引入c++中
- 这里使用Clion示例,首先创建一个工程
- 导入ffmpeg
将/opt/ffmpeg
文件夹复制到项目目录中,删除bin
share
,并删除lib
中非.a结尾的文件,仅留下如图所示的内容
- 编辑修改cmake
cmake_minimum_required(VERSION 3.24)
project(ffmpeg_demo)
set(CMAKE_CXX_STANDARD 11)
# 引入ffmpeg库的头文件
include_directories(${PROJECT_SOURCE_DIR}/ffmpeg/include)
# 引入ffmpeg库的文件
link_directories(${PROJECT_SOURCE_DIR}/ffmpeg/lib)
# 指定入口文件
add_executable(ffmpeg_demo main.cpp)
#新增,指定链接哪些库
target_link_libraries(
ffmpeg_demo # 这里写上面指定的项目名
# 指定引入哪些库,注意顺序非常重要,如果出现函数未定义,先尝试修改顺序
avformat
avcodec
avdevice
avfilter
avutil
postproc
swresample
swscale
)
- 编写代码
#include <iostream>
//在C++里使用C代码需要用 extern "C"
extern "C"
{
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
}
int main(int argc, char *argv[])
{
//注册所有的api,在最新的版本已经废弃这个函数,不过调用也没有关系
// av_register_all();
int ret;
char errors[1024];
AVFormatContext *fmt_ctx = nullptr;
// 由于编译出来的可执行文件是在cmake-build-debug文件夹内运行的,需要 ../ 定位到上一层目录才行
const char *src_filename = "../demo.mp4";
//打开一个输入文件的上下文
ret = avformat_open_input(&fmt_ctx, src_filename, nullptr, nullptr);
if (ret < 0)
{
av_strerror(ret, errors, 1024);
fprintf(stderr, "Could not open source file %s, %d(%s)\n", src_filename, ret, errors);
exit(1);
}
// 打印出输入文件的媒体信息
av_dump_format(fmt_ctx, 0, src_filename, 0);
avformat_close_input(&fmt_ctx);
return 0;
}
在项目目录中添加一个MP4文件,重命名为demo.mp4
- 运行main.cpp即可看到打印的信息