我有一个源视频和该源的编码器版本。现在我需要找到vmaf分数。然而,我读到,为了确保正确的vmaf分数,重要的是源视频和编码视频都是帧同步的。你能告诉我如何在ffmpeg中使用过滤器对解码的流进行过滤吗?我
我有如下命令
ffmpeg2 -i 11sec_encoded_720p_200k.mp4 -i 11sec_original_1080p.mxf -filter_complex "[0:v]scale=1920x1080:flags=bicubic[main]; [main][1:v]libvmaf=model_path=vmaf_v0.6.1.pkl:psnr=1:ssim=1:ms_ssim=1:log_fmt=json:log_path=720p_200k.json" -report -f null -
发布于 2020-07-07 23:29:24
您可以使用trim
filter来处理输入视频之间的<offset>
,即
11sec_encoded_720p_200k.mp4
的第一帧(失真)比11sec_original_1080p.mxf
(参考)领先,则通过指定<offset>
值将trim
应用于参考。<offset>
应该是参考视频上其帧与失真帧的第一帧匹配的秒数(请参阅下图的命令):ffmpeg2 -i 11sec_encoded_720p_200k.mp4 -i 11sec_original_1080p.mxf -filter_complex "[0:v]scale=1920x1080:flags=bicubic[main];[1:v]trim=start=<you offset> [ref];[main][ref]libvmaf=model_path=vmaf_v0.6.1.pkl:psnr=1:ssim=1:ms_ssim=1:log_fmt=json:log_path=720p_200k.json" -report -f null -
11sec_original_1080p.mxf
(Reference)相对于11sec_encoded_720p_200k.mp4
(失真)在前面,则将trim
应用于失真(参见下面的命令图像):ffmpeg2 -i 11sec_encoded_720p_200k.mp4 -i 11sec_original_1080p.mxf -filter_complex "[0:v]trim=start=<you offset> [main0];[main0]scale=1920x1080:flags=bicubic[main];[main][1:v]libvmaf=model_path=vmaf_v0.6.1.pkl:psnr=1:ssim=1:ms_ssim=1:log_fmt=json:log_path=720p_200k.json" -report -f null -
上面的例子认为你已经知道了正确的偏移量,如果不是这样,你需要计算它。这个计算可以使用失真视频的样本并逐帧滑动(向前和向后)来完成,以便查找关于Reference
的最佳PSNR。一旦找到最佳PSNR,滑动的时间量就是同步帧所需的偏移量。在这里,您可以找到一个已经处理此问题的python脚本:https://github.com/gdavila/easyVmaf
https://stackoverflow.com/questions/62753638
复制相似问题