在本教程中,我们将了解如何使用 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-dev
, libmp3lame-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
笔记:
- 详细的每帧详细信息包含在 JSON 文件中。它包含请求的每帧 VMAF 和 PSNR 分数。
- 在 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 的池方法。选项是min
,harmonic_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 举报,一经查实,本站将立刻删除。