Video 如何使用FFmpeg颜色空间选项
我试图理解颜色空间参数之间的区别:Video 如何使用FFmpeg颜色空间选项,video,encoding,ffmpeg,video-encoding,Video,Encoding,Ffmpeg,Video Encoding,我试图理解颜色空间参数之间的区别: 普通选项,-色彩空间bt709 编号,-颜色空间1 编解码器参数-x264参数“colorspace=bt709” 过滤器-vf“colorspace=bt709” 颜色空间类别包括: all iall colorspace 传输 primaries 颜色范围 颜色矩阵 问题: 从原始编码或从一种格式转换/转换为另一种格式时,应在何时使用每种格式?例如mpg到mp4 我需要指定输入颜色空间还是FFmpeg自动检测 问题 没有-vp8参数,只有-x2
- 普通选项,
-色彩空间bt709
- 编号,
-颜色空间1
- 编解码器参数
-x264参数“colorspace=bt709”
- 过滤器
-vf“colorspace=bt709”
all
iall
colorspace
传输
primaries
颜色范围
颜色矩阵
问题: 从原始编码或从一种格式转换/转换为另一种格式时,应在何时使用每种格式?例如
mpg
到mp4
我需要指定输入颜色空间还是FFmpeg自动检测
问题 没有
-vp8参数
,只有-x264参数
。我应该为vp8
和其他编解码器使用普通选项
还是-vf
错误
- 没有Normal
或-all
选项,但是对于-colormatric
和-x264参数
有-vf
和all=
colormatrix=
- 使用编解码器参数
,我得到-x264参数“colorspace=bt709”
错误解析选项“colorspace=bt709”。
然而,
,colorprim=bt709
,transfer=bt709
所有的工作都很有效colormatrix=bt709
资源
这可能无法完全回答您的问题,但我发现FFmpeg和libswscale的复杂之处以及各种过滤器都没有很好的文档记录,因此我对这件事的理解是这样的
,-pix\u fmt
,-colorspace
,-color\u primaries
和-color\u trc
用于在所述的-color\u range
结构内设置值。它们自己不做任何转换,只是标记输入或输出流(取决于它们是放在AVFrame
之前还是之后)。据我所知,这不会修改像素值本身-i
- 一些编解码器或格式还需要知道它们在使用什么颜色空间,因为它们需要在编码流中插入颜色空间,有时FFmpeg无法传递它所知道的颜色空间
和-x264参数
手动执行此操作。据我所知,仅此一点也不会修改像素值-x265参数
- 各种
选项用于在颜色空间之间转换。它们会主动更改内存中的像素值和布局-vf
gbrp10le(tv,bt2020nc/bt2020/arib-std-b67)
时,这意味着:
- 像素格式为gbrp10le(
)-pix_fmt
- 范围为tv/有限(
)-颜色范围
- YUV RGB颜色矩阵为bt2020nc(
)-colorspace
- 原色为bt2020(
)-color\u原色
- EOTF/色调曲线为arib-std-b67(HLg)(
)-color\u trc
-vf scale
)。如果要在像素格式之间进行转换,这显然是必需的,但您也可以使用该过滤器手动进行某些转换或更改图像大小,例如
最大的问题是,libswscale
不能很好地处理所有情况,尤其是在命令行中,您无法设置所有参数,尤其是对于像BT2020这样的宽范围/HDR空间。还有一些额外的过滤器(colorspace
、colormatrix
和zscale
),它们不会造成太多的麻烦,并且可以替换libswscale
的部分。据我所知,它们似乎设置了正确的AVFrame
像素格式,因此libswscale
没有尝试应用两次转换,但我不太清楚哪些是自动的,哪些不是