2015-07-22 147 views
5

我正在尋找一種開源工具/代碼或一些指導來提取H.264編碼比特序列的運動矢量(MV)。我已經知道,運動向量可使用的ffmpeg用下面的命令被可視化:從H.264比特流提取運動矢量

ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv=pf+bf+bb

然而,我希望產生其中P和B幀的MV是由幀列出幀的日誌文件。我從libavutil/motion_vector.h中檢出了MV的結構,但是我找不到一個例子顯示它們是如何被ffplay提取並放置在原始序列上的。我認爲,如果我能找到答案,我可能會重新安排代碼以將MV提取到文本文件。

我也試過在this answer給出的代碼,但它似乎並沒有與ffmpeg的較新版本的工作:

我將不勝感激任何例子代碼或提示。

+0

尋求教程,工具和庫對於Stack Overflow而言是無關緊要的(參見[help])。另請注意,[ffplay源代碼](https://www.ffmpeg.org/doxygen/trunk/ffplay_8c-source.html)已獲得LGPL許可,並且可用。 –

+2

他還要求提供代碼/指導,所以更有用的操作應該是提供一些代碼示例。 – Luca

回答

8

codecview視頻過濾器的源代碼是here,那是你在找什麼?

對不起,我猜這不是非常有幫助。您正在尋找的功能是filter_frame(),它向您展示瞭如何從給定的AVFrame中讀取AVMotionVectors(作爲邊數據),這是您的命令行示例中使用的代碼。這個例子調用draw_arrow(),但你可以簡單地用printf()或一些自定義函數來替換它,這些函數會將MV信息記錄到你選擇的日誌文件中。

+0

嗨,請給我一些關於如何在MATLAB中使用AVMotionVectors的更多細節。您的答案確實提供了一些提示,但我被阻止使用。如何在Matlab中得到這個。關於這方面的信息很少。 –

+0

我會問一個更詳細的新問題,我不知道你想如何在matlab中輸入數據,或者你準確地阻止了什麼。 –