将 vmaf 与 ffmpeg 结合使用的正确方法

dra*_*vit 3 video ffmpeg videoquality

我正在尝试计算处理后的视频与原始文件的VMAF分数。

我使用过的命令:

ffmpeg -y -loglevel info -stats -i original.mp4 -i processed.mp4 -lavfi "[0]null[refdeint];[refdeint]scale=1920:1080:flags=neighbor[ref];[1]setpts=PTS+0.0/TB[b];[b]scale=1920:1080:flags=neighbor[c];[c][ref]libvmaf=log_fmt=json:phone_model=1:model_path={model_path_here}/vmaf_v0.6.1.json:n_subsample=1:log_path=log.json" -f null -
Run Code Online (Sandbox Code Playgroud)

现在,根据此处vmaf with ffmpeg找到的官方文档,它表示文件,然后是文件。source/referenceencoded/distorted/processed

但我遇到的几乎所有博客都使用相反的参数顺序,即processed文件后面跟着文件original

几个例子:

  1. https://medium.com/@eyevinntechnology/keep-an-eye-on-the-video-quality-b9bcb58dd5a1:在其中搜索“在 FFMPEG 中使用 VMAF”。

  2. https://websites.fraunhofer.de/video-dev/calculate-vmaf-and-psnr-with-ffmpeg/:在其中搜索“Metric Calculation with FFmpeg”。

编辑

注意:更改顺序确实会更改 VMAF 分数。

fif*_*nik 7

如何在命令行中指定源文件并不重要。\n重要的是视频流如何提供给 libvmaf filter

\n

默认情况下,命令行中第一个指定的源将成为索引 = 0 的流,第二个指定的源将成为索引 = 1 的流。

\n

您可以指定如何将这些流提供给 libvmaf 过滤器,但您不必这样做。如果您尚未执行此操作,索引为 0 和 1 的流将按该顺序提供给过滤器。

\n

让我们看看你的例子。

\n

Netflix手册(我删除了不需要的部分):

\n
ffmpeg ... -i src01_hrc00_576x324.yuv \\\n       ... -i src01_hrc01_576x324.yuv \\\n    -lavfi "[0:v]setpts=PTS-STARTPTS[reference]; \\\n            [1:v]setpts=PTS-STARTPTS[distorted]; \\\n            [distorted][reference]libvmaf=model_path={your_vmaf_dir}/model/vmaf_v0.6.1.json" \\\n    -f null -\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,索引 = 0 的视频流(命令行中第一个指定的视频流)被重命名为引用( [0:v]...[reference]),索引 = 1 的视频流(命令行中第二个指定的视频流)被重命名为扭曲( [1:v]...[distorted])。

\n

但当它们发送到 libvmaf 时,顺序是:扭曲然后引用 ( [distorted][reference]libvmaf)。

\n

关于媒介的文章:

\n
ffmpeg -i distorted-file -i reference-file -lavfi libvmaf -f null \xe2\x80\x93\n
Run Code Online (Sandbox Code Playgroud)\n

FFMpeg 手册:

\n
ffmpeg -i main.mpg -i ref.mpg -lavfi libvmaf -f null -\n
Run Code Online (Sandbox Code Playgroud)\n

扭曲文件的索引=0\n参考文件的索引=1。\n由于没有任何重命名/重新映射,它们将按原始顺序发送到 libvmaf:0 然后 1(混乱然后参考)。它等于[0][1]libvmaf. 因此提供给 libvmaf 的视频流顺序与 Netflix 手册中的完全相同。

\n

如果仅比较两个视频,最好保持原始顺序,否则人们可能会感到困惑。

\n

但是,我在 FFmpeg GUI ( FFMetrics )中确实有相反的顺序。\n原因是 -- 可以向程序指定多个扭曲文件,以便更容易理解和使用:\nffmetrics.exe [options] ref扭曲1 [扭曲2] [扭曲3] [扭曲4] ...

\n

您的命令行也是正确的:\nffmpeg -i reference -i Distorted [0]...[refdeint];[refdeint]...[ref]; 1 ...[b];[b]...[c];[c][参考]libvmaf...

\n

在以正确的顺序提供给 libvmaf 的所有重新映射流之后:扭曲然后引用。\n您不能在那里交换两个“-i file”选项,因为这会极大地改变您的逻辑。

\n

PS 这是实际发生的事情的简化版本:)

\n