随笔分类 - FFmpeg
摘要:对于视频网站、电视厂商以及进行视频压制的用户来说,改变视频的帧率算是一个比较常见的需求。视频网站改变帧率主要是为了向不同级别的网站用户提供差异化服务;电视厂商则是以提供更好的显示效果作为电视的卖点;对视频压制有所研究的用户会为了更好的显示效果而追求更高的帧率,或者为了更高的压缩率而选择更低的帧率。
阅读全文
摘要:在进行h264解码过程中,有两个最重要的结构体,分别为H264Picture、H264SliceContext。 H264Picture H264Picture用于维护一帧图像以及与该图像相关的语法元素。其中占用大片内存的结构体成员有以下几个:typedef struct H264Picture { AVFrame *f; int8_t *qscale_table; ...
阅读全文
摘要: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...
阅读全文
摘要:提取音频,具体点来说就是提取音频帧。提取方法与从视频文件中提取图像的方法基本一样,这里仅列出其中的不同点: 1. 由于目的提取音频,因此在demux的时候需要指定的是提取audio stream 2. 在decode时,解码音频与解码视频分别采用的是不同的API 3. 由于本播放器的音频输出实现是基
阅读全文
摘要:不仅限于ffmpeg,音频采样所得的PCM都含有三个要素:声道(channel)、采样率(sample rate)、样本格式(sample format)。 声道 当人听到声音时,能对声源进行定位,那么通过在不同的位置设置声源,就可以造就出更好的听觉感受,如果配合影像进行音频位置的调整,则会得到更好
阅读全文
摘要:在开始之前,我们需要了解视频文件的格式。视频文件的格式众多,无法三言两语就能详细分析其结构,尽管如此,ffmpeg却很好地提取了各类视频文件的共同特性,并对其进行了抽象描述。 视频文件格式,统称为container。它包含一个描述视频信息的头部,以及内含实际的音视频编码数据的packets。当然,这
阅读全文
摘要:简单的播放器需要实现一个最基本的功能:播放视频文件。 实现这个功能需要包含以下几个步骤: 本实现是通过ffmpeg来实现音视频的提取,通过sdl2来实现音视频的输出,版本如下: Github Repository
阅读全文