首先,我对这个特定主题还不太熟悉,因此非常感谢您的任何建议!
对于我目前正在进行的一个项目,我基本上是在尝试模拟使用 ffmpeg 传输视频文件时降低/提高分辨率的要求。在此过程中,我发现每当我需要通过双三次插值提高转码文件的分辨率时,生成的视频就会比预期损失更多的 VMAF 质量(准确地说是 10-20 点左右)。
我的问题如下:是否可以完全预防/缓解此问题?如果可以,我该怎么做?如果不行,是否有任何方法可以解决这个问题,或者在升级到客户端时有更好的方法可以保留底层转码视频文件固有的 VMAF 质量?
我尝试通过隔离双三次插值对不改变其分辨率(即保持在 1080p)的视频的具体影响,将问题简化为一种简化格式。我还附上了一个小的可视化图表,希望能更好地表达我所描述的内容:在此处输入图片描述
例如,我可能会从一个原始的 1080p '.mov' 文件开始,对该文件执行两个初始转码:1 创建参考(1Mbit/s,1080p)文件用于 VMAF 计算,另一个用于创建演示 转码我打算升级一个具有完全相同规格(1Mbits,1080p)的文件。然后我“升级”我的演示 转码使用双三次插值将文件转换为 1080p,我将其称为升级演示转码(我知道不改变分辨率在技术上不算升级)。最后,我计算了参考和升级演示转码,除了对后者应用双三次插值之外,这两个文件实际上是相同的:
ffmpeg -y -i ORIGINAL.mov -vf "fps=25, scale=1920:1080, format=yuv420p, yadif" -c:v vp8 -b:v 1M REFERENCE_file.mkv
ffmpeg -y -i ORIGINAL.mov -vf "fps=25, scale=1920:1080, format=yuv420p, yadif" -c:v vp8 -b:v 1M DEMO_TRANSCODE.mkv
ffmpeg -i DEMO_TRANSCODE.mkv -vf "fps=25, scale=1920:1080:flags=bicubic, format=yuv420p" -c:v vp8 -b:v 1M UPSCALED_DEMO_TRANSCODE.mkv
(VMAF) ffmpeg -i UPSCALED_DEMO_TRANSCODE.mkv -i REFERENCE_file.mkv -filter_complex libvmaf -f null -
您可能期望 VMAF 输出 ~95-97,但我却莫名其妙地得到了 ~70-85 之间的值(大概取决于视频长度/内容)。
虽然我在这里特意保持 1080p 不变,但实际上我通常会在第一次转码时将其缩小到较低的分辨率,例如 (240p、480p、720p 等),然后在第二次转码时将其放大回 1080p,但我特意使用这个例子来更好地说明我所描述的效果。