FFmpeg 中的 VMAF – Ubuntu 18.04安装和使用指南

在本教程中,我们将了解如何使用 libvmaf 编译和安装支持 VMAF 的 FFmpeg,然后我们将了解如何使用启用了 VMAF 支持的 FFmpeg 计算或计算两个视频之间的 VMAF 分数。

提到开源视频压缩软件时, FFmpeg 一直是每个人最关心的问题,维基百科将其描述为

FFmpeg 是一个免费的开源项目,由用于处理视频、音频和其他多媒体文件和流的大量软件库和程序组成。

Netflix 的 VMAF 全称 Video Multi-method Assessment Fusion,是一种将人类视觉建模与机器学习相结合的视频质量指标。它变得非常流行,因为它成功地(并非完全)自动化了通常需要人类观看和评分视频的主观质量测试。

FFmpeg 和 Netflix 的 VMAF 现在是每个视频处理和压缩工程师工具箱的一部分。但是,对于大量用户来说,安装和使用它们似乎很困难。

我经常在 Stackoverflow 和类似网站上看到这些问题 –

  • 如何计算VMAF?
  • 如何在 Ubuntu 上编译 VMAF?
  • 如何使用 FFmpeg 计算 VMAF?
  • libvmaf 尝试将 VMAF 与 FFmpeg 一起使用时没有此类过滤器 。
  • VMAF 示例命令行

清单还在继续。所以,我决定把编译安装VMAF、FFmpeg以及用FFmpeg计算VMAF的步骤写下来。在此过程中,我将向您展示安装和使用过程中的一些陷阱和常见错误。

第 0 步:机器设置

出于本文档的目的,我将在以 Ubuntu 18.04 为操作系统的 DigitalOcean 上设置一个新的 5 美元 droplet。

第 1 步:在 Ubuntu 18.04 上安装 VMAF

为了将 VMAF 与 FFmpeg 一起使用,我们需要 libvmaf 一个可以与 C/C++ 代码一起使用的 C 库的帮助。换句话说,我们可以将它与 FFmpeg 一起使用。

所以,这里是如何在 Ubuntu 18.04 机器上安装 VMAF –

第 1 步:从此处 下载最新版本的 VMAF  。

wget https://github.com/Netflix/vmaf/archive/v1.5.2.tar.gz

第 2 步: 解压它

untar -xvf https://github.com/Netflix/vmaf/archive/v1.5.2.tar.gz

第三步: 安装依赖。

sudo apt update
sudo apt install python3 python3-pip python3-setuptools python3-wheel ninja-build doxygen
pip3 install meson
pip3 install Cython
pip3 install numpy

第 4 步: 制作并安装 VMAF

cd vmaf-1.5.2/
sudo make 
sudo make install

记下 VMAF 的 libvmaf 安装位置。在我的机器上,它是 /usr/local/lib/x86_64-linux-gnu 根据控制台日志安装的。

Installing src/libvmaf.so.0.0.0 to /usr/local/lib/x86_64-linux-gnu
Installing src/libvmaf.a to /usr/local/lib/x86_64-linux-gnu

第 2 步:在 Ubuntu 18.04 上安装支持 VMAF 的 FFmpeg

第一部分已完成,您已成功将 VMAF 安装到您的计算机上。现在,让我们编译并安装支持 VMAF 的 FFmpeg。这些说明取自 FFmpeg 的 Ubuntu 编译指南

第 1 步: 安装依赖项(包括 nasm)。并且,记得创建以下文件夹

mkdir -p ~/ffmpeg_sources ~/bin

第 2 步: 安装您需要的视频和音频编解码器。我安装了 libx264,  libx265-dev,  libnuma-dev,  libvpx-dev,  libfdk-aac-devlibmp3lame-dev和 libopus-dev

第 3 步: 确保 FFmpeg 知道在哪里可以找到 libvmaf

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/x86_64-linux-gnu/

第 4 步: 安装 libunistring-dev 以防止出现以下错误: ERROR: gnutls not found using pkg-config

sudo apt-get install libunistring-dev

第 5 步: 从源代码下载并编译 FFmpeg。请注意,我们现在使用 --enable libvmaf FFmpeg 启用 VMAF。

cd ~/ffmpeg_sources && \
wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && \
tar xjvf ffmpeg-snapshot.tar.bz2 && \
cd ffmpeg && \
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
  --prefix="$HOME/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --extra-cflags="-I$HOME/ffmpeg_build/include" \
  --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
  --extra-libs="-lpthread -lm" \
  --bindir="$HOME/bin" \
  --enable-gpl \
  --enable-gnutls \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-libvmaf \
  --enable-nonfree && \
PATH="$HOME/bin:$PATH" make && \
make install && \
hash -r

而已!您现在应该有一个启用了 VMAF 的 FFmpeg 构建。

第 3 步:使用 VMAF 计算 FFmpeg

现在让我们看看如何使用 FFmpeg 和 VMAF 计算两个视频之间的 VMAF 分数。

第 1 步: 让我们使用 FFmpeg 生成测试数据的内置库创建两个测试视频——一个 1920x1080p30 视频和一个 1280x720p30 视频。命令行如下所示,如您所见,它将生成两个 5 秒时长的剪辑,30 fps,分辨率为 1920x1080p 和 1280x720p。

bin/ffmpeg -f lavfi -i testsrc=duration=5:size=1920x1080:rate=30 test_1080p30.mpg
bin/ffmpeg -f lavfi -i testsrc=duration=5:size=1280x720:rate=30 test_720p30.mpg

第 2 步:计算两个视频之间的 VMAF 分数。
从下面的命令行中,您可以看到我们提供了两个输入序列,然后我们使用 bicubic 过滤器将它们缩放到 1920×1080。这一点很重要,因为 VMAF 仅适用于具有相同分辨率的序列(并且帧速率应该匹配,否则你会遇到严重的问题)。我们还要求 FFmpeg 计算这两个序列的 PSNR 分数。

bin/ffmpeg -i test_720p30.mpg -i test_1080p30.mpg -filter_complex "[0:v]scale=1920x1080:flags=bicubic[main]; [1:v]scale=1920x1080:flags=bicubic,format=pix_fmts=yuv420p,fps=fps=30/1[ref]; [main][ref]libvmaf=psnr=true:log_path=vmaflog.json:log_fmt=json" -f null -

它应该在控制台上按如下方式打印 VMAF 分数

[libvmaf @ 0x55803f80c7c0] VMAF score: 86.375268

笔记:

  1. 详细的每帧详细信息包含在 JSON 文件中。它包含请求的每帧 VMAF 和 PSNR 分数。
  2. 在 FFmpeg 的过滤器中,您可以使用 bicubic 或 lancsoz 过滤器进行上采样过程。Netflix 建议 这 bicubic 是一个更好的选择。

使用 FFmpeg 的 VMAF 选项

以下命令行选项在 FFmpeg 中可用于计算 VMAF。

  • model_path 设置要用于 SVM 的模型路径。默认值: /usr/local/share/model/vmaf_v0.6.1.pkl
  • log_path 设置用于存储日志的文件路径。
  • log_fmt 设置日志文件的格式(xml 或 json)。
  • enable_transform 如果您在传递给 run_vmaf_training.py 的输入参数文件中指定了 score_transform 选项,则此选项可以启用/禁用应用于最终预测 VMAF 分数的 score_transform 默认值: false
  • phone_model 调用会产生比常规模型更高的 VMAF 分数的手机模型,这更适合笔记本电脑、电视等观看条件。默认值: false
  • psnr 启用计算 psnr 和 vmaf。默认值: false
  • ssim 启用计算 ssim 和 vmaf。默认值: false
  • ms_ssim 启用计算 ms_ssim 和 vmaf。默认值: false
  • pool 设置用于计算 vmaf 的池方法。选项是 minharmonic_mean 或 mean (默认)。
  • n_threads 设置计算 vmaf 时要使用的线程数。默认值:  ,它使用所有可用的逻辑处理器。
  • n_subsample 设置计算 vmaf 时使用的帧二次采样的间隔。默认值: 1
  • enable_conf_interval 启用置信区间。默认值: false

使用 VMAF 和 FFmpeg 时的常见问题。

P1。在 Ubuntu 18.04 上从官方编译指南安装 FFmpeg 时,你会遇到这个错误 ERROR: gnutls not found using pkg-config。为防止这种情况,您需要安装 sudo apt-get install libunistring-dev.

P2。使用 VMAF 运行 FFmpeg 时的另一个常见问题是 error libvmaf xxx not found using pkg config。这意味着在编译 FFmpeg 时,您没有告诉它 libvmaf 文件在哪里。只需运行导出命令,它应该可以解决问题。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/x86_64-linux-gnu/

作者简介:OTTVerse 的创始人Krishna Rao Vijayanagar 博士。在伊利诺伊理工学院获得视频压缩博士学位,多年来我一直从事视频压缩(AVC、HEVC、MultiView Plus Depth)、ABR 流媒体和视频分析(QoE、内容和受众以及广告)方面的工作。

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论