FFmpeg入门教程:常见API使用及C语言开发

本文是一篇FFmpeg入门教程,详细介绍了音视频文件的基本概念,如多媒体文件、音频的量化编码和时间基。接着,讲解了如何配置FFmpeg开发环境,包括相关库的下载和VS项目的配置。文章还分享了一个开发案例,实现视频音频混搭功能,并阐述了处理逻辑及API使用。最后,提供了音视频开发学习资料的领取方式。
摘要由CSDN通过智能技术生成

因为项目原因接触使用 ffmpeg,当时是使用 c# 调用f fmpeg,通过指令对视频进行转码。指令的方式比较容易上手,但是如果涉及到复杂点的音视频二次开发,如果没有对音视频相关概念有一定的了解的话,感觉很难理解代码的含义和逻辑。由于兴趣最近开始摸索学习 ffmpeg API 的相关使用。

1、相关概念理解

1.1多媒体文件的基本概念

  • 多媒体文件就是一个容器

  • 在容器中有很多流(Stream/Track)

  • 每种流是由不同的编码器编码的

  • 从流中读出的数据称为包

  • 在一个包中包含着一个或多个帧

1.2音频的量化编码

  • 模拟信号到数字信号的转换过程(连续 ->离散、不连续的过程才能被计算机使用

  • 模拟信号->采样->量化->编码->数字信号

  • 量化的基本概念: 采样大小:一个采样用多少个 bit 存放,常用的是 16bit

  • 采样率:也就是采样频率(1秒采样次数),一般采样率有 8kHz、16kHz、32kHz、44.1kHz、48kHz 等,采样频率越高,声音的还原就越真实越自然,当然数据量就越大

  • 声道数:为了播放声音时能够还原真实的声场,在录制声音时在前后左右几个不同的方位同时获取声音,每个方位的声音就是一个声道。声道数是声音录制时的音源数量或回放时相应的扬声器数量,有单声道、双声道、多声道

  • 码率:也叫比特率,是指每秒传送的bit数。单位为 bps(Bit Per Second),比特率越高,每秒传送数据就越多,音质就越好。

码率计算公式:

码率 = 采样率 * 采样大小 * 声道数

比如采样率44.1kHz,采样大小为16bit,双声道PCM编码的WAV文件:

码率=44.1hHz*16bit*2=1411.2kbit/s。

录制1分钟的音乐的大小为(1411.2 * 1000 * 60) / 8 / 1024 / 1024 = 10.09M。

1.3时间基

  • time_base 是用来度量时间的,比如 time_base = {1,40}, 它的意思是将 1 秒分成 40 段,那么每段就是 1/40 秒,在 FFmpeg 中函数 av_q2d(time_base) 就是用来计算一段的时间的,计算结果就是 1/40 秒。比如一个视频中某一帧的 pts 是 800,也就是说有 800 段,那么它表示多少秒呢,pts av_q2d(time_base)=800(1/40)=20s,也就是说要在第 20 秒的时候播放这一帧 时间基的转换。不同格式时间基的不同。

  • PTS 是渲染用的时间戳。DTS 是解码时间戳。 音频的 PTS:以 AAC 音频为例,一个 AAC 原始帧包含一段时间内1024个采样及相关数据,也就是说一帧有 1024 个样本,如果采样率为 44.1kHz ( 1 秒采集 44100 个样本),所以 aac 音频 1 秒有 44100/1024 帧,每一帧的持续时间是 1024/44100 秒,由此可以计算出每一帧的 pts。

  • 转换公式

timestamp(秒) = pts * av_q2d(st->time_base)//计算该帧在视频音频中的位置
time(秒) = st->duration * av_q2d(st->time_base)//计算视频音频中的长度
st  为AVStream流指针
时间基转换公式
timestamp(ffmpeg内部时间戳) = AV_TIME_BASE * time(秒)
time(秒) = AV_TIME_BASE_Q * timestamp(ffmpeg内部时间戳)//timestamp就算是PTS/DTS

2、环境配置

2.1相关下载

进入官网 分别下载 Dev 和 Shared 压缩包。下载注意平台的选择对

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值