H264中frame_num相关的各种句法的含义和区别
要理解这些参数的含义要先从帧和场开始说起, 在编码中可能会产生两种视频帧, 一种叫做帧一种叫做场. 那么帧和场有什么区别呢? 帧和场逐行扫描和隔行扫描在早期电视的图像是通过扫描屏幕两次产生的,第二次扫描和第一次扫描是互相交错的,两次扫描叠加在一起正好是一幅图像 我们注意下扫描方式可以分为 逐行扫描和隔行扫描 逐行扫描一般情况下是帧编码 隔行扫描可以是帧编码也可以是场编码 在帧编码中,参考为帧图像,采用帧运动补偿,两个场是联合编码;在场编码中,参考为场图像,两个场是分别编码,采用场运动补偿。 帧和场的编码方式逐行扫描可以采用三种编码方式: 1.固定帧编码(全帧)—-视频序列的全部帧始终采用帧编码方式。 2.固定场编码(全场)– 视频序列中帧被分成两个场独立编码。编码规则: a. I帧可编码成两个I场或一个I场和一个P场,即II、IP. b. P帧可编码成两个P场或一个P场和一个B场,即PP、PB. c. B帧可编码成两个B场,即BB. 3.图像级帧、场自适应编码 (PAFF)/ 宏块级帧场自适应(MBAFF) 视频序列能被编码成一个帧或两个场,自适应选择原则是根据采 ...
编解码相关标准&论文合集
最近想要研究一些窄带高清的方法,在网上翻各种论文,突发发现以前都没有把一些经典的论文保存下来,现在要找都记不得名字了。所以开一个帖子,将文章都整理记录下来,一点一点慢慢更新 主要分为编码评估,低码高清,码率控制和性能优化4个大类, 把最近今天有留底的更新上,后续慢慢补充 编码评估编码 Calculation of average coding esociency based on subjective quality scores 该文章提出了BD rate的评估方法,目前业界通用 Zvezdakova_Kulikov_Zvezdakov_Vatolin_BSQ_rate_color 该文章提出了BSQ-rate的评估方法,是对的BD-rate的修正, 是目前MSU主要使用的评估方法 客观 Image Quality Assessment: From Error Visibility to Structural Similarity 提出了SSIM的文章, 目前使用最多的客观评价标准 主观 R-REC-BT.500-14-201910-I!!PDF-C R-REC-BT.17 ...
ffmpeg常用命令
播放yuv视频文件1ffplay -video_size 1280x720 720p.yuv 解码H264文件成yuv420p1ffmpeg -i test_1080p.h264 -c:v rawvideo -pixel_format yuv420p out.yuv 转换y4m文件成yuv文件1ffmpeg -i xx.y4m -vsync 0 xx.yuv -y 截取文件的固定时间段1ffmpeg -i test.mp4 -vcodec copy -acodec copy -ss 00:00:00 -to 00:39:00 test_cut.mp4 -y 将文件缩放特定分辨率1ffmpeg -s:v 1920x1080 -r 25 -i input.yuv -vf scale=960:540 -c:v rawvideo -pix_fmt yuv420p out.yuv 合并两个yuv首先得确定两个yuv的格式是一样的 1type a.yuv b.yuv > c.yuv
程序使用静态库中的静态全局变量
背景写这篇文章的起因是由于最近使用了一个静态库,编译过程中报错的信息为没有找到变量,但是在静态库当中确实是有这个变量的声明和定义的,只是这个变量是一个static修饰的全局的变量。 刚开始一直怀疑我链接错了静态库,由于工程比较大,一直在纠结路径问题。后来直接加打印确认了我链接的静态库没有错,那就百思不得其解了,明明定义好的变量为何链接猴就消失了。 原因查找了一天资料终于发现,在静态库中,如果使用了静态全局变量初始化数据,在链接过程中会优化掉这部分数据 就会导致,程序链接了lib,但是实际上lib内的静态全局变量都没有被声明,所以源程序找不到这个变量也就正常了。 当然十分不推荐静态库使用静态全局变量这种做法,实在太不安全了。 解决这种情况需要在程序链接lib的时候添加 WHOLEARCHIVE选项,再进行链接 我通过在camke文件当中在链接之前添加以下两行解决: 12set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -WHOLEARCHIVE:libpre ...
H264的长期参考帧LTR
视频编码中为了实现压缩,通过缓存部分图片,通过帧和运动矢量结合生成新帧. 这些帧被叫做参考帧 参考帧以frame_num为索引查找,但是frame num是由最大值的,达到最大值后会被取模,如果frame num达到最大值后取模为0,就索引不到了,这个时候就需要另外一种标记方式,所以参考帧又分为长期参考帧和短期参考帧. 短期参考帧称作STR short term refence,长期参考帧称作LTR long term refence 作用提高图像质量: 高质量的帧可以提高后续帧的图像质量,在解码内容相似的帧时,可以使参考帧保持更长的时间,这样可以避免稳定情况下传输. 抗网损: 在网损和解码错误的情况下会导致解码器使用到一些低质量的宏块,这些宏块会影响后续帧的画面质量,甚至产生一些呼吸效应. 当缓存了一个LTR帧的时候,解码器就可以从LTR帧获取图像信息,从而保持画面的高质量 参考帧重排序(reordering)可能看到这里有点懵,突然出现的参考帧重排序是什么?为什么要重排序?一点一点说 我们知道编码一个帧, 这个帧必定是要参考某一个帧或者某几个帧,计算运动矢量,残差数据等等. ...
H263入门的一些基础知识
h263 是ITU-T用于视频会议的编码标准,最初设计是为了h.324的系统进行传输。后来发现H263也可以用于 H323,H320,RTSP,SIP协议传输。 1998年新增了功能,出现了第二版H263v2,也叫H263+,H263-1998. 2000年出现了第三版,H263v3,也叫H263++,H263-2000. 参考网址https://www.itu.int/rec/T-REC-H.263-200501-I/en https://datatracker.ietf.org/doc/html/rfc2190 https://datatracker.ietf.org/doc/html/rfc4629 H263支持的图像格式 图像格式 亮度行像素数 亮度行数目 色度行像素数 色度行 sub-QCIF 128 96 64 48 QCIF 176 144 88 72 CIF 352 288 176 144 4CIF 704 576 352 288 16CIF 1408 1152 704 576 H263的编码流程编码过程其实和264异曲同工,主要分为预测 ...