Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 如何使用FFmpeg颜色空间选项_Video_Encoding_Ffmpeg_Video Encoding - Fatal编程技术网

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
    选项用于在颜色空间之间转换。它们会主动更改内存中的像素值和布局

FFmpeg的输出报告它知道的每个流的内容。例如,当您看到类似于输入或输出流的
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
现在,这就是它的乐趣所在:一些过滤器根据FFmpeg对流的了解自动应用,通常使用libswscale组件(
-vf scale
)。如果要在像素格式之间进行转换,这显然是必需的,但您也可以使用该过滤器手动进行某些转换或更改图像大小,例如

最大的问题是,
libswscale
不能很好地处理所有情况,尤其是在命令行中,您无法设置所有参数,尤其是对于像BT2020这样的宽范围/HDR空间。还有一些额外的过滤器(
colorspace
colormatrix
zscale
),它们不会造成太多的麻烦,并且可以替换
libswscale
的部分。据我所知,它们似乎设置了正确的
AVFrame
像素格式,因此
libswscale
没有尝试应用两次转换,但我不太清楚哪些是自动的,哪些不是