前言

运用ffmpeg对视频进行紧缩,如果都用肉眼去分辩是否合适,会比较片面,同时也会耗费大量时间。咱们需求树立一种比较简便易行的视频质量比对办法。
调整参数->紧缩视频->质量比对->调整参数,咱们树立这么一个自动化紧缩参数调优的流程,以争取到达质量与尺度之间的平衡。

紧缩参数

从上一篇文章咱们知道,针对视频调优参数比较常用的有下面几个:

  • 码率:能够限制码率方法-b:v,进一步能够配合2-pass全局调优;也能够选用固定码率比-crf。
  • 分辩率:-s参数针对视频分辩率进行紧缩。咱们知道用户侧屏幕分辩率是千差万别的,低端机,高端机,平板电脑,宽屏的,折叠的;不同分辩率去适配不同屏幕播映需求,提高用户体会。-s需求指定长x宽,能够运用滤镜体系进行动态适配,-vf scale=720:-2,表明宽度720,高度等比拉伸。
  • 帧率:-r参数视频每秒图画数量,一般状况下fps越高,视频尺度会大;因为编码算法只会针对前后帧差异部分进行编码,以期望到达更高的紧缩率。
  • 编码器:-c:v挑选h264/h265,h265一般状况下比h264在体积上优化30%左右的空间;-profile:v参数中,h264(main)比h264(high)来说,体积上又会大上10%左右。这儿触及2个概念,选用适当编码格式,针对该编码格式进行编码参数调优。
  • 更多参数调优能够参阅ffmpeg官方doc。

参阅一下YouTube和netflix相关的优化参数。咱们大约设定以下若干状况组合自动检测优化。

  1. 针对码率,不同分辩率不一样,720p的话-b:v=640k、921.60k,咱们在chrome上测试一下大约的流通播映kbps。
  2. 针对分辩率,-vf scale=480:-2、720:-2、1080:-2
  3. 针对帧率,-r 22、25、30
  4. 针对编码格式,-c:v libx264、libx265;h264参数-profile:v high、main;h265参数-tag:v hvc1兼容ios体系

质量判断

选用ffmpeg自带的psnr、ssim,再加上奈飞的vmaf质量点评体系作为打分依据。

  • psnr点评的是原视频帧与紧缩视频帧之间像素值之间均方差,检测的是紧缩后引进的噪声状况。用对数表明,单位db,40db+表明基本无损紧缩;30sdb+表明紧缩质量好;20db+表明紧缩质量差;20db-紧缩质量太差需求丢掉。这个评分遭到分辩率,像素格式,帧率紧缩影响较大。
  • ssim点评的是原视频帧与紧缩视频帧之间像素值3个纬度之间的类似度状况,包含明亮度、对比度、结构类似程度。取值在0~1之间,0.99+表明基本无损紧缩;0.95+表明紧缩质量好;0.9~0.95之间表明紧缩质量差;0.9-因为紧缩后类似度太低需求丢掉。这个评分遭到分辩率,像素格式,码率紧缩影响较大。
  • vmaf是奈飞提出的质量点评体系。除了引进psnr和ssim两个点评分之外,还引进自在vif点评办法。取值在0~100之间,90+表明基本无损紧缩;75+表明紧缩质量好;50+表明紧缩质量差;50-需求丢掉。

详细评分核算能够运用ffmpeg的vf进行。

  • 核算psnr评分如下命令:
    ffmpeg -i ref.mp4 -an -i dst.mp4 -an -lavfi "[0:v]scale=1080:-2:flags=bicubic,setpts=PTS-STARTPTS[reference];[1:v]scale=1080:-2:flags=bicubic,setpts=PTS-STARTPTS[distorted];[distorted][reference]psnr" -f null -
  1. ref.mp4和dst.mp4分别是比较的两个视频。ref是原视频,dst是紧缩后的视频。
  2. -an参数表明只读取视频部分数据,不需求解析读取音频部分数据。
  3. -lavfi就是执行后边的vf滤镜。详细写法参阅ffmpeg的官网doc。
  4. [0:v]表明引进输入-i参数的第一个视频,scale是第一个缩放滤镜,逗号表明当时多个滤镜序列,[reference]表明这次滤镜输出。分号表明另外一个滤镜的状况。
  5. [distorted][reference]psnr表明psnr滤镜,[distorted][reference]这两个表明输入,没有输出。评分会打印在console上。
  6. 在整体评分核算进程,咱们一般是针对紧缩后视频进行参数对齐原视频。以确保原视频作为监督参阅规范。所以dst.mp4紧缩后视频会经过scale滤镜扩大到1080p,运用bicubic算法进行填充。

在实践进程中,还或许遇到其他问题,比如帧率不对齐,需求对齐原视频framerate=30;比如tb没有对齐,需求设定settb=AVTB。一切以原视频参数为准,将紧缩视频经过vf滤镜体系对齐原视频进行比较核算评分。

  • 核算ssim评分如下命令:
    ffmpeg -i ref.mp4 -an -i dst.mp4 -an -lavfi "[0:v]scale=1080:-2:flags=bicubic,framerate=30,settb=AVTB,setpts=PTS-STARTPTS[reference];[1:v]scale=1080:-2:flags=bicubic,framerate=30,settb=AVTB,setpts=PTS-STARTPTS[distorted];[distorted][reference]ssim" -f null -

  • 核算vmaf评分如下命令:
    ffmpeg -i ref.mp4 -an -i dst.mp4 -an -lavfi "[0:v]scale=1080:-2:flags=bicubic,framerate=30,settb=AVTB,setpts=PTS-STARTPTS[reference];[1:v]scale=1080:-2:flags=bicubic,framerate=30,settb=AVTB,setpts=PTS-STARTPTS[distorted];[distorted][reference]libvmaf=phone_model=1:n_threads=8:n_subsample=4" -f null -

    详细vmaf的参数能够参阅ffmpeg官网doc,能够下载奈飞指定的质量点评模型参数。也能够运用多线程,多彩样参数加快速度。

评分成果

psnr命令如下:

第四篇、对压缩视频进行质量打分
psnr评分成果如下:
第四篇、对压缩视频进行质量打分
psnr咱们挑选average的38.225621纬度评分;能够看得出紧缩视频质量还比较好。

ssim评分成果如下:

第四篇、对压缩视频进行质量打分
ssim咱们挑选ALL的0.970689纬度评分;能够看得出紧缩视频质量还比较好。

vmaf评分成果如下:

第四篇、对压缩视频进行质量打分
vmaf评分是74.873057,勉强可接受的程度。

定论

以上进程,能够选用编码完成,自动化去进行比对。添加更多的参数调优组合方法,找到最合适的播映体会和视频尺度的平衡点。