摘要:
对于视频网站、电视厂商以及进行视频压制的用户来说,改变视频的帧率算是一个比较常见的需求。视频网站改变帧率主要是为了向不同级别的网站用户提供差异化服务;电视厂商则是以提供更好的显示效果作为电视的卖点;对视频压制有所研究的用户会为了更好的显示效果而追求更高的帧率,或者为了更高的压缩率而选择更低的帧率。 阅读全文
摘要:
在进行h264解码过程中,有两个最重要的结构体,分别为H264Picture、H264SliceContext。 H264Picture H264Picture用于维护一帧图像以及与该图像相关的语法元素。其中占用大片内存的结构体成员有以下几个:typedef struct H264Picture { AVFrame *f; int8_t *qscale_table; ... 阅读全文
摘要:
用三角函数表示周期函数 傅里叶的相关理论始于下面假设:对于周期为1的信号$f(t)$,可以由不同频率的三角函数组成, $f(t) = \frac{a_0}{2}+\displaystyle{\sum^{\infty}_{k=1}}(a_kcos(2\pi kt)+b_ksin(2\pi kt))$ 阅读全文
摘要:
ffmpeg中的并行解码分为两种: Frame-level Parallelism Slice-level Parallelism Frame-level Parallelism 帧间依赖 我们之前讨论过Frame-level Parallelism。在之前的文章中,我们说过在进行帧级的并行处理时, 阅读全文
摘要:
滤波也不总是单一的输入,也存在对多个输入流进行滤波的需求,最常见的就是对视频添加可视水印,水印的组成通常为原视频以及作为水印的图片或者小动画,在ffmpeg中可以使用overlay滤波器进行水印添加。 对于多视频流输入的滤波器,ffmpeg提供了一个名为framesync的处理方案。framesyn 阅读全文
摘要:
在ffmpeg中,常使用AVOption的API来进行参数设置。AVOption的API主要分为设置参数以及提取参数两种,无论是哪一种API都主要分为两大步骤: 本文主要讨论第一步,即定位参数所在的内存位置(av_opt_find2)。 可被进行参数查找的结构 在调用av_opt_set这一类函数的 阅读全文
摘要:
如果有定制ffmpeg滤波器的需求,有两个结构体是必须要了解的:AVFilter、AVFilterPad,所定制的滤波器主要就是通过填充这两个结构体来实现的。我们下面将详细解析这两个结构体,并通过对滤波器的初始化流程以及滤波流程进行分析,进一步加深对ffmpeg滤波框架的了解。 AVFilter A 阅读全文
摘要:
ffmpeg的中滤波器是以帧为原料来进行滤波的,那么自然地就会对帧的格式有所要求,可以说如果滤波器不知道帧的格式,就无法对帧进行处理。在进行视频滤波时,滤波格式指的是视频的像素格式;在进行音频滤波时,滤波格式包括音频采样格式,采样率以及通道数目。 承担协商任务的结构体AVFilterLink 滤波器 阅读全文
摘要:
ffmpeg中有很多已经实现好的滤波器,这些滤波器的实现位于libavfilter目录之下,用户需要进行滤波时,就是是调用这些滤波器来实现的。ffmpeg对于调用滤波器有一整套的调用机制。 基本结构 我们把一整个滤波的流程称为滤波过程。下面是一个滤波过程的结构 图中简要指示出了滤波所用到的各个结构体 阅读全文
摘要:
版本迭代 ffmpeg解码API经过了好几个版本的迭代,上一个版本的API是 解码视频:avcodec_decode_video2 解码音频:avcodec_decode_audio4 我们现在能看到的很多解码例子用的都是这两个,不过现在ffmpeg更推荐用新一代的API 向解码器输送数据包:avcodec_send_packet 从解码器获取帧:avcodec_receive_fram... 阅读全文