I have already changed to avconv
, so i apologise if the answer may be a little different in the classic ffmpeg, but i believe that not much difference should be there.
You can have a moving crop if you can create some sort of formula between the frame number and the position of the crop; but there are no analytic tools available to do that. This means that if the the speaker moves in a predictable way you could theoretically do that without an external application.
Let's assume, for example, that the speaker is moving from top-left to bottom-right in the picture. You could do something along the lines of:
avconv -i input.ogv -vf 'crop=200:100:n:n' -c:v libtheora output.ogv
In here i'm moving 1 pixel per frame, which is very unlikely how somebody would move.
Keep in mind that there are quite a lot of math functions that are provided by the filter interface of avconv (and i'm sure ffmpeg is similar).
So let's imagine that you want to move 1 pixel per frame, but only from 200 to 350 frame. You can then do
min(max(n,200)-200, 150)
For the frames <200, max(n,200)
would generate 200, then we take away 200 to make it 0, and then min
will return the first part up until 350 frame, where that result would become more than 150 and the constant will begin to be returned.
Although writing such formula by hand would be quite tedious, maybe it will be helpful in some cases as well.
Having said all that, if i were to have an option of having access to the software that is able to work on images frame by frame, i would go that route.