ffmpeg从入门到精通 (阮一峰的ffmpeg视频处理入门教程)

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

官网:https://ffmpeg.org/

具体介绍可以自行查看 ffmpeg百科。

项目组成

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了领先的音/视频编码库libavcodec等。

libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构

和读取音视频帧等功能;

libavcodec:用于各种类型声音/图像编解码;

libavutil:包含一些公共的工具函数;

libswscale:用于视频场景比例缩放、色彩映射转换;

libpostproc:用于后期效果处理;

ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;

ffsever:一个 HTTP 多媒体即时广播串流服务器;

ffplay:是一个简单的*放播**器,使用ffmpeg 库解析和解码,通过SDL显示;

现在我们就来看看怎么在使用。

一、*载下**并解压FFmpeg

官网:https://ffmpeg.org/

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

Download

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

Windows builds by BtbN

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

ffmpeg-master-latest-win64-gpl-shared.zip

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

解压

bin:动态链接库

doc: 参考文档

include: 头文件

lib: 静态链接库

二、新建目录helloffmpeg,并在其下新建ffmpeg目录,将解压出来的include和lib目录复制到其下

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

用Visual Studio Code(以下简称Code)打开

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

新建main.c和CMakeLists.txt,并分别输入以下代码

main.c

#include <stdio.h>
#include <libavcodec/avcodec.h>

int main(int argc, char *argv[])
{
    printf("Hello FFmpeg!\n");
    unsigned codecVersion = avcodec_version();
    printf("Version is: %d", codecVersion);
    
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.25)

project(helloffmpeg VERSION 1.0.0 LANGUAGES C)

include_directories(
    ffmpeg/include
)

link_directories(
    ffmpeg/lib
)

set(SOURCE_DIR
    main.c
)

add_executable(helloffmpeg ${SOURCE_DIR})

target_link_libraries(helloffmpeg
    avcodec avutil swresample
)

如果CMakeLists.txt写完后,没有立即生效,需要手动配置,或者重新启动Code。

手动配置,打开命令面板(Command Palette)

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

在搜索框中输入c/c++,选择Edit Configurations(UI)

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

修改编译器的路径:本文用的是gcc(参考文章:Windows上搭建MinGW(免安装版)C/C++编程环境(https://www.jianshu.com/p/991f022af4e5))

修改Include path:增加ffmpeg/include

配置好以后,Code的状态栏下就会变成这个样子

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

鼠标单击Build

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

Build

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

Launch the selected target in the terminal window(在终端窗口中启动选择的目标)

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

这时候发现没有输出信息,打开build目录,直接双击运行ffmpeg*ex.e**,发现会报错

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

说明缺少动态,将之前解压的ffmpeg/bin目录的对应文件复制到build目录下

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

再双击运行helloffmpeg*ex.e**

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

继续复制avutil-57.dll,swresample-4.dll

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

再双击发现不再报错,回到Code,再次点击Launch

ffmpeg从入门到精通,阮一峰的ffmpeg视频处理入门教程

至此,已经成功在项目中引入FFmpeg库。