我试图了解色彩空间 FFmpeg 之间的区别论据:
-colorspace bt709
-colorspace 1
-x264-params "colorspace=bt709"
-vf "colorspace=bt709"
颜色空间类别是:
all
iall
colorspace
transfer
primaries
color range
color matrix
问题
从原始编码或从一种格式转码/转换为另一种格式时,应何时使用每种格式?如
mpg
至mp4
.我需要指定输入色彩空间还是 FFmpeg 会自动检测?
问题
没有
-vp8-params
, 仅 -x264-params
.我应该使用 normal options
或 -vf
代替 vp8
和其他编解码器?错误
-all
或 -colormatrix
选项,但有 all=
和 colormatrix=
对于 -x264-params
和 -vf
.-x264-params "colorspace=bt709"
, 我得到 Error parsing option 'colorspace = bt709'.
然而colorprim=bt709
, transfer=bt709
, colormatrix=bt709
所有的工作。资源
https://ffmpeg.org/ffmpeg-filters.html#colormatrix
https://ffmpeg.org/ffmpeg-filters.html#colorspace
https://trac.ffmpeg.org/wiki/colorspace
最佳答案
这可能无法完全回答您的问题,但我发现 FFmpeg 和 libswscale 的复杂性以及各种过滤器的文档记录不是很好,所以我对这件事的理解如下。
-pix_fmt
, -colorspace
, -color_primaries
, -color_trc
和 -color_range
用于在 AVFrame
中设置值结构描述here .它们自己不进行任何转换,它们只是标记输入或输出流(取决于它们是放在 -i
之前还是之后)。据我所知,这不会修改像素值本身。-x264-params
和 -x265-params
手动执行此操作。据我所知,仅此一项也不会修改像素值。-vf
有选项可以在颜色空间之间进行转换。他们主动改变内存中的像素值和布局。FFmpeg 的输出报告了它对每个流的了解。例如,当您看到类似
gbrp10le(tv, bt2020nc/bt2020/arib-std-b67)
的内容时对于输入或输出流,这意味着:-pix_fmt
) -color_range
)-colorspace
) -color_primaries
) -color_trc
)现在,这就是有趣的地方:根据 FFmpeg 对流的了解自动应用一些过滤器,通常使用 libswscale 组件(
-vf scale
)。如果您在像素格式之间进行转换,这显然是需要的,但您也可以使用该过滤器手动进行某些转换或更改图像大小。最大的问题是
libswscale
不能很好地处理所有情况,尤其是在无法设置所有参数的命令行中,尤其是对于像 BT2020 中的 Wide-Gamut/HDR 空间。还有一些额外的过滤器( colorspace
、 colormatrix
和 zscale
)不会造成太大的麻烦,并且可以替换部分 libswscale
.他们似乎确实设置了正确的 AVFrame
据我所知,像素格式,所以 libswscale
不会尝试两次应用转换,但我有点模糊哪个是自动的,哪个不是。编辑:有关详细解释完整命令行的具体示例,请参阅 How can I encode RGB images into HDR10 videos in ffmpeg command-line? .
关于video - 如何使用 FFmpeg 颜色空间选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61834623/