2017-02-22 24 views
0

私はユーザーがビデオを撮ることができるアプリケーションを持っており、ファイルから特定のフレームを取りたいと思っています。メソッドMediaMetaDataRetriever.getFrameAtTime()を使用すると、毎秒1フレームしか抽出できませんが、秒間にフレームを取得したいと考えています。私はまた、右のフレームをつかむために私のプロジェクトにJcodecを実装しようとした:Androidのビデオから正確なフレームを取得する

FrameGrab.getFrame(new File(videoFileToRetreive.getVideoFile()), currentFrame);

しかし、関係なく、私はに、currentFrameに入れて何数、画像は常にビデオの最初のフレームを返しません。 ffmpegを使わずにこのようなことをする方法はありますか?誰かが答えを知っていれば、それは非常に高く評価されるだろう。

答えて

0

おそらくMediaMetaDataRetrieverを使用している場合は、同じフレームワークのMediaPlayerも使用していると思われます。この場合は

は、MediaPlayerseekTo(millis)

は残念ながらseekToタイムスタンプではなく、フレームにトラックを移動する方法を提供しますが、あなたの場合に移動するための正しい位置をうまくすることができるはずですフレームレートを知る。

また、getFrameAtTimeを見てみると、パラメータは「マイクロ秒」になる「uSecs」です。これは、メソッドが1秒間に1フレーム以上を返すことができることを意味します。これは、

その正確なマイクロ秒で何のフレームがありません、それは近くのフレームを取ることはあなたのビデオが30fpsのを持っている場合、すべての33.333 USECSフレームが存在しますので、getFrameAtTimeを呼び出すときに、そのサイズに近い間隔を使用してくださいということです

+0

私はこれを試しましたが、1秒ごとに存在するキーフレームにスキップするだけです。これを無視する方法はありませんか? – hermt2

+0

問題は面白かったので、ソースコードをちょっと見てみた –

+0

助けてくれてありがとうございました。 – hermt2

関連する問題