在开发编解码器时,经常需要分析码率波动情况,分析缓冲区是否有上下溢情况,所以用python开发一个简单的工具。它可以分析HM编码器的输出log,提取每一帧的比特数,结合视频帧率,就可以绘制码率波动图和VBV缓冲区状态的图像了。工具的UI如图1图2所示:plot type选项有两种选择:选项1"bitrate viewer"用于绘制每秒钟的码率情况;选项2"vbvbuffer view"用于绘制VBV缓冲区的状态图。
工具参数设置
source log为选择HM编码器输出的log文件,点击Open按钮选择相应的文件即可。
图1为绘制码率波动图的UI,有两个参数可设置:
- "frame rate"即视频帧率。
- "check interval"是设置多少帧统计一次码率,比如图中的25,表示每25帧(即一秒钟)统计一次码率。
图2为绘制VBV状态的UI,有四个参数可设置:
- "frame rate"即视频帧率。
- "vbv_bufsize"是设置VBV缓冲区的大小(kbits),图2设的是6000,VBV=6Mbits。
- "vbv_bitrate"是设置视频流的发送码率(kbps),对解码器而言,即往解码器接收端的VBV Buffer里填充的码率)
- "vbv_init_time"是设置VBV缓冲区的初始填充时间(ms)


工具输出结果
配置好工具的选项后,点击"Start Plot"按钮,即可进行绘制。
图3为输出的码率波动图像,图像的标题包含了平均码率,最大码率信息,及最大码率/平均码率的比值,图像上则标明了最大码率出现的时间点。可以从图像上看到,对这个序列的编码结果,整体码率波动很平缓,码率控制效果良好。

图4为输出的VBV Buffer状态图像,图像的标题包含了缓冲区被占用的最多和最小时的情况,以及最多和最小之间的差值(这个差值表示了对这个序列而言,最小需要的缓冲区大小)。从图像中看,这个序列没出现下溢情况,出现了一小段上溢但不严重,这个序列要保证不上下溢,需要的缓冲区最小为6.56Mbits。

github下载地址
https://github.com/ronnielige/py_hevc_bitrate_viewer.git
工具使用说明
- 运行plot_bitrate_view_app.pyw前,需要先安装python运行环境,建议直接安装Python-xy(它包含的库很全,不需额外安装库),下载地址:http://python-xy.github.io/downloads.html
- 先运行HM的TAppEncoder编码器,将输出结果保存为log文件。本项目里的 input_logs/hm265_G_footballdejia_abr6000.log 文件为一个标准的HM输出log文件。
- 可以根据需要修改plot_bitrate_view_app.pyw中的代码,支持其他265编码器的输出log格式。
版权声明:本文为博主原创文章,未经博主允许请勿转载。