gpt4 book ai didi

video - 使用 vmaf 和 ffmpeg 的正确方法

转载 作者:行者123 更新时间:2023-12-04 23:11:17 30 4
gpt4 key购买 nike

我正在尝试计算 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 -
现在根据 vmaf with ffmpeg 的官方文档找到 here ,上面写着 source/reference文件后跟 encoded/distorted/processed文件。
但是我遇到的几乎所有博客,它们都使用相反的 args 顺序,即 processed文件后跟 original文件。
几个例子:
  • https://medium.com/@eyevinntechnology/keep-an-eye-on-the-video-quality-b9bcb58dd5a1 :在其中搜索“在 FFMPEG 中使用 VMAF”。
  • https://websites.fraunhofer.de/video-dev/calculating-vmaf-and-psnr-with-ffmpeg/ :在其中搜索“使用 FFmpeg 进行度量计算”。

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

    最佳答案

    你怎么样并不重要指定源文件 在命令行中。
    重要的是如何提供给 libvmaf 过滤器的视频流 .
    默认情况下,命令行中第一个指定的源将变为 index=0 的流,第二个指定的源 - 索引=1 的流。
    您可以指定如何将这些流提供给 libvmaf 过滤器,但您不必这样做。如果您没有这样做,索引为 0 和 1 的流将按该顺序提供给过滤器。
    让我们看看你的例子。
    Netflix 手册(我删除了不需要的部分):

    ffmpeg ... -i src01_hrc00_576x324.yuv \
    ... -i src01_hrc01_576x324.yuv \
    -lavfi "[0:v]setpts=PTS-STARTPTS[reference]; \
    [1:v]setpts=PTS-STARTPTS[distorted]; \
    [distorted][reference]libvmaf=model_path={your_vmaf_dir}/model/vmaf_v0.6.1.json" \
    -f null -
    请注意,索引=0 的视频流(在命令行中首先指定的那个)被重命名为 引用 ( [0:v]...[reference] )和 index=1 的视频流(命令行中的第二个)重命名为 扭曲 ( [1:v]...[distorted])。
    但是当他们按顺序发送到 libvmaf 时:扭曲然后引用( [distorted][reference]libvmaf)。
    媒体文章:
    ffmpeg -i distorted-file -i reference-file -lavfi libvmaf -f null –
    FFMpeg 手册:
    ffmpeg -i main.mpg -i ref.mpg -lavfi libvmaf -f null -
    扭曲的文件索引=0
    引用文件的索引=1。
    由于没有任何重命名/重新映射,它们将按原始顺序发送到 libvmaf:0 然后 1(先乱序然后引用)。等于 [0][1]libvmaf .因此,提供给 libvmaf 的视频流顺序与 Netflix 手册中的完全相同。
    如果您只比较两个视频,最好保持原始顺序,否则人们可能会感到困惑。
    但是,我的 FFmpeg GUI ( FFMetrics ) 中确实有相反的顺序。
    原因是——可以为程序指定多个失真文件,这样更容易理解和使用:
    ffmetrics.exe [选项] ref distorted1 [distorted2] [distorted3] [distorted4] ...
    您的命令行也是正确的:
    ffmpeg -i 引用 -i 扭曲 [0]...[refdeint];[refdeint]...[ref]; 1 ...[b];[b]...[c];[c][ref]libvmaf...
    在以正确顺序提供给 libvmaf 的所有重新映射流之后:扭曲然后引用。
    您不能在那里交换两个“-i 文件”选项,因为这会极大地改变您的逻辑。
    附言这是实际发生的事情的简化版本:)

    关于video - 使用 vmaf 和 ffmpeg 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67598772/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com