質問: OpenCVを使って mpegの動画を読み込んだ後フレームを指定して画像を取得し、いろんなことをやろうとしています。 (開発環境は VisualC++ MFC, OpenCV4.2 Win32版です) 簡単にしたソースが以下なんですが、 得られたimageが 動画ソフト(KeyframeMP2や他のソフト)でフレーム指定して表示した絵と18フレーム程ずれています。 ``` cv::VideoCapture video; video.open("mpeg動画ファイル名"); video.set(cv::CAP_PROP_POS_FRAMES, 100); cv::Mat image; video.read(image); ``` 正確にフレームを指定した画像を得る方法がありましたらご教授お願いします。
回答: 似たような経験 (動画を開いて先頭から1フレームずつgrabしていく分には問題ないが,フレーム位置を指定するとよくわからんところにすっ飛ばされてしまうという) がありますが, 古いバージョンのOpenCVのことでしたし,遭遇されている現象に対して役に立つかどうかわかりませんが... そのときは,「opencv_ffmpeg.dllが実行時に参照できるか否か」によって挙動が変わる様子でしたので, **扱う動画毎に,opencv_ffmpeg.dllを見えるようにしたり見えないようにしたりするという対処を行いました.** 今のOpenCVではどうなのかわかりませんが, その当時のバージョンでは,このdllの有無で動画を扱う手段の切り替えが行われていました. (VFWかffmpegか,みたいな)