Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extraction motion vectors from H.264 bitstream [closed]

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.

like image 644
chronosynclastic Avatar asked Jul 22 '15 07:07

chronosynclastic


1 Answers

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.

like image 126
Ronald S. Bultje Avatar answered Nov 01 '22 10:11

Ronald S. Bultje