首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >VMAF3.0编译及常见问题记录

VMAF3.0编译及常见问题记录

原创
作者头像
liuzhen007
修改2025-06-15 11:56:37
修改2025-06-15 11:56:37
3440
举报
文章被收录于专栏:流媒体音视频流媒体音视频

前沿

VMAF (Video Multi-Method Assessment Fusion) 是 Netflix 开发的开源视频质量评估工具,版本 3.0 是其一个重要更新。它的主要作用是视频质量评估:通过机器学习模型综合多种质量指标,预测人类对视频质量的主观感受,提供 0-100 分的 VMAF 分数,分数越高表示质量越好。另外,它具有多种评估模型,包含手机观看、4K 等不同场景的评估模型。

编译及使用

接下来以 linux 系统为例进行介绍,首先是安装依赖项。

1、安装依赖项

代码语言:txt
复制
sudo yum groupinstall "Development Tools"
sudo yum install -y git meson nasm doxygen
sudo yum install -y python3 python3-pip python3-setuptools
sudo yum install -y epel-release
sudo yum install -y python3-scipy

2、获取 VMAF 源代码

代码语言:txt
复制
git clone https://github.com/Netflix/vmaf.git
cd vmaf
git checkout v3.0.0

3、编译

执行如下命令进行代码编译:

代码语言:txt
复制
cd libvmaf
meson build --buildtype release
ninja -C build
sudo ninja -C build install

4、使用

设置动态库链接地址:

代码语言:txt
复制
echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/vmaf.conf
sudo ldconfig

执行 vmaf 命令进行验证:

代码语言:txt
复制
vmaf --version

如果需要编译到 ffmpeg 中,需要在执行 configure 命令时 ,指定参数 --enable-libvmaf。

两种使用方式,下面分别介绍。

4.1 直接使用

代码语言:javascript
复制
vmaf -r reference.yuv -d distorted.yuv -w 1920 -h 1080 -p 420 -b 8

4.2 利用ffmpeg

代码语言:txt
复制
ffmpeg -i distorted.mp4 -i reference.mp4 -lavfi libvmaf -f null -

常见问题

问题一、bash: meson: command not found

执行如下命令报错:

代码语言:javascript
复制
meson setup builddir --default-library=static --prefix=/tools/ffmpeg -Denable_avx512=false

解决: sudo yum install meson

问题二、ERROR: Meson version is 0.55.1 but project requires >= 0.56.1

报错详情:

代码语言:javascript
复制
The Meson build system
Version: 0.55.1
Source dir: /tools/vmaf-3.0.0/libvmaf
Build dir: /tools/vmaf-3.0.0/libvmaf/builddir
Build type: native build

meson.build:1:0: ERROR: Meson version is 0.55.1 but project requires >= 0.56.1

A full log can be found at /tools/vmaf-3.0.0/libvmaf/builddir/meson-logs/meson-log.txt

解决:

代码语言:javascript
复制
pip3 install --upgrade meson

输出如下信息表示升级成功:

代码语言:javascript
复制
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting meson
  Downloading http://mirrors.jd.com/pypi/packages/18/db/3feb3cfa102553b9329d0c887b3c10480381de69abf6e8629f6b32f450df/meson-0.61.5-py3-none-any.whl (862kB)
    100% |████████████████████████████████| 870kB 134.3MB/s 
Installing collected packages: meson
Successfully installed meson-0.61.5

问题三、ERROR: Unknown compiler(s): [['c++'], ['g++'], ['clang++'], ['nvc++'], ['pgc++'], ['icpc']]

报错详情:

代码语言:javascript
复制
The Meson build system
Version: 0.61.5
Source dir: /tools/vmaf-3.0.0/libvmaf
Build dir: /tools/vmaf-3.0.0/libvmaf/builddir
Build type: native build
Project name: libvmaf
Project version: 3.0.0
C compiler for the host machine: cc (gcc 4.8.5 "cc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)")
C linker for the host machine: cc ld.bfd 2.27-44

meson.build:1:0: ERROR: Unknown compiler(s): [['c++'], ['g++'], ['clang++'], ['nvc++'], ['pgc++'], ['icpc']]
The following exception(s) were encountered:
Running "c++ --version" gave "[Errno 2] No such file or directory: 'c++': 'c++'"
Running "g++ --version" gave "[Errno 2] No such file or directory: 'g++': 'g++'"
Running "clang++ --version" gave "[Errno 2] No such file or directory: 'clang++': 'clang++'"
Running "nvc++ --version" gave "[Errno 2] No such file or directory: 'nvc++': 'nvc++'"
Running "pgc++ --version" gave "[Errno 2] No such file or directory: 'pgc++': 'pgc++'"
Running "icpc --version" gave "[Errno 2] No such file or directory: 'icpc': 'icpc'"

A full log can be found at /tools/vmaf-3.0.0/libvmaf/builddir/meson-logs/meson-log.txt
NOTICE: You are using Python 3.6 which is EOL. Starting with v0.62.0, Meson will require Python 3.7 or newer

解决:

代码语言:javascript
复制
sudo yum install gcc-c++

注意:删除 builddir 目录,重新执行编译命令。

问题四、ERROR: Program 'nasm' not found or not executable

报错详情:

代码语言:javascript
复制
The Meson build system
Version: 0.61.5
Source dir: /tools/vmaf-3.0.0/libvmaf
Build dir: /tools/vmaf-3.0.0/libvmaf/builddir
Build type: native build
Project name: libvmaf
Project version: 3.0.0
C compiler for the host machine: cc (gcc 4.8.5 "cc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)")
C linker for the host machine: cc ld.bfd 2.27-44
C++ compiler for the host machine: c++ (gcc 4.8.5 "c++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)")
C++ linker for the host machine: c++ ld.bfd 2.27-44
Host machine cpu family: x86_64
Host machine cpu: x86_64
Check usable header "stdatomic.h" : NO 
Checking if "GCC-style atomics" compiles: YES 
Configuring version.h using configuration
Program nasm found: NO

src/meson.build:61:8: ERROR: Program 'nasm' not found or not executable

A full log can be found at /tools/vmaf-3.0.0/libvmaf/builddir/meson-logs/meson-log.txt
NOTICE: You are using Python 3.6 which is EOL. Starting with v0.62.0, Meson will require Python 3.7 or newer

解决:

代码语言:javascript
复制
sudo yum install nasm

注意:删除 builddir 目录,重新执行编译命令。

问题五、test 单侧模块编译报错

报错详情:

代码语言:javascript
复制
[46/141] Compiling C object test/test_cambi.p/test_cambi.c.o
FAILED: test/test_cambi.p/test_cambi.c.o 
cc -Itest/test_cambi.p -Itest -I../test -Iinclude -I../include -Isrc -I../src -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -O3 -D_GNU_SOURCE -MD -MQ test/test_cambi.p/test_cambi.c.o -MF test/test_cambi.p/test_cambi.c.o.d -o test/test_cambi.p/test_cambi.c.o -c ../test/test_cambi.c
In file included from ../test/test_cambi.c:20:0:
../src/ref.h:22:23: fatal error: stdatomic.h: No such file or directory

解决:增加 -Dtests=false 选项。

问题六、error: use of deleted function

报错详情:

代码语言:javascript
复制
../src/svm.cpp: In instantiation of ‘SVMModelParser<TSource>::SVMModelParser(TSource&&) [with TSource = SVMModelParserBufferSource]’:
../src/svm.cpp:3168:74:   required from here
../src/svm.cpp:3023:79: error: use of deleted function ‘SVMModelParserBufferSource::SVMModelParserBufferSource(SVMModelParserBufferSource&&)’
  SVMModelParser(TSource&& model_source) : model_source(std::move(model_source)) {}
                                                                               ^
../src/svm.cpp:2983:7: note: ‘SVMModelParserBufferSource::SVMModelParserBufferSource(SVMModelParserBufferSource&&)’ is implicitly deleted because the default definition would be ill-formed:
 class SVMModelParserBufferSource {

解决:

修改构造函数:

代码语言:javascript
复制
SVMModelParser(TSource& model_source) : model_source(model_source) {}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前沿
  • 编译及使用
    • 1、安装依赖项
    • 2、获取 VMAF 源代码
    • 3、编译
    • 4、使用
      • 4.1 直接使用
      • 4.2 利用ffmpeg
  • 常见问题
    • 问题一、bash: meson: command not found
    • 问题二、ERROR: Meson version is 0.55.1 but project requires >= 0.56.1
    • 问题三、ERROR: Unknown compiler(s): [['c++'], ['g++'], ['clang++'], ['nvc++'], ['pgc++'], ['icpc']]
    • 问题四、ERROR: Program 'nasm' not found or not executable
    • 问题五、test 单侧模块编译报错
    • 问题六、error: use of deleted function
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档