video - 如何使用 FFmpeg 颜色空间选项

标签 video encoding ffmpeg video-encoding

我试图了解色彩空间 FFmpeg 之间的区别论据:

  • 普通选项,-colorspace bt709
  • 号码,-colorspace 1
  • 编解码器参数 -x264-params "colorspace=bt709"
  • 筛选 -vf "colorspace=bt709"

  • 颜色空间类别是:
  • all
  • iall
  • colorspace
  • transfer
  • primaries
  • color range
  • color matrix

  • 问题
    从原始编码或从一种格式转码/转换为另一种格式时,应何时使用每种格式?如mpgmp4 .
    我需要指定输入色彩空间还是 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 之前还是之后)。据我所知,这不会修改像素值本身。
  • 一些编解码器或格式还需要知道它们在哪个颜色空间中运行,因为它们需要将其插入到编码流中,有时 FFmpeg 不会传递它所知道的内容。 -x264-params-x265-params手动执行此操作。据我所知,仅此一项也不会修改像素值。
  • 各种-vf有选项可以在颜色空间之间进行转换。他们主动改变内存中的像素值和布局。

  • FFmpeg 的输出报告了它对每个流的了解。例如,当您看到类似 gbrp10le(tv, bt2020nc/bt2020/arib-std-b67) 的内容时对于输入或输出流,这意味着:
  • 像素格式为 gbrp10le ( -pix_fmt )
  • 范围是电视/有限(-color_range)
  • YUV <-> RGB 颜色矩阵是 bt2020nc ( -colorspace )
  • 初选是 bt2020 ( -color_primaries )
  • EOTF/色调曲线为 arib-std-b67 (HLg) (-color_trc)

  • 现在,这就是有趣的地方:根据 FFmpeg 对流的了解自动应用一些过滤器,通常使用 libswscale 组件(-vf scale)。如果您在像素格式之间进行转换,这显然是需要的,但您也可以使用该过滤器手动进行某些转换或更改图像大小。
    最大的问题是 libswscale不能很好地处理所有情况,尤其是在无法设置所有参数的命令行中,尤其是对于像 BT2020 中的 Wide-Gamut/HDR 空间。还有一些额外的过滤器( colorspacecolormatrixzscale )不会造成太大的麻烦,并且可以替换部分 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/

    相关文章:

    javascript - 每秒获取视频帧的图片

    iphone - UIWebview Orientation landscape 中的 HTML 5 视频

    linux - iconv 命令不会将纯文本文件的编码更改为另一种编码

    c# - 确保导出的 JPEG 小于最大文件大小

    ruby-on-rails - PGError : ERROR: invalid byte sequence for encoding "UTF8

    video - 如何使用ffmpeg将多个音频文件添加到视频中的特定时间?

    google-chrome - headless chrome 捕获屏幕视频或动画

    opengl - ffmpeg 到 opengl 纹理与 glTexImage2D

    c# - 如果落后则跳过帧渲染

    ubuntu - avconv:从图像的子集制作视频