I'm looking for an open-source tool/code or some guidance to extract the motion vectors (MVs) of a H.264 encoded bit sequence. I'm already aware that motion vectors can be visualized using ffmpeg with the following command:
ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv=pf+bf+bb
However, I want to produce a log file where the MVs of P and B frames are listed frame by frame. I checked out the structure of MVs from libavutil/motion_vector.h, but I couldn't find an example which shows how they are extracted and laid over the original sequence by ffplay. I thought that if I can find that out, I could possibly re-arrange the code to extract the MVs to a text file.
I also tried the code given in this answer, but it doesn't seem to work with the newer versions of ffmpeg:
I would appreciate any example codes or hints.
The source code for the codecview video filter is here, is that what you're looking for?
[edit] Sorry I guess that's not terribly helpful. The function you're looking for is filter_frame(), which shows you how to read AVMotionVectors (as side-data) from a given AVFrame, this is the code used in your commandline example. This example calls draw_arrow(), but you can simply replace that with a call to printf() or some custom function that logs the MV information to a logfile of your choosing.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With