音视频
文章平均质量分 63
frgfnjrgn
路漫漫其修远兮,吾将上下而求索
展开
-
利用FFmpeg将一系列jpg图片封装成mp4格式
#include "libavformat/avformat.h"#include "libavutil/timestamp.h"#define NUMS 33void saveframe(AVFrame *frame, const char *filename) { FILE *file; file = fopen(filename, "wb+"); int width = 320; int height = 480; unsigned char *buf = (unsigned c.原创 2022-04-22 11:14:22 · 2150 阅读 · 2 评论 -
nvenc硬件编码相关设置
1.如何设置强制I帧编码 av_opt_set_int(context->priv_data,"forced-idr",1,0); 接收到强制I帧请求之后,设置video->pict_type =AV_PICTURE_TYPE_I。2.如何设置无缓冲编码(即编码一帧出一帧,无囤帧现象) context->max_b_frames = 0; (必须是无b帧编码) av_opt_set_int(context->priv_data, "zerolat...原创 2020-05-24 20:20:31 · 1702 阅读 · 0 评论 -
H264码流解析
https://blog.csdn.net/u010512264/article/details/82083467?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonec转载 2020-05-21 20:47:57 · 300 阅读 · 0 评论 -
ffmpeg多线程解码
一。ffmpeg中使用到的多线程的概念: 2.共享变量的互斥 互斥锁(mutex-lock)是一种信号量,用来防止两个线程在同一时刻访问相同的共享资源,它有锁定状态和非锁定状态,在任意时刻,一个线程要想存取共享数据,线程必须首先获得mutex-lock,当此线程释放此共享数据的时候必须对mutex-lock解锁,在一个任意的时间内,只有一个线程能锁定互斥锁,通过函数pthrea...原创 2020-01-17 17:32:02 · 3002 阅读 · 2 评论 -
x264中结构体之x264_param_t
typedef struct x264_param_t{ /* CPU 标志位 */ unsigned int cpu; int i_threads; /* 并行编码多帧 */ int b_deterministic; /*是否允许非确定性时线程优化*/ int i_sync_lookahead...转载 2019-04-09 12:05:24 · 161 阅读 · 0 评论 -
windows下Eclipse调试ffmpeg
windows下mingw编译ffmpeg一、编译环境配置1、Mingw的安装(1)、MINGW的下载网址:https://sourceforge.net/projects/mingw/files/ 选择Download mingw-get-setup.exe (86.5 kB)(2)、双击mingw-get-setup.exe,选择“Install”,默认安装到C盘,可自行设置安装路...转载 2019-04-11 10:22:01 · 258 阅读 · 0 评论 -
Linux下找不到dev/video0这个目录
一/设置虚拟机:1.在虚拟机菜单栏中选择“虚拟机(M)”->选择“可移动设备”->选择“xxxx Camera”->选择“连接(断开与主机连接)”,设置完这项之后,虚拟机接管了笔记本摄像头。2、在终端输入 ls /dev 就能看到 video0外设了。3、在终端输入命令, 安装cheese apt-get install cheese4、在终端输入命令,启...转载 2019-04-10 10:49:19 · 16954 阅读 · 2 评论 -
YUV视频格式
YUV格式两大类:YUV格式有两大类:planar和packed。对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。对于packed的YUV格式,每个像素点的Y,U,V是连续交替存储的。YUV视频有4:4:4采样,4:2:2采样,4:2:0采样YUV4:4:4采样,每一个Y对应一组UV分量。8+8+8 = 24bits,3个字节...转载 2019-03-30 19:07:36 · 904 阅读 · 0 评论 -
Content Aware ABR技术(六)
OTT视频流传输通常消耗较多的带宽资源,随着在线视频观看需求的增加,对现有的传输网络带来了较大的压力。2016年,全美平均家庭互联网下载速度峰值达到了54.97Mbps,相比2015年增加了40%。此外,Netflix目前推荐的HD视频流最小连接带宽为5Mbps,UHD为25Mbps。如果在这个速度下,当一个家庭在高峰时段连接多路HD视频流时,网速会急剧下降,导致视频播放出现卡顿,同时视频清晰度也...转载 2019-03-19 12:32:10 · 198 阅读 · 0 评论 -
Content Aware ABR技术(五)
1 Bitmovin per-title encoding早在六七年前,per-title encoding相关的概念就已经提出,不过大多数早期的研究基本上都认为per-title encoding仅在实验环境下有效,而并不适合商业应用,因为每个视频在编码前需要进行大量的编码测试分析才能得到每种分辨率下对应的最佳码率。直到近两年,Netflix团队通过多年的努力提出了一种视频复杂度分析开销较低...转载 2019-03-19 10:24:58 · 260 阅读 · 0 评论 -
x264中码率控制(二)x264_ratecontrol_start函数
在一帧的编码前就选择QP值。帧层码率控制,到这一步,一帧中所有宏块还是统一qp的void x264_ratecontrol_start( x264_t *h, int i_force_qp ){ x264_ratecontrol_t *rc = h->rc; ratecontrol_entry_t *rce = NULL; //used for 2pass ...转载 2019-03-22 14:39:12 · 715 阅读 · 0 评论 -
x264几种码率控制方式的实现
几点理论:1、固定质量并不等价于PSNR或QP完全恒定。复杂场景或者高速场景中难以辨别的细节会被选择性省略,以节省空间;2、如果运动预测生效,将获得更好的质量:低速场景中,1个错误可能停留好几秒钟。此时如果运动预测启用,只需要更改一个帧,就能增进整个场景的质量;3、如果有一个帧的一个QP的编码结果,就可以预测这个帧其它QP编码将消耗的空间。QP差距越大,预测越不准确;4、帧的重要性取决于...转载 2019-03-22 10:59:15 · 552 阅读 · 0 评论 -
Content Aware ABR技术(四)
为了在有限带宽和较低成本开销下提供更好的视觉体验,在实际应用中OTT视频分发平台一般采用ABR技术进行编码传输。在传统ABR技术框架中,每个源视频通过降采样和升采样产生多个分辨率版本,每种分辨率的视频进一步以多个码率编码,这些分辨率和码率的不同组合被称为编码阶梯(或配置)。用户在观看视频流时,客户端根据实际网络带宽以及设备情况选择最佳的分辨率和码率组合以期达到较好的观看体验。而在此之前,内容提供商...转载 2019-03-18 20:05:01 · 343 阅读 · 0 评论 -
Content Aware ABR技术(三)
1 Beamr的视频质量工具编码失真是每个视频编码专业人员重点关注的对象。对于大部分互联网用户来说,当下能获得的视频码率平均在3Mbps左右。在这个码率下,规模化压缩视频文件时需要一套有效的度量工具或算法来检测和分析编码失真。常用的视频质量评价指标是PSNR和SSIM,两者都是全参考图像质量评价模型。PSNR数学表示简洁,便于分析,但不能很好的反映视觉上失真。SSIM一定程度上反映了视觉感...转载 2019-03-18 19:43:43 · 242 阅读 · 0 评论 -
x264中码率控制(三)rate_estimate_qscale函数
// 依据到目前为止编码bit数估算一帧的qscale该函数主要进行qscale的初始化和调整,是码率控制部分的核心之一,另一个是get_scale。0、计算SATD和图像的模糊复杂度1、在get_scale中,按复杂度采用指数模型得到qscale rcc->last_qscale = pow( rce->blurred_complexity, 1 - rcc->...原创 2019-03-25 15:48:58 · 1789 阅读 · 0 评论 -
x264函数功能总结
函数名称 所以位置 完成功能 void x264_frame_filter common\mc.c 帧滤波 void x264_frame_init_lowres common\mc.c 亮度1/2像素值初始化 ...转载 2019-04-09 12:25:01 · 268 阅读 · 0 评论 -
ffmpeg.c源码分析
先看主函数int main(int argc, char **argv){ int i, ret; BenchmarkTimeStamps ti; init_dynload(); register_exit(ffmpeg_cleanup); setvbuf(stderr,NULL,_IONBF,0); /* win32 runtime need...转载 2019-04-15 20:43:54 · 2281 阅读 · 0 评论 -
视频中的TI与SI指标
SI表征一帧图像的空间细节量。空间上越复杂的场景,SI值越高。TI表征视频序列的时间变化量。运动程度较高的序列通常会有更高的TI值。SI计算方法:对第n帧视频进行Sobel滤波,然后对滤波后图像计算标准差。选这些帧中的最大值为SI。TI计算方法:求n与n-1帧图像的帧差,然后对帧差图像计算标准差。选这些帧中的最大值为TI。以下截图分别显示Sobel滤波和帧差结果:Sobel滤波...转载 2019-09-06 16:08:15 · 2442 阅读 · 0 评论 -
FFMPEG之TimeBase成员理解
FFMPEG的很多结构中有AVRational time_base;这样的一个成员,它是AVRational结构的typedef struct AVRational{ int num; ///< numerator int den; ///< denominator} AVRational;AVRational这个结构标识一个分数,num为分数,den为分母。...转载 2019-06-13 18:08:29 · 346 阅读 · 0 评论 -
ffmpeg中转码时的数据流走向
一.ffmpeg中的解码操作是在函数static int process_input(int file_index)中完成的。1.在该函数中首先会调用static int get_input_packet(InputFile *f, AVPacket *pkt)函数将通过av_read_frame(f->ctx, pkt)函数将文件中的视频或音频数据读取到AVPacket结构体中。2...原创 2019-05-29 20:32:21 · 1288 阅读 · 0 评论 -
如何检测一个packet中的数据是关键帧
通过AVPacket中的flags来判断。具体的代码参考如下:#include "stdafx.h"#include<stdio.h>#include<stdlib.h>#include<iostream>extern "C"{ #include <libavcodec/avcodec.h> #include <lib...原创 2019-06-13 12:05:10 · 983 阅读 · 0 评论 -
ffmpeg中的协议解析
协议的相关结构:协议操作的顶层结构是AVIOContext,这个对象实现了带缓冲的读写操作;FFMPEG的输入对象AVFormatContext的pb字段指向一个AVIOContext。AVIOContext的opaque实际指向一个URLContext对象,这个对象封装了协议对象及协议操作对象,其中prot指向具体的协议操作对象(如URLProtocol),priv_data指向具体的协...转载 2019-05-31 16:09:22 · 1676 阅读 · 0 评论 -
视频质量评估工具VMAF的使用
一。安装 vmaf git clone https://github.com/Netflix/vmaf.git cd vmaf git submodule update --init --recursive make echo export PYTHONPATH="$(pwd)/python/src:$(pwd)/sureal...转载 2019-05-16 11:55:01 · 9129 阅读 · 0 评论 -
ffmpeg在Linux下的编译与使用
ffmpeg在Linux下的编译请看文章:https://blog.csdn.net/yihuanyihuan/article/details/84405091ffmpeg安装第三方库请看文章:https://blog.csdn.net/yihuanyihuan/article/details/84405111linux下编译ffmpeg后会生成相关的动态文件与头文件,如何按照上述方法进行...转载 2019-05-20 15:35:50 · 1035 阅读 · 0 评论 -
从ffmpeg中抓取mv/mb_type/dct_coeff/qp和MBSize等数据(H.264)
1. mv——运动矢量mv——Motion Vector,即运动矢量。做视频运动相关的同学对这个感念应该不陌生,其实它描述的就是block级别的光流,视频编码过程中以块为单位进行亚像素精度的运动矢量的搜索,得到两个相关块之间的运动矢量,描述两帧之间的运动方向和大小。编解码中传递的其实是当前block与相邻block的运动矢量之间的差值,经过熵解码和运动矢量预测,才能得到真正的当前bloc...转载 2019-05-08 20:14:27 · 785 阅读 · 0 评论 -
ffmepg将mp4视频切割成ts文件从而形成m3u8文件
切片生成m3u8列表命令:ffmpeg -i input.mp4 -c:v libx264 -c:a aac-f hls output.m3u8此转换命令默认的每片(即一个ts文件)时长是2s,m3u8列表文件中默认只保存最后的5条片信息,也就是播放器在拉流时只能播最后的那5条ts视频文件。这肯定不是你想要的,那么幸运的是ffmpeg提供了更改这些相关设置的参数,如下:相关设置参数:...转载 2019-04-23 12:01:14 · 2646 阅读 · 0 评论 -
x264源代码框架分析
X264编码器主干部分的函数调用关系如下图所示。从图中可以看出,x264主干部分最复杂的函数就是x264_encoder_encode(),该函数完成了编码一帧YUV为H.264码流的工作。与之配合的还有打开编码器的函数x264_encoder_open(),关闭编码器的函数x264_encoder_close(),以及输出SPS/PPS/SEI这样的头信息的x264_encoder_head...转载 2019-04-17 15:19:58 · 700 阅读 · 0 评论 -
Content Aware ABR技术(二)
上次我们回顾了Content Aware ABR的使用场景和基本原理,并梳理了Netflix的per-title和per-chunk技术相关研究进展。本文将主要介绍YouTube关于ABR的一些研究进展。1. Multi-resolution ABR码率切换点的选取ABR(Adaptive Bit Rate)技术使得视频流能够在不同的网络带宽环境下传输,目前广泛使用的ABR技术是通过动态调...转载 2019-03-18 16:56:39 · 306 阅读 · 0 评论 -
ffmpeg中的read_frame_internal函数
read_frame_internal 在ffmpeg中实现了将format格式的packet,最终转换成一帧帧的es流packet,并解析填充了packet的pts,dts等信息,为最终解码提供了重要的数据,read_frame_internal,调用ff_read_packet,每次只读取一个包,然后直到parser完这个包的所有数据,才开始读取下一个包,parser完的数据被保存在parse...原创 2019-03-13 12:06:44 · 1340 阅读 · 0 评论 -
ffmpeg解码的基本流程
转载自:https://www.cnblogs.com/findman/p/6050580.html转载 2018-12-01 23:56:48 · 176 阅读 · 0 评论 -
avcodec_send_packet()函数与avcodec_receive_frame()函数
上述函数提供的是解码的输入输出API1.对于解码: 发送一个packet:函数为avcodec_send_packet(AVCodecContext *avctx,AVPacket *avpkt),该函数只是将一个packet放入到队列中等待解码。并不是一个packet,就代表一个frame,解码操作是在该函数中进行的。完成此操作后,解码后的数据放在avctx->inter...转载 2018-12-01 23:53:34 · 5874 阅读 · 0 评论 -
FFMPEG结构体分析:AVFrame
AVFrame位于libavutil下frame.h文件中这个结构体用来描述解码出音视频数据。AVFrame必须使用av_frame_alloc()分配。AVFrame必须与av_frame_free(AVFrame **frame)释放。引用计数:av_frame_ref(AVFrame *dst,const AVFrame *src)AVFrame *av_frame_clone(c...转载 2018-12-01 21:22:52 · 330 阅读 · 0 评论 -
FFMPEG结构体分析:AVCodecContext
AVCodecContext为编解码器上下文结构体,定义在libavcodec/avcodec.h中,其定义的变量相当多,其中大部分变量是编码器需要用到的,解码器用到的变量比较少,下面介绍其中部分关键的变量(主要是解码器的):enum AVMediaType codec_type:编解码器的类型(视频,音频...)struct AVCodec *codec:采用的解码器AVCode...转载 2018-12-01 20:12:14 · 243 阅读 · 0 评论 -
FFmpeg数据结构:AVPacket解析
本文主要从以下几个方面对AVPacket做解析:AVPacket在FFmpeg中的作用 字段说明 AVPacket中的内存管理 AVPacket相关函数的说明 结合AVPacket队列说明下AVPacket在传递过程中数据缓存的管理AVPacket简介AVPacket是FFmpeg中很重要的一个数据结构,它保存了解复用之后,解码之前的数据(仍然是压缩后的数据)和关于这些数据的一些...转载 2018-12-01 14:37:28 · 220 阅读 · 0 评论 -
FFmpeg:AVStream结构体分析
AVStream简介AVStream在FFmpeg使用过程中关于编解码至关重要的结构体之一,是对流(Stream)的封装和抽象,描述了视频、音频等流的编码格式等基本流信息。该结构体在avformat.h中申明。typedef struct AVStream { int index; /**< 在AVFormatContext中的stream索引 */ ...转载 2018-11-30 00:27:37 · 472 阅读 · 0 评论 -
FFmpeg+vs2013开发环境配置(windows)
1、下载ffmpeg包(dll、include、lib) https://ffmpeg.zeranoe.com/builds/ 有3个版本:Static、Shared和DevStatic --- 包含3个应用程序:ffmpeg.exe , ffplay.exe , ffprobe.exe,相关的DLL已经被编译到exe里了。 Shared---包含3个应用程序之外还包...转载 2018-11-25 15:57:55 · 173 阅读 · 0 评论 -
FFmpeg:AVFormatContext结构体分析
https://blog.csdn.net/qq_25333681/article/details/80428852AVFormatContext是API中直接接触到的结构体,位于avformat.h中,是音视频数据,也就是音视频文件(通常接触到的mp3/mp4等文件)的一种抽象和封装,该文件中包含了多路流,包括音频流、视频流、字幕流等。该结构体的使用,贯穿了ffmpeg使用的整个流程,现在数...转载 2018-11-26 00:31:48 · 270 阅读 · 0 评论 -
多媒体容器文件格式
容器文件格式主要包括文件头部分,索引部分以及多媒体数据部分。文件头部分主要说明了多媒体数据符合的的压缩标准及规范信息,包括视频的分辨率,帧率以及音频的采样率等由于多媒体数据通常会被分成若干块, 各块数据之间也可能是不连续存储的, 因此需要再索引部分建立多 媒体数据的存储位置索引,其详细显示了视频数据存储位置索引,用来记录相应数据块的存储位置 的偏移量,由于各数据块的大小可能不同,因此也可能...转载 2018-11-26 00:23:12 · 441 阅读 · 0 评论 -
ffmpeg的基本用法
v 容器就是一种文件(封装)格式,比如flv、mkv、ts、mp4、rmvb、avi等。包含下面5种流以及文件头信息。v 是一种视频数据信息的传输方式,5种流:音频,视频,字幕,附件,数据。v 把不同的流按照某种容器的规则放入容器,这种行为叫做复用(mux)把不同的流从某种容器中解析出来,这种行为叫做解复用(demux)v FFmpeg的名称来自MPEG视频编码标准,前面的“F...转载 2018-11-23 23:43:36 · 802 阅读 · 0 评论 -
ffmpeg安装第三方库
安装好了ffmpeg后,如果你使用ffmpeg工具去把某个视频文件转成h264视频编码、mp3音频编码or其他ffmpeg自身不带的xxx编码类型,就会看到报错信息,unknown encoder 'xxx'。此刻你需要的只要去安装其他的编码器就行了,本质上其实是把其他的编码器以库的形式安装好,例如,把正确的libx264.so or libx264.a存放在/usr/lib下 or /usr/l...转载 2018-11-23 23:39:55 · 1351 阅读 · 0 评论