Im trying to scale a video so that it is always 512 wide where the height changes in proportion to the original video. Once scaled, I then want to apply a watermark/overlay to the video, therefore the video will scale but the watermark wont.
I am able to achieve each of these separately using the following filters:
Scale
-vf "scale=512:-1"
Watermark
-vf "movie=watermark.png [watermark]; [in][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]"
They work successfully on their own.
However when trying to combine the two, Im having a bit of trouble.
Having both as parameters of course does not work as one will override the other.
Ive tried:
-vf "scale=512:-1,movie=watermark.png [watermark]; [in][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]"
my thinking was that the scale would be applied first then the watermark but all I get is an error
Too many inputs specified for the "movie" filter.
Error opening filters!
Then changing the , to a ; resulted in:
Simple filtergraph 'scale=512:-1; movie=watermark.png [watermark]; [in][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]' does not have exactly one input and output.
Error opening filters!
I presume I need to do something more with filterchains but Im struggling to figure it out.
Any ideas anyone?
Many thanks in advance.
You can use the
-filter_complex
option with the scale and overlay filters:-c:a copy
if you want to stream copy (re-mux) the original audio instead of re-encoding it. This is useful if your input and output container formats are the same.overlay=10:10
overlay=W-w-10:10
overlay=W-w-10:H-h-10
overlay=H-h-10:10
Thank you to both @DiJuMx and @LordNeckbeard, you both got me closer to my solution. Ive not tried the filter_complex option yet but it certainly looks simpler.
The solution I found to work is:
Note that Ive replaced the -1 in the scale as that had the potential to cause an uneven number of pixels in the height of the video when scaling which would then cause encoding errors.
From what I understand, this might work:
You apply the scale filter to the input "[in]".
Unfortunately I don't have much experience with the filters on ffmpeg so I can't help further. Sorry