FFmpeg API 详解
H&A
这个作者很懒,什么都没留下…
展开
-
FFmpeg API 之 libavfilter
filter,可以翻译为过滤器,滤镜。在 FFmpeg 中有多种多样的滤镜,你可以把他们当成一个个小工具,专门用于处理视频和音频数据,以便实现一定的目的。如 overlay 这个滤镜,可以将一个图画覆盖到另一个图画上;transport 这个滤镜可以将图画做旋转等等。一个 filter 的输出可以作为另一个 filter 的输入,因此多个 filter 可以组织成为一个网状的 filter graph,从而实现更加复杂或者综合的任务。关于 filter 的概念和用法可以去查找 FFmpeg 的其他资原创 2020-06-06 16:33:39 · 1328 阅读 · 0 评论 -
FFmpeg API 之 Timestamp和TimeBase的辅助计算函数
首先,我们查看一下后面要用到的枚举变量AVRounding。它定义了舍入法,即如何将含有小数部分的数字转化为整数的方法。enum AVRounding { AV_ROUND_ZERO = 0, ///< Round toward zero. AV_ROUND_INF = 1, ///< Round away from zero. AV_ROUND_DOWN = 2, ///< Round toward -infinity.原创 2020-06-03 18:18:09 · 418 阅读 · 0 评论 -
FFmpeg API 之 libswresample
libswresample 库是用于音频重采样,格式转换,音频混合的库。重采样:即前后的 sample rate 不同格式转化:即前后的 format 不同音频混合:即前后的 channel_layout不同,而且前面的通道数小于后面的通道数库中最重要的结构体是 SwrContext,我们对音频的操作都是通过这个结构体进行的。SwrContext 结构体是不透明的,因此其参数必须通过 option API 来设置其选项。如果想要指定一个音频重采样,其步骤如下:分配一个SwrCo.原创 2020-05-31 19:37:36 · 895 阅读 · 0 评论 -
FFmpeg API 之 libswscale
libswscale 库用来做图片转化。我们在处理图片数据时,经常有诸如缩放尺寸,转化像素格式的需求。这些操作较为简单,在 FFmpeg 中是非常常见的操作,其效率对 FFmpeg 影响较大。因此,FFmpeg 提供了 libswscale 库。当我们获取到一个视频 Frame 后,相关的视频数据都存放在这个帧中(详情见AVFrame一节)。我们知道linesize 字段中保存了图片的每行的字节大小,因此,在 Frame 中,图片自然以行为基本单位进行操作,这点在转化中体现的比较明显。..原创 2020-05-28 22:14:36 · 427 阅读 · 0 评论 -
FFmpeg API 之 AVAudioFifo
AVAudioFifo是一个缓冲区,它以一次音频采样为基本单位,是一个先进先出的队列。有了它,对音频的采样数据做缓冲就会变得非常简单,其优势有两点:一,它让我们在采样层面做操作,而不是更底层的字节层面;二,它支持多种格式的单次采样,如支持planar或packed的采样格式,支持不同的通道数等等。AVAudioFifo的操作相对简单,我们看一下其相关的API。首先是分配和释放操作://分配一个AVAudioFifo。//sample_fmt和channels指定单次采样的参数//nb_sa原创 2020-05-26 15:02:35 · 1805 阅读 · 1 评论 -
FFmpeg API 之 AVSampleFormat
音频采样格式所描述的数据总是使用本地字节序。因此,采样数据可以用本地C语言类型来表示。虽然 有符号的32位 采样格式是一种非常常见的原始音频数据格式,但由于C语言中没有对应的类型,因此在FFmpeg中也就没有这种采样格式。 浮点数类型的音频采样格式基于如下设定:全部音量的取值范围为 [-1.0~1.0] ,它表示了完整的音量范围。任何超出这个范围的值都在音量可取范围之外。 音频采样数据的布局 对于 planar 采样格式来说,每个通道都有自己独立的数据缓冲区,通常称为一个平面(p..原创 2020-05-26 14:41:07 · 1800 阅读 · 0 评论 -
FFmpeg API 之 libavformat库
libavformat库,是FFmpeg中用于处理各种媒体容器格式(media container format)的库。它的两个最主要的功能是 : demuxing:解封装,将一个媒体文件分割为多个多媒体流 muxing:封装,将多个多媒体数据流写入到指定媒体容器格式的文件中 这两个过程所做的事情正好相反,是互逆的。我们注意到,在 mux 和 demux 的过程中,均少不了要从 input 读取 和 写入 output 的过程,因此 libavformat 单独分出了一个子模块,用于原创 2020-05-25 16:30:59 · 3277 阅读 · 0 评论 -
FFmpeg API 之 libavcodec库
libavformat 库负责封装和解封装,而 libavcodec 则用于解码和编码。类型 AVPacket 表示编码后的数据,其中包含一个或多个编码后的帧数据。类型 AVFrame 表示解码后,或者说原始的帧数据。编码和解码在某种程度来说,就是两者之间的互相转换。1、编解码概述FFmpeg 提供的 encode/decode API 有如下四个函数 avcodec_send_packet () / avcodec_receive_frame () / avcodec_send_fram.原创 2020-05-25 11:34:21 · 5329 阅读 · 0 评论 -
FFmpeg API 之 AVFrame
AVFrame 是 FFmpeg 中最常见的类型之一。AVFrame 表示一个未压缩或者说原始的视频帧或者音频帧。AVFrame 首先要区分它是一个视频帧还是一个音频帧,当其类型不同时,我们需要关注的字段也是不同的。AVFrame.format 字段表示其格式,当其为视频帧时,它是 AVPixelFormat,表示组成帧图片的像素的格式。当其为音频帧时,它是 AVSampleFormat,表示音频的取样格式。当 AVFrame 为视频帧时,我们应该关注如下字段: format:为.原创 2020-05-24 18:12:57 · 1068 阅读 · 0 评论 -
FFmpeg API 之 AVPacket
AVPacket 是 FFmpeg 中最常见的类型之一。AVPacket类,用于存储编码后的帧数据。它一般由 demuxer 导出,然后传递给 decoder 作为输入;或者,从 encoder 作为输出,然后传递给 muxer。对视频来说,一个 AVPacket 一般仅包含一个帧编码后的数据。对音频而言,它可能包含多个帧编码后的数据。encoder 允许输出空的 packet,也就是说其中没有编码后的数据,仅有 side data。(例如,在编码流程的末尾用于刷新一些流参数等)AVPacket原创 2020-05-24 17:28:23 · 433 阅读 · 0 评论 -
FFmpeg API 之 AVOption
options,可以翻译为“选项”,是 FFmpeg 中非常重要的一个概念。在 FFmpeg 中,我们可以对input , output, muxer, demuxer, encoder, decoder, device,protocols 等设置选项,以便于对它们的行为做控制。因此,options可以理解为是物体的属性或者特征。首先,我们要区分一个概念,AVOption是用来描述一个选项的,它不是拥有选项的那个物体,也不是选项本身。比如,如果在FFmpeg中描述人,那么人可以拥有多个选项,比如年龄这个原创 2020-05-24 16:21:49 · 732 阅读 · 0 评论 -
FFmpeg API 之 AVDictionary
AVDictionary是FFmpeg中非常常见的类型,在代码中,通常使用它来传递参数或信息。这里所谓的 “dictionary”,不是指普通的字典,而是指编程语言中,常见的一种 pair 结构,如C++中的map,Python中的字典,json中的键值对指的都是类似的意思。FFmpeg中的 AVDictionary 是 AVDictionaryEntry 的集合,而 AVDictionaryEntry 则是包含两个字符串字段的结构体(entry:条目,项的意思):typedef struct原创 2020-05-24 14:25:01 · 966 阅读 · 0 评论