[FFmpeg-trac] #9626(undetermined:new): alphamerge and transparency in main

FFmpeg trac at avcodec.org
Fri Feb 4 10:14:14 EET 2022


#9626: alphamerge and transparency in main
-------------------------------------+-------------------------------------
             Reporter:  Jozef        |                    Owner:  (none)
  Chutka                             |
                 Type:  defect       |                   Status:  new
             Priority:  normal       |                Component:
                                     |  undetermined
              Version:  git-master   |               Resolution:
             Keywords:               |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
Description changed by Jozef Chutka:

Old description:

> Summary of the bug:
>
> Using ffmpeg version 2022-01-24-git-0a83ecbf48-full_build-www.gyan.dev
>
> When alphamerge `alpha` has white pixels where `in` has transparent,
> those are expected to result transparent on `out`, however ffmpeg renders
> it with some(?) color.
>
> How to reproduce:
> {{{
> % ffmpeg -f lavfi -i color=color=#ff0000:size=100x100:rate=25:duration=4
> -i main.png -i mask.png -filter_complex [1][2]alphamerge[v];[0][v]overlay
> -frames:v 1 output/bug.jpg -y
> }}}
>
> To fix this one can "mask" the `alpha` by the shape of `in` before
> alphamerge is applied. Now the new `alpha` has no white pixels outside of
> `in` shape.
>
> {{{
> % ffmpeg -f lavfi -i color=color=#ff0000:size=100x100:rate=25:duration=4
> -i main.png -i mask.png -filter_complex
> color=color=#000000 at 0:size=100x100:rate=25,split[b1][b2];[b1][1]overlay[v];[v]split[v][s];[2][s]alphamerge[m];[b2][m]overlay[m];[v][m]alphamerge[v];[0][v]overlay
> -frames:v 1 output/fix.jpg -y
> }}}
>
> In this case filter graph ends up with 8 total filters instead of 2.
>
> I think ffmpeg should respect transparent pixels in `in` hence marking it
> as defect.

New description:

 Summary of the bug:

 Using ffmpeg version 2022-01-24-git-0a83ecbf48-full_build-www.gyan.dev

 When alphamerge `alpha` has white pixels where `in` has transparent, those
 are expected to result transparent on `out`, however ffmpeg renders it
 with some(?) color.

 How to reproduce:
 {{{
 % ffmpeg -f lavfi -i color=color=#ff0000:size=100x100:rate=25:duration=4
 -i main.png -i mask.png -filter_complex [1][2]alphamerge[v];[0][v]overlay
 -frames:v 1 output/bug.jpg -y
 }}}

 In order to fix, one can "mask" the `alpha` by the shape of `in` before
 alphamerge is applied. Now the new `alpha` has no white pixels outside of
 `in` shape.

 {{{
 % ffmpeg -f lavfi -i color=color=#ff0000:size=100x100:rate=25:duration=4
 -i main.png -i mask.png -filter_complex
 color=color=#000000 at 0:size=100x100:rate=25,split[b1][b2];[b1][1]overlay[v];[v]split[v][s];[2][s]alphamerge[m];[b2][m]overlay[m];[v][m]alphamerge[v];[0][v]overlay
 -frames:v 1 output/fix.jpg -y
 }}}

 In this case filter graph ends up with 8 total filters instead of 2.

 I think ffmpeg should respect transparent pixels in `in` hence marking it
 as defect.

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


More information about the FFmpeg-trac mailing list