我正在尝试执行从yuvj420p到yuv420p的算法转换。这两种格式之间的区别在于范围值:
- yuvj420p [0-255], 和
- yuv420p [16-239]
我想知道如何将这些值适应新的范围。
对于这个问题稍微有点晚了,但是为了将来的参考和帮助其他人,以下是如何使用 FFmpeg 解决这个问题。
比如在 After Effects 中导出无压缩的 AVI 文件时,有时候转换后的 FFmpeg 视频似乎缺少对比度,就好像范围被压缩了一样。添加
-pix_fmt yuvj420p
...通过使用 libx264 编码时加上命令参数可以解决此问题。但是,在像 webm(VP8)这样不支持此像素格式的格式上,我发现scale 过滤器图表的选项允许我调整范围,同时保持在 yuv420p 中,这可能对您的情况更有帮助,在任何不支持 yuvj420p 的情况下都是如此。尝试添加此标志:
-vf "in_range=mpeg:out_range=full"
文档中提到:
in_range
,out_range
:设置输入/输出YCbCr采样范围。这允许覆盖自动检测到的值,并允许强制使用特定的输出和编码器值。如果未指定,则范围取决于像素格式。
所以,在我的情况下,整个命令看起来是这样的:
ffmpeg -i master.mp4 -c:v libvpx -crf 12 -vf "scale=300:-1:in_range=mpeg:out_range=full, crop=300:168" -b:v 1M -c:a libvorbis -b:a 64k -ac 1 output_from_mp4_ranged.webm
yuv420p->yuv420p
,则out_range根本没有任何效果。 - Wang