在macos10.13.5下编译vmaf

本文介绍了如何在macOS上编译并使用Netflix开源的VMAF视频质量评估工具。详细记录了安装过程中的注意事项及解决办法,并通过实例展示了如何评估不同参数转码后的视频质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:https://testerhome.com/topics/11888

vmaf github地址:https://github.com/Netflix/vmaf

 Netflix开源了vmaf后,这一指标受到了越来越多的企业的认可,所以我也尝试着在macos进行了编译,编译步骤参照vmaf工程的readme和上面链接中的文章,由于macos进行了更新,所以有些坑也跟大家分享下。

1. 下载homebrew,流程参照官网

2. 

# 系统版本 MacOS 10.13.2
brew install gcc freetype pkg-config homebrew/science/hdf5 python
#如果报错,就换成
brew install gcc freetype pkg-config homebrew/core/hdf5 python

# 替换 MacOS 自带的 Python
echo "export PATH=/usr/local/opt/python/libexec/bin:$PATH" >> ~/.bash_profile
# 最新版的macos把python换成了3.7.0版,而vmaf工程用的是3.0以下版本的语法,我的python2.7.0在python2中,所以对应的上述命令就换成了:
echo "export PATH=/usr/local/opt/python2/libexec/bin:$PATH" >> ~/.bash_profile

source ~/.bash_profile

brew install numpy scipy

pip install matplotlib notebook pandas sympy nose scikit-learn h5py

# 安装 vmaf
git clone https://github.com/Netflix/vmaf.git
# git clone总是卡在30%,网上说可能是因为文件过大,服务器不稳定,后来我重装了下git就好了
cd vmaf
git submodule update --init --recursive
make
echo export PYTHONPATH="$(pwd)/python/src:$(pwd)/sureal/python/src:$PYTHONPATH" >> ~/.bash_profile
source ~/.bash_profile

剩下验证的流程就参照转载的那篇文章中的步骤即可,具体如下:

vmaf 源码里带了一些用于测试的视频,验证一下有没有安装成功:

./run_vmaf yuv420p 576 324 \
  python/test/resource/yuv/src01_hrc00_576x324.yuv \
  python/test/resource/yuv/src01_hrc01_576x324.yuv \
  --out-fmt json
# 执行成功有以下输出
   ...
   ], 
    "aggregate": {
        "VMAF_feature_adm2_score": 0.9345878041226809, 
        "VMAF_feature_motion2_score": 3.8953518541666665, 
        "VMAF_feature_vif_scale0_score": 0.36342081156994926, 
        "VMAF_feature_vif_scale1_score": 0.7666473878461729, 
        "VMAF_feature_vif_scale2_score": 0.8628533892781629, 
        "VMAF_feature_vif_scale3_score": 0.9159718691393048, 
        "VMAF_score": 76.69927060701059, 
        "method": "mean"
    }
}

从输出可以看出对转码前和转码后的两个视频逐帧比较,从 6 个维度评分,最后是总分 VMAF_score 。
播放这两个视频用肉眼看看:

brew install ffmpeg --with-sdl2 --with-x265
ffplay -f rawvideo -video_size 576x324 -pixel_format yuv420p src01_hrc00_576x324.yuv
ffplay -f rawvideo -video_size 576x324 -pixel_format yuv420p src01_hrc01_576x324.yuv

找了一个蓝光视频源,用不同参数转码,之后用 vmaf 评下分。

# 视频文件名是 origin.mkv,查看下视频流信息
ffmpeg -i origin.mkv -hide_banner

Stream #0:0(jpn): Video: hevc (Main 10), yuv420p10le(tv), 1920x1080, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 1k tbn, 23.98 tbc (default)

# 剪切出 8 秒的片段
ffmpeg -i origin.mkv -vcodec copy -acodec copy -ss 00:20:42 -t 00:00:08 split.mkv
# 输出 .yuv 格式
ffmpeg -i split.mkv split.yuv
# CRF 28 转码
ffmpeg -i split.mkv -c:v libx265 -crf 28 crf28.mkv
# 输出 .yuv 格式
ffmpeg -i crf28.mkv crf28.yuv
# 评分
./run_vmaf yuv420p10le 1920 1080 \
  split.yuv \
  crf28.yuv \
  --out-fmt json

试完往下看 README,发现 vmaf 提供了一个 ffmpeg2vmaf 命令,不用自己输出 .yuv 格式。
在 ${your-vmaf-path}/vmaf/python/src/vmaf/externals.py 里加一行 ffmpeg 路径:

FFMPEG_PATH = "/usr/local/bin/ffmpeg"
# 继续转几个不同质量的视频
ffmpeg -i split.mkv -c:v libx265 -crf 51 crf51.mkv
ffmpeg -i split.mkv -c:v libx265 -crf 27 crf27.mkv

转码前后的视频放在网盘了,可以先播放主观感受下。

# 评分
./ffmpeg2vmaf 1920 1080 split.mkv crf27.mkv --out-fmt json > crf27.json
./ffmpeg2vmaf 1920 1080 split.mkv crf28.mkv --out-fmt json > crf28.json
./ffmpeg2vmaf 1920 1080 split.mkv crf51.mkv --out-fmt json > crf51.json

crf27 得分:

"aggregate": {
"VMAF_feature_adm2_score": 0.9506281927651887, 
"VMAF_feature_motion2_score": 15.292086189944133, 
"VMAF_feature_vif_scale0_score": 0.7033932664352849, 
"VMAF_feature_vif_scale1_score": 0.891849091157867, 
"VMAF_feature_vif_scale2_score": 0.9376366751606525, 
"VMAF_feature_vif_scale3_score": 0.9605367831047515, 
"VMAF_score": 91.54301859617843, 
"method": "mean"
}

crf28 得分:

"aggregate": {
"VMAF_feature_adm2_score": 0.9454497740556413, 
"VMAF_feature_motion2_score": 15.292086189944133, 
"VMAF_feature_vif_scale0_score": 0.6865860812976473, 
"VMAF_feature_vif_scale1_score": 0.8774754333779801, 
"VMAF_feature_vif_scale2_score": 0.9274710703407736, 
"VMAF_feature_vif_scale3_score": 0.9534477600744574, 
"VMAF_score": 90.0891120853419, 
"method": "mean"
}

crf51 得分:

"aggregate": {
"VMAF_feature_adm2_score": 0.7351725278920788, 
"VMAF_feature_motion2_score": 15.292086189944133, 
"VMAF_feature_vif_scale0_score": 0.38975482224744185, 
"VMAF_feature_vif_scale1_score": 0.49917455035693126, 
"VMAF_feature_vif_scale2_score": 0.5541193612075329, 
"VMAF_feature_vif_scale3_score": 0.6013419372604807, 
"VMAF_score": 27.672561113858062, 
"method": "mean"
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值