[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