【音视频】测评工具VMAF

PS:学习地址Mac安装教程:https://testerhome.com/topics/25083

 命令汇总

# 编译环境准备
brew install gcc meson doxygen nasm freetype pkg-config hdf5
brew install numpy scipy

# 下载源码
git clone https://github.com/Netflix/vmaf.git
cd vmaf
git submodule update --init --recursive
# 编译
make

# 下载 VMAF 并安装
cd python
pip3 install cython
pip3 install -r requirements.txt
pip3 install --user .   # 此时,会出现各种报错

# 环境变量配置
vim ~/.bash_profile 
source ~/.bash_profile 

#在 vmaf 根目录下,
./unittest


#PyCharm执行,
which python
python ./vmaf/script/run_vmaf.py yuv420p 576 324 test/resource/yuv/src01_hrc00_576x324.yuv test/resource/yuv/src01_hrc01_576x324.yuv --out-fmt json

 报错汇总

编译环境准备时:
报错1:
Permission denied @ apply2files - /usr/local/lib/docker/cli-plugins

解决1:
sudo chown -R $(whoami) $(brew --prefix)/*
下载 VMAF 并安装:
报错2:

ninja: build stopped: subcommand failed.

解决2:其实不影响后续的执行,但是在最终运行的时候会报错。我是通过替换tools的文件解决的。

 

报错3:

vmaf/core/adm_dwt2_cy.c:634:10: fatal error: '../../../libvmaf/src/feature/adm.c' file not found
    #include "../../../libvmaf/src/feature/adm.c"

             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

解决3:修改相关路径为绝对路径

文件路径:

/vmaf/python/vmaf/core

vim adm_dwt2_cy.pyx

重新执行

pip3 install -r requirements.txt

pip3 install --user .

报错4:
    #warning "Using deprecated NumPy API, disable it with " 

     ^

    In file included from vmaf/core/adm_dwt2_cy.c:636:

    /Users/meizhuo/vmaf/libvmaf/src/feature/adm_tools.c:27:10: fatal error: 'mem.h' file not found

    #include "mem.h"

             ^~~~~~~

解决4:
cd libvmaf/src/feature/
cp /Users/XXXX/vmaf/libvmaf/src/mem.h .
执行Python文件命令:
python ./vmaf/script/run_vmaf.py yuv420p 576 324 test/resource/yuv/src01_hrc00_576x324.yuv test/resource/yuv/src01_hrc01_576x324.yuv --out-fmt json

报错5:
ModuleNotFoundError: No module named 'vmaf'

解决5:

/vmaf/python/vmaf/script/run_vmaf.py
curpath = os.path.abspath(os.path.dirname(__file__))
root_path = os.path.split(os.path.split(curpath)[0])[0]
if root_path not in sys.path:
    sys.path.append(root_path)

/vmaf/python/vmaf/svmutil.py
if VmafConfig.root_path() not in sys.path:
sys.path.append(VmafConfig.root_path())

 成功标志

答疑记录:

  1. 如何获取时间戳完全对准的yuv文件?
    1. 采集与编码-解码后的数据,帧数完全一致
    2. 格式:AVC?可转换成yuv文件
  2. 只能做上行-推流端的网络损失情况?
    1. 一个源文件(参照对象),通过SDK层的录制,进行不同网络下的对比流
    2. 原因:不能做下行的是因为获取接收端的流是经过损失的,与源流没有对比性。
  3. 播放端的延时自动获取?
    1. 原理:将时间戳打在关键帧/每一帧里,接收端进行解码解出时间戳,进行差值
    2. SCDN可用原因:秒/s级别的,RTC都是毫秒/ms级别的无法区分

问题记录:

  1. 视频打分(纯RTC)
    1. VMAF工具(有参考)使用,不同丢包率下的打分变化不大
    2. 提供开播采集的视频频 + 编码后的视频
  2. 音频打分(所有SDK)
    1. 新工具(无参考)调研
    2. 可提供开播采集的音频 + 接收端的音频,日志上报?
  3. 延时(所有SDK)
    1. 开启SEI, 存储在文件里,高丢包情况下的延时做参考
    2. 人工掐表,提供正常下的延时
  4. 视频丢包视频录制:(所有SDK)
    1. rtc拉流
  5. 超低延时直播提供录制:(纯RTC)
    1. rtc拉流
    2. srt拉流
    3. flv拉流
  6. 进房间成功率 + 时延
    1. 自动化跑1h、6h、1天,code = 200的统计
    2. Joinroom 到推流的时间差?首帧数据上报
原文地址:https://www.cnblogs.com/darlingmz/p/14832841.html