我想使用 UGC 数据集,在读取每个视频后,以不同的比特率保存每个视频并绘制 RD 曲线。为此,我想使用 FFmpeg 并自动执行上述操作。为此我应该怎么做?我是视频编码和解码的初学者?是否可以使用 FFmpeg 计算每个视频速率的 PSNR?我找到了这个计算 PSNR 和 VMAF 的命令行代码:
ffmpeg -i encode.mp4 -i reference.mp4 -filter_complex "[0:v]scale=1920x1080:flags=bicubic[main]; [1:v]scale=1920x1080:flags=bicubic,format=pix_fmts=yuv420p,fps=fps=25/1[ref]; [main][ref]libvmaf=psnr=1:phone_model=1:log_fmt=json" -f null - > out.json;
但我不知道如何对不同比特率的视频执行此操作。你能帮帮我吗?特别是在绘制 rd 曲线时。谢谢。
答案1
以不同的比特率输出每个视频:
ffmpeg -i input -b:v 1000k encode1
ffmpeg -i input -b:v 2000k encode2
ffmpeg -i input -b:v 3000k encode3
然后分别在每个上运行 libvmaf:
ffmpeg -i encode1 -i reference.mp4 -filter_complex "[0][1]libvmaf=psnr=1:phone_model=1:log_fmt=json" -f null - > out1.json
ffmpeg -i encode2 -i reference.mp4 -filter_complex "[0][1]libvmaf=psnr=1:phone_model=1:log_fmt=json" -f null - > out2.json
ffmpeg -i encode3 -i reference.mp4 -filter_complex "[0][1]libvmaf=psnr=1:phone_model=1:log_fmt=json" -f null - > out2.json