~50% performance difference overlaying static image with png series using -vf/-filter_complex

classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

~50% performance difference overlaying static image with png series using -vf/-filter_complex

d-fens
hi,

i have a background png and a sequence of pngs with transparency which  
should overlay the background.

when i use

./ffmpeg -i %04d.png -vf "movie=bg.png [bg]; [in] format=rgb32, split  
[T1], fifo, [bg] overlay=0:0, [T2] overlay=0:0 [out]; [T1] fifo [T2]"  
out.mp4

(taken from  
http://stackoverflow.com/questions/10438713/overlay-animated-images-with-transparency-over-a-static-background-image-using-f)
i get arround 13fps for fullHD images, but using

./ffmpeg -loop 1 -i bg.png -i %04d.png -filter_complex  
overlay=shortest=1 out.mp4

i get around 7fps for the same images.
I guess the background image gets re-read here but thats just a guess;  
as the second, newer version looks much more clean and simple i wonder  
whats the way to get best performance in this scenario?

greets!
_______________________________________________
ffmpeg-user mailing list
[hidden email]
http://ffmpeg.org/mailman/listinfo/ffmpeg-user
Reply | Threaded
Open this post in threaded view
|

Re: ~50% performance difference overlaying static image with png series using -vf/-filter_complex

Paul B Mahol
On 8/22/13, d-fens <[hidden email]> wrote:

> hi,
>
> i have a background png and a sequence of pngs with transparency which
> should overlay the background.
>
> when i use
>
> ./ffmpeg -i %04d.png -vf "movie=bg.png [bg]; [in] format=rgb32, split
> [T1], fifo, [bg] overlay=0:0, [T2] overlay=0:0 [out]; [T1] fifo [T2]"
> out.mp4
>
> (taken from
> http://stackoverflow.com/questions/10438713/overlay-animated-images-with-transparency-over-a-static-background-image-using-f)
> i get arround 13fps for fullHD images, but using
>
> ./ffmpeg -loop 1 -i bg.png -i %04d.png -filter_complex
> overlay=shortest=1 out.mp4

Try removing loop and shortest.

>
> i get around 7fps for the same images.
> I guess the background image gets re-read here but thats just a guess;
> as the second, newer version looks much more clean and simple i wonder
> whats the way to get best performance in this scenario?
>
> greets!
> _______________________________________________
> ffmpeg-user mailing list
> [hidden email]
> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>
_______________________________________________
ffmpeg-user mailing list
[hidden email]
http://ffmpeg.org/mailman/listinfo/ffmpeg-user
Reply | Threaded
Open this post in threaded view
|

Re: ~50% performance difference overlaying static image with png series using -vf/-filter_complex

d-fens
Zitat von Paul B Mahol <[hidden email]>:

> On 8/22/13, d-fens <[hidden email]> wrote:
>> hi,
>>
>> i have a background png and a sequence of pngs with transparency which
>> should overlay the background.
>>
>> when i use
>>
>> ./ffmpeg -i %04d.png -vf "movie=bg.png [bg]; [in] format=rgb32, split
>> [T1], fifo, [bg] overlay=0:0, [T2] overlay=0:0 [out]; [T1] fifo [T2]"
>> out.mp4
>>
>> (taken from
>> http://stackoverflow.com/questions/10438713/overlay-animated-images-with-transparency-over-a-static-background-image-using-f)
>> i get arround 13fps for fullHD images, but using
>>
>> ./ffmpeg -loop 1 -i bg.png -i %04d.png -filter_complex
>> overlay=shortest=1 out.mp4
>
> Try removing loop and shortest.


this just outputs one frame, so no success :(


_______________________________________________
ffmpeg-user mailing list
[hidden email]
http://ffmpeg.org/mailman/listinfo/ffmpeg-user
Reply | Threaded
Open this post in threaded view
|

Re: ~50% performance difference overlaying static image with png series using -vf/-filter_complex

Paul B Mahol
On 8/23/13, d-fens <[hidden email]> wrote:

> Zitat von Paul B Mahol <[hidden email]>:
>
>> On 8/22/13, d-fens <[hidden email]> wrote:
>>> hi,
>>>
>>> i have a background png and a sequence of pngs with transparency which
>>> should overlay the background.
>>>
>>> when i use
>>>
>>> ./ffmpeg -i %04d.png -vf "movie=bg.png [bg]; [in] format=rgb32, split
>>> [T1], fifo, [bg] overlay=0:0, [T2] overlay=0:0 [out]; [T1] fifo [T2]"
>>> out.mp4
>>>
>>> (taken from
>>> http://stackoverflow.com/questions/10438713/overlay-animated-images-with-transparency-over-a-static-background-image-using-f)
>>> i get arround 13fps for fullHD images, but using
>>>
>>> ./ffmpeg -loop 1 -i bg.png -i %04d.png -filter_complex
>>> overlay=shortest=1 out.mp4
>>
>> Try removing loop and shortest.
>
>
> this just outputs one frame, so no success :(

Than change order of streams - make bg.png 2nd.
>
>
> _______________________________________________
> ffmpeg-user mailing list
> [hidden email]
> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>
_______________________________________________
ffmpeg-user mailing list
[hidden email]
http://ffmpeg.org/mailman/listinfo/ffmpeg-user
Reply | Threaded
Open this post in threaded view
|

Re: ~50% performance difference overlaying static image with png series using -vf/-filter_complex

d-fens
Zitat von Paul B Mahol <[hidden email]>:

> On 8/23/13, d-fens <[hidden email]> wrote:
>> Zitat von Paul B Mahol <[hidden email]>:
>>
>>> On 8/22/13, d-fens <[hidden email]> wrote:
>>>> hi,
>>>>
>>>> i have a background png and a sequence of pngs with transparency which
>>>> should overlay the background.
>>>>
>>>> when i use
>>>>
>>>> ./ffmpeg -i %04d.png -vf "movie=bg.png [bg]; [in] format=rgb32, split
>>>> [T1], fifo, [bg] overlay=0:0, [T2] overlay=0:0 [out]; [T1] fifo [T2]"
>>>> out.mp4
>>>>
>>>> (taken from
>>>> http://stackoverflow.com/questions/10438713/overlay-animated-images-with-transparency-over-a-static-background-image-using-f)
>>>> i get arround 13fps for fullHD images, but using
>>>>
>>>> ./ffmpeg -loop 1 -i bg.png -i %04d.png -filter_complex
>>>> overlay=shortest=1 out.mp4
>>>
>>> Try removing loop and shortest.
>>
>>
>> this just outputs one frame, so no success :(
>
> Than change order of streams - make bg.png 2nd.

well that puts the background over the sequence, its fast (15fps  
processing) though :| but very static ...
_______________________________________________
ffmpeg-user mailing list
[hidden email]
http://ffmpeg.org/mailman/listinfo/ffmpeg-user
Reply | Threaded
Open this post in threaded view
|

Re: ~50% performance difference overlaying static image with png series using -vf/-filter_complex

Paul B Mahol
On 8/23/13, d-fens <[hidden email]> wrote:

> Zitat von Paul B Mahol <[hidden email]>:
>
>> On 8/23/13, d-fens <[hidden email]> wrote:
>>> Zitat von Paul B Mahol <[hidden email]>:
>>>
>>>> On 8/22/13, d-fens <[hidden email]> wrote:
>>>>> hi,
>>>>>
>>>>> i have a background png and a sequence of pngs with transparency which
>>>>> should overlay the background.
>>>>>
>>>>> when i use
>>>>>
>>>>> ./ffmpeg -i %04d.png -vf "movie=bg.png [bg]; [in] format=rgb32, split
>>>>> [T1], fifo, [bg] overlay=0:0, [T2] overlay=0:0 [out]; [T1] fifo [T2]"
>>>>> out.mp4
>>>>>
>>>>> (taken from
>>>>> http://stackoverflow.com/questions/10438713/overlay-animated-images-with-transparency-over-a-static-background-image-using-f)
>>>>> i get arround 13fps for fullHD images, but using
>>>>>
>>>>> ./ffmpeg -loop 1 -i bg.png -i %04d.png -filter_complex
>>>>> overlay=shortest=1 out.mp4
>>>>
>>>> Try removing loop and shortest.
>>>
>>>
>>> this just outputs one frame, so no success :(
>>
>> Than change order of streams - make bg.png 2nd.
>
> well that puts the background over the sequence, its fast (15fps
> processing) though :| but very static ...

I didn't benchmark but I assume -loop takes most of time as it decodes
same file over and over again.
So instead adding looping of main input inside overlay it would be
better to add generic solution:
repeat filter which would repeat each frame [0-inf] times.

> _______________________________________________
> ffmpeg-user mailing list
> [hidden email]
> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>
_______________________________________________
ffmpeg-user mailing list
[hidden email]
http://ffmpeg.org/mailman/listinfo/ffmpeg-user
Reply | Threaded
Open this post in threaded view
|

Re: ~50% performance difference overlaying static image with png series using -vf/-filter_complex

d-fens
Zitat von Paul B Mahol <[hidden email]>:

> On 8/23/13, d-fens <[hidden email]> wrote:
>> Zitat von Paul B Mahol <[hidden email]>:
>>
>>> On 8/23/13, d-fens <[hidden email]> wrote:
>>>> Zitat von Paul B Mahol <[hidden email]>:
>>>>
>>>>> On 8/22/13, d-fens <[hidden email]> wrote:
>>>>>> hi,
>>>>>>
>>>>>> i have a background png and a sequence of pngs with transparency which
>>>>>> should overlay the background.
>>>>>>
>>>>>> when i use
>>>>>>
>>>>>> ./ffmpeg -i %04d.png -vf "movie=bg.png [bg]; [in] format=rgb32, split
>>>>>> [T1], fifo, [bg] overlay=0:0, [T2] overlay=0:0 [out]; [T1] fifo [T2]"
>>>>>> out.mp4
>>>>>>
>>>>>> (taken from
>>>>>> http://stackoverflow.com/questions/10438713/overlay-animated-images-with-transparency-over-a-static-background-image-using-f)
>>>>>> i get arround 13fps for fullHD images, but using
>>>>>>
>>>>>> ./ffmpeg -loop 1 -i bg.png -i %04d.png -filter_complex
>>>>>> overlay=shortest=1 out.mp4
>>>>>
>>>>> Try removing loop and shortest.
>>>>
>>>>
>>>> this just outputs one frame, so no success :(
>>>
>>> Than change order of streams - make bg.png 2nd.
>>
>> well that puts the background over the sequence, its fast (15fps
>> processing) though :| but very static ...
>
> I didn't benchmark but I assume -loop takes most of time as it decodes
> same file over and over again.
> So instead adding looping of main input inside overlay it would be
> better to add generic solution:
> repeat filter which would repeat each frame [0-inf] times.
>
  yes, i also think the png gets re-read in a loop, maybe
http://git.videolan.org/?p=ffmpeg.git;a=commit;h=6e643239d9956ce32888d87451706ee7c8757afa speeds it up a bit, but a repeat filter would be great or loop without the overhead. But just to be clear: there is no way to archive this with current -filter_complex  
yet?
_______________________________________________
ffmpeg-user mailing list
[hidden email]
http://ffmpeg.org/mailman/listinfo/ffmpeg-user
Reply | Threaded
Open this post in threaded view
|

Re: ~50% performance difference overlaying static image with png series using -vf/-filter_complex

Paul B Mahol
On 8/23/13, d-fens <[hidden email]> wrote:

> Zitat von Paul B Mahol <[hidden email]>:
>
>> On 8/23/13, d-fens <[hidden email]> wrote:
>>> Zitat von Paul B Mahol <[hidden email]>:
>>>
>>>> On 8/23/13, d-fens <[hidden email]> wrote:
>>>>> Zitat von Paul B Mahol <[hidden email]>:
>>>>>
>>>>>> On 8/22/13, d-fens <[hidden email]> wrote:
>>>>>>> hi,
>>>>>>>
>>>>>>> i have a background png and a sequence of pngs with transparency
>>>>>>> which
>>>>>>> should overlay the background.
>>>>>>>
>>>>>>> when i use
>>>>>>>
>>>>>>> ./ffmpeg -i %04d.png -vf "movie=bg.png [bg]; [in] format=rgb32,
>>>>>>> split
>>>>>>> [T1], fifo, [bg] overlay=0:0, [T2] overlay=0:0 [out]; [T1] fifo
>>>>>>> [T2]"
>>>>>>> out.mp4
>>>>>>>
>>>>>>> (taken from
>>>>>>> http://stackoverflow.com/questions/10438713/overlay-animated-images-with-transparency-over-a-static-background-image-using-f)
>>>>>>> i get arround 13fps for fullHD images, but using
>>>>>>>
>>>>>>> ./ffmpeg -loop 1 -i bg.png -i %04d.png -filter_complex
>>>>>>> overlay=shortest=1 out.mp4
>>>>>>
>>>>>> Try removing loop and shortest.
>>>>>
>>>>>
>>>>> this just outputs one frame, so no success :(
>>>>
>>>> Than change order of streams - make bg.png 2nd.
>>>
>>> well that puts the background over the sequence, its fast (15fps
>>> processing) though :| but very static ...
>>
>> I didn't benchmark but I assume -loop takes most of time as it decodes
>> same file over and over again.
>> So instead adding looping of main input inside overlay it would be
>> better to add generic solution:
>> repeat filter which would repeat each frame [0-inf] times.
>>
>   yes, i also think the png gets re-read in a loop, maybe
> http://git.videolan.org/?p=ffmpeg.git;a=commit;h=6e643239d9956ce32888d87451706ee7c8757afa
> speeds it up a bit,

That speeds decoding of multiple frames, so should improve both cases.

> but a repeat filter would be great or loop without the
> overhead. But just to be clear: there is no way to archive this with current
> -filter_complex
> yet?

I think so. But I guess you could use 2 overlays like you did with non
filter_complex case.
(yes, extra overlay is not nice ....)
_______________________________________________
ffmpeg-user mailing list
[hidden email]
http://ffmpeg.org/mailman/listinfo/ffmpeg-user
Reply | Threaded
Open this post in threaded view
|

Re: ~50% performance difference overlaying static image with png series using -vf/-filter_complex

Nicolas George-2
In reply to this post by Paul B Mahol
Le sextidi 6 fructidor, an CCXXI, Paul B Mahol a écrit :
> I didn't benchmark but I assume -loop takes most of time as it decodes
> same file over and over again.
> So instead adding looping of main input inside overlay it would be
> better to add generic solution:
> repeat filter which would repeat each frame [0-inf] times.

There are a lot of things missing in overlay to achieve subtle effects, and
this is only one of them. I will try to make a summary on the -dev
mailing-list with useful suggestions.

To implement this particular effect in the most general case, the original
solution of sandwitching the background in front of the overlay to give the
sync seems the only solution.

If the video is CFR, the following hack should eliminate most of the
overhead due to the loop effect:

-loop 1 -i bg.png -i video.mp4 lavfi '[0] fps=25 [bg] ;
[bg] [1] overlay=shortest=1'

Regards,

--
  Nicolas George

_______________________________________________
ffmpeg-user mailing list
[hidden email]
http://ffmpeg.org/mailman/listinfo/ffmpeg-user

signature.asc (205 bytes) Download Attachment