#quality #bindings #perceptual #vmaf #netflix #wrapper

libvmaf-rs

(WIP) Netflix的libvmaf的便捷绑定

19个版本

0.5.2 2024年5月4日
0.5.1 2023年12月14日
0.4.0 2023年2月24日
0.3.4 2023年1月29日
0.1.3 2022年12月21日

#95视频

Download history 188/week @ 2024-04-30 5/week @ 2024-05-07 2/week @ 2024-05-14 11/week @ 2024-05-21 1/week @ 2024-06-11

1,241 每月下载

GPL-3.0-or-later

440KB
785 代码行

libvmaf-rs旨在成为Netflix的libvmaf(来自libvmaf-sys)原始库绑定的便捷包装器。

VMAF是Netflix开发的Emmy获奖感知视频质量评估算法。它是一个全参考指标,这意味着它是基于参考/失真图像对计算的

入门

首先,从视频文件中构建您的参考和失真(压缩)视频文件的视频。

此示例使用相同的文件作为参考和失真,但通常失真将是一个压缩视频,而参考将指向原始、未压缩的视频

let reference: Video = Video::new(&"./video/Big Buck Bunny 720P.m4v", 1920, 1080).unwrap();
let distorted: Video = Video::new(&"./video/Big Buck Bunny 720P.m4v", 1920, 1080).unwrap();

现在,您需要加载一个模型,

let model: Model = Model::default();

可选地,您可能需要定义一个回调函数。如果您想要有关VMAF评分计算进度的更新,这将很有用

let callback = |status: VmafStatus| match status {
VmafStatus::Decode => dostuff(),
VmafStatus::GetScore => dostuff(),
};

现在我们构建一个Vmaf上下文

let vmaf = Vmaf::new(
VmafLogLevel::VMAF_LOG_LEVEL_DEBUG,
num_cpus::get().try_into().unwrap(),
0,
0,
)

为了获取每帧的分数向量,我们可以在新的Vmaf上下文中使用以下方法

let scores = vmaf
.get_vmaf_scores(reference, distorted, model, Some(callback))
.unwrap();

依赖项

~3.5–6.5MB
~129K SLoC