[FFmpeg-user] Color Channel Expression

Jon bae jonbae77 at gmail.com
Tue Aug 1 12:29:57 EEST 2017


2017-08-01 11:13 GMT+02:00 Paul B Mahol <onemda at gmail.com>:

> On 8/1/17, Jon bae <jonbae77 at gmail.com> wrote:
> > 2017-08-01 9:53 GMT+02:00 Paul B Mahol <onemda at gmail.com>:
> >
> >> On 8/1/17, Jon bae <jonbae77 at gmail.com> wrote:
> >> > 2017-07-31 22:16 GMT+02:00 Paul B Mahol <onemda at gmail.com>:
> >> >
> >> >> On 7/31/17, Jonathan Baecker <jonbae77 at gmail.com> wrote:
> >> >> >
> >> >> >
> >> >> > 2017-07-31 14:41 GMT+02:00 Paul B Mahol <onemda at gmail.com
> >> >> > <mailto:onemda at gmail.com>>:
> >> >> >
> >> >> >     On 7/31/17, Jon bae <jonbae77 at gmail.com
> >> >> > <mailto:jonbae77 at gmail.com>>
> >> >> >     wrote:
> >> >> >      > 2017-07-31 14:00 GMT+02:00 Paul B Mahol <onemda at gmail.com
> >> >> >     <mailto:onemda at gmail.com>>:
> >> >> >      >
> >> >> >      >> On 7/31/17, Jon bae <jonbae77 at gmail.com
> >> >> >     <mailto:jonbae77 at gmail.com>> wrote:
> >> >> >      >> > 2017-07-31 10:30 GMT+02:00 Paul B Mahol <
> onemda at gmail.com
> >> >> >     <mailto:onemda at gmail.com>>:
> >> >> >      >> >>
> >> >> >      >> >>>
> >> >> >      >> >>> What exactly you tried?
> >> >> >      >> >>>
> >> >> >      >> >>> Perhaps you want premultiply filter?
> >> >> >      >> >>>
> >> >> >      >> >>> Yes I have a video and a lower third, and I want to
> >> overlay
> >> >> >     the lower
> >> >> >      >> >> third. But my alpha channel from the lower third is not
> >> >> >     pre-devided
> >> >> >      >> >> with
> >> >> >      >> >> the alpha channel, so  I need to do a channel division
> in
> >> >> > ffmpeg.
> >> >> >      >> >> Something like:
> >> >> >      >> >>
> >> >> >      >> >> ffmpeg -i video.mp4 -i lowerthird.png -filter_complex
> >> >> >      >> >> [1:v]geq=r=r/a:g=g/a:b=b/a[gq];[0:v][gq]overlay ...
> >> >> output.mp4
> >> >> >      >> >>
> >> >> >      >> >> I see that you wrote a filter for this, but can you
> please
> >> >> >     give me an
> >> >> >      >> > example of how it works? I don't get it to run.
> >> >> >      >>
> >> >> >      >> "I don't get it to run" means nothing to me.
> >> >> >      >>
> >> >> >      >> I'm not sure if I use the filter correct... But with this:
> >> >> >      >
> >> >> >      > ffmpeg -i video.mp4 -i image.png -filter_complex
> >> >> >      > "[0:v]format=rgba[a];[1:v]format=rgba[b];[a][b]premultiply"
> >> >> >      >
> >> >> >      > My result is, that everything what had alpha = 0, in my
> image,
> >> >> > is
> >> >> > now
> >> >> >      > black. Mybe I understand the use case wrong, but how you
> would
> >> >> >     use this
> >> >> >      > filter?
> >> >> >
> >> >> >     Try harder to explain your use case?
> >> >> >
> >> >> > Sorry, my english is not so good, but I will try it. In the
> >> >> > attachment
> >> >> > you found 3 images. Universum.png is my original lower third, it
> >> >> > comes
> >> >> > out from blackmagic fusion. Universum-comp.jpg show the composite
> of
> >> >> > a
> >> >> > background video with the lower third, this is the correct result.
> >> >> > The
> >> >> > Universium-ffmpeg is the version from ffmpeg, as you see ffmpeg
> >> handles
> >> >> > the alpha channel different so the lower third is more dark.
> >> >> >
> >> >> > I can simulate the same effect, from ffmpeg, in my compositing
> >> program,
> >> >> > when I load the lower third image with the option "Post-Multiply by
> >> >> > Alpha". I guess this is what ffmpeg does in Background, when it
> load
> >> >> > images with alpha channel.
> >> >> > To get rid of this effect now in my composition program I have to
> >> >> > divide
> >> >> > the color channel from the lower third with its own alpha:
> >> >> > red/alpha;green/alpha;blue/alpha. Now I can overlay the lower
> third
> >> and
> >> >> > the result is correct.
> >> >> >
> >> >> > This division now I would need in ffmpeg. I though I can do it with
> >> >> > your
> >> >> > premultiply filter, but maybe not.
> >> >>
> >> >> Perhaps you want overlay filter?
> >> >>
> >> >
> >> > No the overlay filter don't handle the alpha channel correct, that is
> >> what
> >> > I was trying to say.
> >> >
> >> > You can try it by your own - get this 3 images and run this command:
> >> >
> >> > ffmpeg -loop 1 -f image2 -i backgroud.png -i multiplied-alpha.png
> >> > -filter_complex overlay -pix_fmt rgb24 -f sdl "multiplied alpha"
> >> >
> >> > ffmpeg -loop 1 -f image2 -i backgroud.png -i pre-divide-alpha.png
> >> > -filter_complex overlay -pix_fmt rgb24 -f sdl "divide alpha"
> >> >
> >> > The second one overlay the image correct. The first one overlay the
> >> > image
> >> > different, because the alpha channel is not the same.
> >> >
> >>
> >> I stll do not know what you are trying to tell me.
> >>
> >> Do you have equatition how should R/G/B be calculated with Alpha?
> >>
> >
> > I think to, that my hole description make it more complicate, then my
> > question to the begin. I was trying to tell you, that my image, what I
> want
> > to overlay, need to be process before, because its alpha channel is not
> in
> > a way ffmpeg needs it for the overlay filter.
> >
> > You know that there is different way how a image have its color
> calculated
> > with its own alpha channel. The color can be multiplied with the alpha,
> or
> > can be straight. (
> > https://microsoft.github.io/Win2D/html/PremultipliedAlpha.htm )
> >
> > My image now have a multiplied alpha. To get a correct overlay I have to:
> >
> > *a.* unmultiply the alpha channel
> >
>
> I'm just writing this filter. But you could do this really slowly with
> geq filter.
>

Yes I see it before, from Gyan (thank you Gyan for this!), this example is
mathematical correct, but my result is far away from what I expected.


>
> > ImageColor/ImageAlpha
> > or:
> >
> > *b.* to overlay the image with a different math operation:
> >
> >
> > foregroundColor + ( backgroundColor * ( 1 - foregroundAlpha ) )
>
> I plan to add this mode to overlay filter.
>
> This would be very great!


> >
> >
> > I have make now more tests and it look like that method *a.* still not
> > working 100%, even when it should. But method *b.* works.
> >
> >
> > So my new question is: can ffmpeg combine images with a different math.
> Or
> > is there a filter where I can write my own blend expressions (I know the
> > blend filter, but until now I had no success with this one.)
>
> blend does not allow for using components from other planes, and
> adding such feature
> is not trivial.
>

Yeah I believe it is not easy. From user perspective it sound sometimes
trivial, because we know this from other software, but from developer
perspective it look totally different.

Then thank you, for your patience!


More information about the ffmpeg-user mailing list