2017-11-02 3 views
0

私は例えばビデオを持っています。レースカーのビデオと私は速度とパフォーマンスに関連するいくつかの進行状況バーを含むオーバーレイビュー(透明な相対的なレイアウト)を作成しました今私はこのビューで見られるように完全なビデオをエクスポートする必要があります誰も私はffmpeg、opencv成功はない。ビデオへのオーバーレイの追加androidのビデオとしてのエクスポート

Similar Ios Overlay

+0

どのオーバレイですか? – kalabalik

+0

コードを表示してください。 – kalabalik

+0

私はその質問を理解していません。ここに私が持っているものがあります。画面上で再生されているビデオを書き出したいとします。あなたはビデオを再生するために何を使用していますか? – pellucide

答えて

0

私はあなたがこのタスクを達成するためにOpenCVのか、ffmpegのを使用することができると思うが、彼らは、このタスクのための適切なツールではないかもしれないように思えます。 OpenCVは高度なビデオ処理に最適で、フードの下では、デコードとエンコードの機能にffmpegを使用しています。 ffmpegは、さまざまなメディア形式をサポートする必要がある場合に最適です。 ffmpegでは、スタンドアロンプ​​ロセスとして実行しようとする可能性がありますが、これは権限の問題やエラー処理には理想的ではありません。また、ffmpegを組み込んだ独自のAndroid NDK APIを作成することもできますが、これは多大な労力を要します。必要な出力メディア形式がsupported by Androidであると仮定すると、最も簡単な方法はAndroid MediaCodecライブラリを使用することです。

デコード、編集、エンコード方法を示すGoogleのthis test codeをご覧ください。ビデオファイルをSurfaceTextureにデコードすることができます。編集部分では、OpenGL ESを使用してオーバーレイを行います。オーバレイ画像をテクスチャにアップロードし、ビデオフレームSurfaceTextureに描画することができます。シーンが描かれると、出力されたテクスチャをMediaCodecエンコーダに送ることができます。これはすべてエクスポートプロセスで行うことができ、必ずしも視聴可能なビデオと透明な相対レイアウトに関連付ける必要はありません。

0

ビデオをビットマップにデコードし、ビットマップをmp4ビデオにエンコードする場合は、jcodecを使用できます。

SequenceEncoder sequenceEncoder = new SequenceEncoder(new File(pathToSaveVideo)); 

映像にオーバーレイビットマップに戻って

Canvas canvas = new Canvas(backgroundBitmap); 
Paint rectpaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
int width = overlayBitmap.getWidth(); 
int height = overlayBitmap.getHeight(); 
Rect des = new Rect(0, 0, canvas.getWidth(), canvas.getHeight()); 
Rect src = new Rect(0, 0, width, height); 
canvas.drawBitmap(overlayBitmap, src, des, rectpaint); 
  • エンコードそれを組み合わせるループ内でのビデオ

  • の各フレームの

    1. 抽出ビットマップを次の手順を実行し

      sequenceEncoder.encodeImage(backgroundBitmap); 
      

    は最後にループした後、エンコーダを終える

    sequenceEncoder.finish()

  • 0

    あなたはOpenCVのorg.bytedeco.javacppを使用して達成することができるようになります、私はフレームをgarbingとFFmpegFrameRecorderはバックMP4に、この画像を記録するFFmpegFrameGrabberを使用同じオーディオコーデック

    関連する問題