FFmpeg是一款非常强大的音视频处理工具,它不仅功能强大而且非常好用,比如视频转码中一个非常实用的参数就是preset。今天我们将重点介绍preset参数的作用以及它的使用方法。
正文
一、定义与作用
preset是FFmpeg中一个用于控制视频转码的预设参数,可以用来控制视频转码过程中的画面质量和转码速度。它的主要作用是用来平衡视频的质量和转码的速度,因为有时候我们希望视频转码的速度尽可能的快,有时候则希望输出的视频质量尽可能的好。因此,在这两个极端中间,FFmpeg提供了更多的选项,让大家可以根据自己的实际需要来选择。
二、取值范围
preset参数的取值范围在0到13之间,数值越大,转码的速度就越快,视频的质量也就越差。同理,数值越小,转码的速度就越慢,视频的质量就越好。
三、枚举值
尽管,FFmpeg的preset参数的理论值有14个,但在5.1版本中常用的有如下七个,接下来分别介绍一下。
(1)veryfast :转码速度非常快,但是输出视频质量较差。
(2)faster :转码速度比较快,输出的视频质量比veryfast模式稍微好一些。
(3)fast :转码速度快,输出的视频质量较好。
(4)medium :转码速度适中,输出视频质量也适中,如果不明确指定preset转码模式的话,默认值就是该值。
(5)slow :转码速度慢,但是输出视频质量比medium要好。
(6)slower :转码速度比较慢,但是输出的视频质量比较好。
(7)veryslow :转码码速度非常慢,但是输出的视频质量非常好。
四、使用实例
上面已经介绍了不同枚举值代表不同的视频转码速度和质量权衡情况,下面介绍一下preset参数的使用方法和效果。为了对比的效果更加明显,我们分别使用veryfast、medium、veryslow三种模式对相同的源文件进行转码处理,最后查看输出视频文件的各项参数情况,当然也包括转码过程中的耗时长短,得出对比结果。
(1)veryfast模式
FFmpeg命令如下:
ffmpeg -i input.mp4 -c:v libx264 -preset veryfast -c:a copy output_veryfast.mp4
运行结果如下:
由于设置的转码模式是veryfast,所以转码速度也非常快,大概是55倍速。
(2)medium模式
FFmpeg命令如下:
ffmpeg -i input.mp4 -c:v libx264 -preset medium -c:a copy output_medium.mp4
运行结果如下:
由于设置的转码模式是medium,所以转码速度适中,大概是43倍速。
(3)veryslow模式
FFmpeg命令如下:
ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -c:a copy output_veryslow.mp4
运行结果如下:
由于设置的转码模式是veryslow,所以转码速度非常慢,大概是11倍速,但是视频质量是三者中最好的。
五、指标参数对比
我们使用工具查看使用FFmpeg命令生成的上述三个视频文件,具体情况如下:
第一个:
第二个:
第三个:
前两个视频文件的profile是High,level是3.0,视频帧计算预测时使用4个参考帧;第三个文件的profile是High,level是3.1,视频帧预测时使用16个参考帧,所以计算更加准确,原始画面的还原度就更高,所以视频质量也就越好。
六、PSNR对比
上面只是简单的通过各项参数用来验证视频质量的好坏,下面通过属性评分来进一步验证preset参数的实际效果。我们使用PSNR作为评分标准,PSNR的全称为Peak Signal-to-Noise Ratio,中文的意思是峰值信噪比,是衡量图像质量的常用指标之一。
一般来说,PSNR的值越大,表示图像的质量就越好。首先,查看output_veryfast.mp4文件的PSNR值,命令如下:
ffmpeg -i input.mp4 -i output_veryfast.mp4 -lavfi psnr="stats_file=psnr_veryfast.log" -f null -
输出结果:
[Parsed_psnr_0 @ 0x7fd68ff12f40] PSNR y:40.872864 u:60.846434 v:60.433665 average:42.610901 min:36.898900 max:47.547727
接下来,查看output_medium.mp4文件的PSNR值,命令如下:
ffmpeg -i input.mp4 -i output_medium.mp4 -lavfi psnr="stats_file=psnr_medium.log" -f null -
输出结果:
[Parsed_psnr_0 @ 0x7fb7017e2b00] PSNR y:43.178487 u:63.701448 v:62.719975 average:44.917762 min:37.992765 max:49.457980
然后,查看output_veryslow.mp4文件的PSNR值,命令如下:
ffmpeg -i input.mp4 -i output_veryslow.mp4 -lavfi psnr="stats_file=psnr_veryslow.log" -f null -
输出结果:
[Parsed_psnr_0 @ 0x7fcf440d5d00] PSNR y:43.230675 u:64.322428 v:62.943080 average:44.971589 min:37.017716 max:49.444695
通过对比PSNR的输出结果(平均值):42.610901、44.917762、44.971589,可以发现,veryslow模式的PSNR数值最大,视频质量最好,veryfast模式的PSNR数值最小,视频质量最差。但是质量好坏只是相对而言的,实际上,这三个视频文件的画面都还是OK的。一般来说,PSNR值有标准如下:高于40dB表示视频图像的质量极好,非常接近原始视频图像;30dB至40dB表示视频的图像质量比还行,可以看出画面失真,但是可以接受;20至30dB表示视频图像质量差;低于20dB表示视频图像质量不可接受,基本上不能看。
总结
通过本文的介绍,相信大家对于FFmpeg的preset参数的定义和作用有了非常清晰的认识,也看到了这个参数的实际作用与效果。好了,我们今天的分享到这里就结束了,欢迎评论留言交流。
作者:玩转音视频
原文:https://mp.weixin.qq.com/s/MUa9EjLi-_tBFTNQTAalmA
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。