【问题标题】:convert format from yuvj420p to yuv420p将格式从 yuvj420p 转换为 yuv420p
【发布时间】:2022-01-17 09:32:20
【问题描述】:

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

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

我想知道如何使值适应新范围。

【问题讨论】:

  • yuv420p 实际上是 16-240 的色度和 16-235 的亮度。

标签: video yuv


【解决方案1】:

这有点晚了,但为了将来参考,如果它对任何人有帮助,这里是如何用 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_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 完全没有效果
  • 您根本不应该使用 yuvj**** 像素格式。这些已被弃用,因为它们只是 libav 中的黑客攻击。
猜你喜欢
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
  • 2013-02-21
  • 2018-02-06
  • 2018-11-19
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多