FFmpeg wiki说最好的压缩率是预设的“veryslow” 。
但是当我用我的视频尝试它时,预设veryfast
在我的情况下提供了最好的压缩。
以下是我的样本的输出:
预设ultrafast
ffmpeg -y -threads 1 -i "D:\Video\PresentTest\Safari_Dolby_Digital_Plus.m2ts.mp4" -c:v libx264 -preset ultrafast -c:a aac -max_muxing_queue_size 1024 "D:\Video\PresentTest\Safari_Dolby_Digital_Plus-ultrafast.mp4"
frame= 2822
fps= 65
q=-1.0
Lsize=
239118kB
time=00:01:34.18
bitrate=20797.6kbits/s
speed=2.16x
预设superfast
ffmpeg -y -threads 1 -i "D:\Video\PresentTest\Safari_Dolby_Digital_Plus.m2ts.mp4" -c:v libx264 -preset superfast -c:a aac -max_muxing_queue_size 1024 "D:\Video\PresentTest\Safari_Dolby_Digital_Plus-superfast.mp4"
frame= 2822
fps= 63
q=-1.0
Lsize= 150252kB
time=00:01:34.18
bitrate=13068.3kbits/s
speed=2.09x
预设veryfast
ffmpeg -y -threads 1 -i "D:\Video\PresentTest\Safari_Dolby_Digital_Plus.m2ts.mp4" -c:v libx264 -preset veryfast -c:a aac -max_muxing_queue_size 1024 "D:\Video\PresentTest\Safari_Dolby_Digital_Plus-veryfast.mp4"
frame= 2822
fps= 62
q=-1.0
Lsize=
115997kB
time=00:01:34.18
bitrate=10089.0kbits/s
speed=2.08x
预设fast
ffmpeg -y -threads 1 -i "D:\Video\PresentTest\Safari_Dolby_Digital_Plus.m2ts.mp4" -c:v libx264 -preset fast -c:a aac -max_muxing_queue_size 1024 "D:\Video\PresentTest\Safari_Dolby_Digital_Plus-fast.mp4"
frame= 2822
fps= 52
q=-1.0
Lsize=
133773kB
time=00:01:34.18
bitrate=11635.1kbits/s
speed=1.72x
预设medium
ffmpeg -y -threads 1 -i "D:\Video\PresentTest\Safari_Dolby_Digital_Plus.m2ts.mp4" -c:v libx264 -preset medium -c:a aac -max_muxing_queue_size 1024 "D:\Video\PresentTest\Safari_Dolby_Digital_Plus-medium.mp4"
frame= 2822
fps= 43
q=-1.0
Lsize=
124154kB
time=00:01:34.18
bitrate=10798.4kbits/s
speed=1.42x
预设slow
ffmpeg -y -threads 1 -i "D:\Video\PresentTest\Safari_Dolby_Digital_Plus.m2ts.mp4" -c:v libx264 -preset slow -c:a aac -max_muxing_queue_size 1024 "D:\Video\PresentTest\Safari_Dolby_Digital_Plus-slow.mp4"
frame= 2822
fps= 27
q=-1.0
Lsize= 125262kB
time=00:01:34.18
bitrate=10894.8kbits/s
speed=0.886x
预设slower
ffmpeg -y -threads 1 -i "D:\Video\PresentTest\Safari_Dolby_Digital_Plus.m2ts.mp4" -c:v libx264 -preset slower -c:a aac -max_muxing_queue_size 1024 "D:\Video\PresentTest\Safari_Dolby_Digital_Plus-slower.mp4"
frame= 2822
fps= 14
q=-1.0
Lsize= 125061kB
time=00:01:34.18
bitrate=10877.3kbits/s
speed=0.465x
预设veryslow
ffmpeg -y -threads 1 -i "D:\Video\PresentTest\Safari_Dolby_Digital_Plus.m2ts.mp4" -c:v libx264 -preset veryslow -c:a aac -max_muxing_queue_size 1024 "D:\Video\PresentTest\Safari_Dolby_Digital_Plus-veryslow.mp4"
frame= 2822
fps=6.6
q=-1.0
Lsize= 118149kB
time=00:01:34.18
bitrate=10276.2kbits/s
speed=0.221x
veryfast
与其他预设相比,为什么预设生成的压缩文件最多?
视频丢失是预设的veryfast
吗?
有损压缩是比特率(文件大小)和质量之间的权衡,而不仅仅是获得最小的文件。 如果这就是你想要的,使用
-preset veryslow -crf 51
(并且可以选择缩小到 256x144)来获得一个非常小的文件,其中大部分只是模糊的斑点,没有细节。编码是 CPU 时间与质量与比特率的 3 向折衷,与无损压缩非常不同,例如
zip
文件大小是您衡量“最佳”压缩的方式,是您在 2 向折衷中权衡与时间的关系。1 或 3 路,如果压缩和解压缩速度是独立的...-preset veryslow
为您提供 x264 可以提供的最佳权衡2,通过花费更多的 CPU 时间来寻找表示每比特更多细节的方法。(即每次失真率的最佳折衷)。这主要与速率控制正交,速率控制决定要花费多少总比特。x264' 默认速率控制是 CRF 23 (
ffmpeg -crf 23
); 如果您想要更小的文件,请使用-preset veryslow -crf 26
或花费更少的比特来获得相同的复杂性,从而导致更多的模糊。它是对数的,因此将 CRF 提高几个数字可以将比特率改变 2 倍。对于几乎透明的质量,-crf 18
或者20
通常是好的,但成本更高的比特率。CRF 模式不是真正的恒定质量(SSIM、PSNR 或任何其他指标)。通过更快的编码预设,x264 使用更简单的决策过程来决定如何/在哪里使用比特,从而导致相同 CRF 设置的比特率出现一些变化。
正如@szatmary 解释的那样,使用不同的搜索工具来查找冗余,更高的预设可能会找到一种更小的方法来编码看起来稍微差一点的东西。或者是一种编码一些看起来更好但只是稍微大一点的块的方法。 根据这些事情的平均方式,不同质量预设的相同 CRF 将具有不同的质量和不同的比特率。
这就是为什么您不会以相同的质量获得逐渐变小的文件的原因。
-preset veryfast
通常看起来更糟。-preset ultrafast
即使在高比特率下通常也很糟糕,但其他预设看起来和veryfast
你花费更多比特率一样好。较小的文件并不意味着“更好的压缩”。请记住,质量也是可变的。如果您曾经使用
ffmpeg -i in.mp4 -ssim 1 -tune ssim -preset veryslow out.mkv
libx264 来计算 SSIM 视觉质量指标,您会发现veryslow 的每比特率质量比veryfast 更好。(如果您要对质量进行基准测试,请以固定比特率进行,即 2-pass 而不是 CRF。请参阅https://trac.ffmpeg.org/wiki/Encode/H.264)请记住,使图像对人类看起来更好的心理视觉优化(如
-psy-rd=1.0:0.15
)可能在某些质量指标上得分更差,因此在实际使用时您不希望-tune ssim
. Psy-rd 意味着在优化速率与失真权衡时将人类感知考虑在内。AQ(自适应量化)是另一种 psy 优化,但与更简单的PSNR质量度量不同, SSIM足够复杂,可以认为是有益的。如果高(空间)频率噪声是小规模的,人类倾向于将其视为细节,即使它与源图像中的细节不同。我们的眼睛喜欢细节而不是模糊。例如,来自量化的边缘和振铃伪影 = 舍入 DCT 系数实际上看起来比仅仅模糊所有内容更好,如果它们很小的话。当您暂停和放大时看起来更糟的东西可能会在您正常观看时愉快地欺骗您的眼睛。(h.264 有一个循环去块过滤器,在显示帧之前应用并用作参考,因此它比早期的编解码器(如 DivX / h.263)更容易避免阻塞。加速它只会在低比特率下模糊一切)。
这里的想法类似于 MP3 和其他高级音频编解码器对声音所做的事情,除了有更多的心理声学优化空间,因为响亮的声音确实会阻止耳朵听到附近频率的安静声音。
如果您要编码一次以长时间保留结果,和/或通过 Internet 提供,请使用
-preset veryslow
. 或者至少-preset medium
。您只需支付一次 CPU 成本,就可以重复节省文件大小(对于给定的质量)。但是,如果您只想观看一次编码,例如将视频放在移动设备上,您将在其中观看一次然后将其删除,那么
-preset faster -crf 20
如果您有存储空间,那就有意义了。只需花费额外的比特。脚注 1:在无损压缩中,您需要权衡文件大小与压缩和/或解压缩的速度(可能会有所不同;一些编解码器的解压缩速度非常快,即使它们允许良好的慢速压缩)。实际上,如果您想了解详细程度,RAM 使用/缓存占用也可以是一个变量。在无损压缩中,质量固定为“完美”,如 x264
-qp 0
h.264 解码性能可能会随着参考帧的数量而有所不同,更多的参考帧具有更大的内存占用,因此 CPU 解码器可能会有更多的缓存未命中。但通常 h.264 由硬件解码。与许多无损压缩方案一样,只有完全不同的编解码器(如 h.265)才能在解码性能上发生巨大变化,而不是同一编解码器的不同选项。额外的编码时间用于寻找对相同位进行编码的不同方法,但只有一种解码方法。
是的,h.264 具有无损模式,作为Hi444PP 配置文件的一部分。不,您不想在互联网上使用它;除 FFmpeg 之外的许多解码器都缺乏对该特殊功能的支持,而且比特率非常高,例如 1080p30 YUV 4:2:0 或 RGB 4:4:4 的 100 到 200 Mbit/s。 如何使用 FFMPEG 从一系列 1000 张 PNG 图像中创建未压缩的 AVI有一些来自 Sintel 预告片的测试结果。
脚注 2:其他编解码器,如 h.265(使用 x265 编码器)或 VP9 可以提供更好的速率失真折衷,但代价是更多的CPU 时间进行编码。对于固定的编码时间,我不确定 x265 是否比 x264 有任何优势。但是与 h.265 的解码器兼容性远不如 h.264 广泛。
解码兼容性对于 h.264主要配置文件非常好,并且希望这些天也是高配置文件。(8x8 DCT 对 1080p 尤其是 4k 等高分辨率最有用。)x264 的默认设置是高配置。一些过时的移动设备可能只有 h.264 基线配置文件的硬件解码,但每比特率的质量明显较差(没有 B 帧,也没有 CABAC,只有效率较低的 CAVLC 用于将结构无损编码为比特流的最后一步。 )
预设不控制编码的速度。它们启用或禁用压缩功能(通常称为“工具”)。使用较慢的预设时,会启用更多工具。但是由于每个视频都不同,因此不可能每次都为每个视频都获得完美的平衡。
对于您的特定内容,其中一种工具会占用更多 CPU 和更多比特,但它会生成更高质量的视频,同时仍适合比特率包络。