基本的にはバイトの行列があります。各行(byte []の意味)は画像を表します。それからムービー(avi、mpegなど、あらゆるフォーマット)を作成してファイルとして保存するにはどうすればよいですか?各画像は次のいずれかになります。
int JPEG Encoded formats.
int NV16 YCbCr format, used for video.
int NV21 YCrCb format used for images, which uses the NV21 encoding format.
int RGB_565 RGB format used for pictures encoded as RGB_565.
int YUY2 YCbCr format used for images, which uses YUYV (YUY2) encoding format.
int YV12 Android YUV format: This format is exposed to software decoders and applications.
ムービーを作成できる限り、好きなようにフォーマットを選択できます。
public void createMovie(byte[][] images) {
// and ideas on what to write here?
}
実際の実装は必要ありません。アイデアと、必要な外部ライブラリ(必要な場合)を教えてください。
(テキストを追加するために)ムービーを作成する前に、いくつかの画像(バイトストリーム)を編集する必要もあります。どうやってやるの?
ソリューションは「Javaのみ」である必要があります!外部プログラム、外部コマンドはありません(ただし、外部jarを使用できます)。
ありがとう!
解決策は Mencoder を使用することです(または、少なくとも、これは準人気のある選択のようです)。
Mencoderの images-to-movies 機能に具体的に対処するリンクを次に示します。
ビデオの一部としてエンコードする前にフレームにテキストをレンダリングする場合と同様に、Java2Dの画像操作ライブラリを使用して、事前に単純に画像の上にテキストを描画できます。次に例を示します。
これがその方法の1つであり、 このFAQ は、Java2D、フォントレンダリングなどをその方向から始め、さらなるリソースへのポインタを提供するはずです。
ImageIOライブラリを使用すると、多数の画像形式を読み書きすることもできます。たとえば、.jpg-> BufferedImage-> .png、または必要に応じて、必要な方法で画像をトランスコードできます。変換プロセス中に画像ファイルを一時的に保存したり、変換プロジェクトなどにインポートするときにすべての画像を単一の形式に変換したりします。
サポートする出力フォーマットの数に応じて、おそらく次のようなことを行います
public void createMovie(BufferedImage[] frames, String destinationFormat)
...「destinationFormat」は「m4v」、「mpeg2」、「h.264」、「gif」などのようなものです。
[〜#〜] jmf [〜#〜] (Java Media Framework)について聞いたことがありますか?サンプルからこの例を見つけることができます: ( JPEG)画像
gifエンコーダー でgifを作ってみることができます。
Javaアプレット内でビデオを再生するためのMJPEGリーダーおよびライターを作成しました。MJPEGは最も高度なビデオ形式ではありませんが、操作は非常に簡単です。コードはコンピュータービジョンライブラリの一部です- BoofCV 、しかしあなたはあなた自身の目的のためにこの1つのクラスを取り除くことができます。
ユーザーフレンドリーな形式ではありませんが、少なくとも他のいくつかのソリューションのようにJNIをいじる必要はありません。