将格式从yuvj420p转换为yuv420p

5

我正在尝试执行从yuvj420p到yuv420p的算法转换。这两种格式之间的区别在于范围值:

  • yuvj420p [0-255], 和
  • yuv420p [16-239]

我想知道如何将这些值适应新的范围。


2
yuv420p 实际上是色度的 16-240 和亮度的 16-235。 - Валерий Заподовников
1个回答

11

对于这个问题稍微有点晚了,但是为了将来的参考和帮助其他人,以下是如何使用 FFmpeg 解决这个问题。

比如在 After Effects 中导出无压缩的 AVI 文件时,有时候转换后的 FFmpeg 视频似乎缺少对比度,就好像范围被压缩了一样。添加

-pix_fmt yuvj420p

...通过使用 libx264 编码时加上命令参数可以解决此问题。但是,在像 webm(VP8)这样不支持此像素格式的格式上,我发现scale 过滤器图表的选项允许我调整范围,同时保持在 yuv420p 中,这可能对您的情况更有帮助,在任何不支持 yuvj420p 的情况下都是如此。尝试添加此标志:

-vf "in_range=mpeg:out_range=full"

文档中提到:

in_rangeout_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

奇怪!如果pix_fmt是yuv420p,那么最新版本的out_range根本没有效果。它可以从rgb->yuv420p,或者yuv420p->yuv444p工作。但是如果是yuv420p->yuv420p,则out_range根本没有任何效果。 - Wang
你不应该使用yuvj****像素格式。这些格式已经被弃用,因为它们只是在libav中的hack。 - Валерий Заподовников

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接