我试图执行一个算法,将yuvj420p转换为yuv420p。两种格式之间的差异是范围值。
yuvj420p [0-255]和yuv420p [16-239]
我想知道如何使这些值适应新的范围。
答案 0 :(得分:6)
有点晚了,但是为了将来的参考,如果它对任何人有帮助,这里是如何用FFmpeg处理这个问题。
例如,当从After Effects导出未压缩的AVI时,有时FFmpeg转换似乎缺乏对比度,就好像该范围正在被压缩一样。添加
-pix_fmt yuvj420p
...使用libx264进行编码时,该命令可以解决此问题。但是,对于不支持此像素格式的webm(VP8)等格式,我发现options of the scale filtergraph允许我调整范围,同时保留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