Pertanyaan Java: Bagaimana cara membuat film dari berbagai gambar?


Saya pada dasarnya memiliki matriks byte. Setiap baris (yang berarti byte []) mewakili sebuah gambar. Bagaimana cara membuat film dari itu (format apa pun - avi, mpeg, apa pun), dan menyimpannya sebagai file? Setiap gambar dapat menjadi salah satu dari yang berikut:

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.

Saya dapat memilih format untuk apa pun yang saya suka, selama saya bisa membuat film.

public void createMovie(byte[][] images) {
  // and ideas on what to write here?
}

Saya tidak memerlukan implementasi yang sebenarnya, cukup beri tahu saya ide dan perpustakaan eksternal apa yang saya perlukan (jika saya memerlukannya).

Saya juga perlu mengedit beberapa gambar (aliran byte) sebelum saya membuat film (untuk menambahkan beberapa teks). Bagaimana saya bisa melakukannya?

Solusinya harus "Java only"! Tidak ada program eksternal, tidak ada perintah eksternal (tapi saya bisa menggunakan guci eksternal).

Terima kasih!


32
2018-01-13 20:23


asal


Jawaban:


Solusinya sepertinya digunakan Mencoder (atau setidaknya, itu tampaknya menjadi pilihan semi-populer).

Berikut tautan yang secara khusus ditujukan gambar-ke-film kemampuan dalam Mencoder.

Adapun rendering teks ke frame sebelum encoding mereka sebagai bagian dari video, Anda dapat menggunakan perpustakaan manipulasi gambar Java2D untuk hanya menggambar teks di atas gambar sebelumnya Sebagai contoh:

Itu salah satu cara untuk melakukannya, dan FAQ ini Anda harus mulai di arah itu dengan Java2D, rendering font, dll, dan menawarkan petunjuk untuk sumber daya lebih lanjut.

Pustaka ImageIO juga memungkinkan Anda untuk membaca / menulis sejumlah format gambar, yang secara efektif memungkinkan Anda mengubah gambar dari, katakan, .jpg -> BufferedImage -> .png, atau cara apa pun yang Anda perlukan untuk melakukannya, jika Anda ingin menyimpan file gambar sementara selama proses konversi, dan / atau mengkonversi semua gambar ke format tunggal saat mengimpornya untuk proyek konversi, dll.

Tergantung pada berapa banyak format output yang ingin Anda dukung, Anda mungkin akan melakukan sesuatu seperti

public void createMovie(BufferedImage[] frames, String destinationFormat)

... di mana "destinationFormat" adalah sesuatu seperti "m4v", "mpeg2", "h.264", "gif", dll.


8
2018-01-13 20:59



Pernahkah Anda mendengar tentang JMF (Java Media Framework), dari contoh Anda dapat menemukan contoh ini: Menghasilkan File Film dari Daftar Gambar (JPEG)


5
2018-01-13 21:05



Anda dapat mencoba membuat gif dengan ini enkoder gif.


2
2018-01-13 21:02



Saya menulis pembaca dan penulis MJPEG untuk memutar video di dalam applet Java. MJPEG bukan format video paling canggih tetapi sangat mudah dimanipulasi. Kode ini adalah bagian dari perpustakaan visi komputer saya BoofCV, tetapi Anda bisa saja merobek kelas yang satu ini untuk tujuan Anda sendiri.

  1. Unduh file ini: CreateMJpeg.java
  2. Lihatlah fungsi utama. Di mana ia membaca gambar jpeg menempatkan data byte [] Anda, tetapi Anda harus mengonversinya menjadi jpeg terlebih dahulu.
    • Anda dapat mengubahnya menjadi jpeg menggunakan pustaka java standar
  3. Jalankan kode yang dimodifikasi dan nikmati film Anda

Maaf tidak dalam format yang lebih mudah digunakan, tetapi setidaknya Anda tidak perlu mengacaukan JNI seperti beberapa solusi lain.


1
2018-01-13 21:06