[FFmpeg-trac] #9772(avfilter:new): colorspace filter fails on trc=linear

FFmpeg trac at avcodec.org
Sun May 8 13:29:24 EEST 2022


#9772: colorspace filter fails on trc=linear
-------------------------------------+-------------------------------------
             Reporter:  Llyw         |                    Owner:  (none)
                 Type:  defect       |                   Status:  new
             Priority:  normal       |                Component:  avfilter
              Version:  unspecified  |               Resolution:
             Keywords:  colorspace   |               Blocked By:
  conversion linear gamma            |
  resampling                         |
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
Changes (by Llyw):

 * cc: Llyw (added)


Old description:

> I am currently trying to get a filter graph running that converts to
> linear gamma prior to resampling the video and then re-apply a transfer
> curve. So my `-filter:v` option essentially looks like this:
> `'[...],colorspace=primaries=smpte170m:trc=linear,scale=[...],colorspace=all=smpte170m'`
> (And I am using FFmpeg 5.0.1, which I can't yet select from the Version
> drop-down list.)
>
> Unfortunately, attempting to process videos this way results in an error
> as the trc option of the first `colorspace` filter is parsed but
> apparently ignored:
> {{{
> [Parsed_colorspace_1 @ ...] Setting 'primaries' to value 'smpte170m'
> [Parsed_colorspace_1 @ ...] Setting 'trc' to value 'linear'
> [...]
> [Parsed_colorspace_1 @ ...] Please specify output transfer
> characteristics
> Error while filtering: Invalid argument
> Failed to inject frame into filter network: Invalid argument
> Error while processing the decoded data for stream #0:0
> }}}
>
> I have noted that the `linear` option for `trc` is currently not
> documented but it is certainly part of the code. I wish to resample in a
> space with linear gamma, so it would be kind of important to me if this
> is fixed. (I don't get an error if I am using
> `colorspace=all=smpte170m:trc=linear` but I am assuming that this then
> ignores the `trc=linear` part and still works with the SMPTE 170M
> transfer curve applied, which is absolutely not what I want.)
>
> I would also like to know why I explicitly have to specify the primary
> colors of the output color space? (I would get an error similar to the
> one above if I try to omit it.) Can't this just default to the input's
> properties? I hope I am not missing something here and still doing the
> resampling in the wrong color space?
>
> I understand that `zscale` can also be used (and it doesn't force me to
> specify the output primaries if I only care about the transfer curve),
> but I have found that color space conversion in combination with
> resampling using `zscale` is 4x slower than using native filters on my
> system, contradicting their claims on !GitHub. In addition, I am still
> not sure whether zscale automatically converts to linear gamma before
> resampling or whether I have to do that manually, i.e. use three filters
> instead of one. Add that to that the fact that there seems to be less
> debug output with `zscale` and you'll probably understand why I prefer
> using the native filters.

New description:

 I am currently trying to get a filter graph running that converts to
 linear gamma prior to resampling the video and then re-apply a transfer
 curve. So my `-filter:v` option essentially looks like this:
 `'[...],colorspace=primaries=smpte170m:trc=linear,scale=[...],colorspace=all=smpte170m'`
 (And I am using FFmpeg 5.0.1, which I can't yet select from the Version
 drop-down list.)

 Unfortunately, attempting to process videos this way results in an error
 as the trc option of the first `colorspace` filter is parsed but
 apparently ignored:
 {{{
 [Parsed_colorspace_1 @ ...] Setting 'primaries' to value 'smpte170m'
 [Parsed_colorspace_1 @ ...] Setting 'trc' to value 'linear'
 [...]
 [Parsed_colorspace_1 @ ...] Please specify output transfer characteristics
 Error while filtering: Invalid argument
 Failed to inject frame into filter network: Invalid argument
 Error while processing the decoded data for stream #0:0
 }}}

 I have noted that the `linear` option for `trc` is currently not
 documented but it is certainly part of the code. I wish to resample in a
 space with linear gamma, so it would be kind of important to me if this is
 fixed. (I don't get an error if I am using
 `colorspace=all=smpte170m:trc=linear` but I am assuming that this then
 ignores the `trc=linear` part and still works with the SMPTE 170M transfer
 curve applied, which is absolutely not what I want.)

 I would also like to know why I explicitly have to specify the primary
 colors of the output color space? (I would get an error similar to the one
 above if I try to omit it.) Can't this just default to the input's
 properties? I hope I am not missing something here and still doing the
 resampling in the wrong color space?

 I understand that `zscale` can also be used (and it doesn't force me to
 specify the output primaries if I only care about the transfer curve), but
 I have found that color space conversion in combination with resampling
 using `zscale` is at least 2x slower than using native filters on my
 system, contradicting their claims on !GitHub. In addition, I am still not
 sure whether zscale automatically converts to linear gamma before
 resampling or whether I have to do that manually, i.e. use three filters
 instead of one. Add that to that the fact that there seems to be less
 debug output with `zscale` and you'll probably understand why I prefer
 using the native filters.

--
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/9772#comment:2>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list