2012-01-13 33 views
31

Tôi về cơ bản có ma trận byte. Mỗi hàng (nghĩa là byte []) đại diện cho một hình ảnh. Làm thế nào để tạo một bộ phim ra khỏi đó (bất kỳ định dạng nào - avi, mpeg, bất cứ điều gì), và lưu nó thành một tệp? Mỗi hình ảnh có thể là một trong những cách sau:Java: Làm cách nào để tạo phim từ một mảng hình ảnh?

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. 

tôi có thể chọn định dạng để bất cứ điều gì tôi thích, miễn là tôi nhận được để tạo ra bộ phim.

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

Tôi không cần triển khai thực tế, chỉ cần cho tôi biết ý tưởng và thư viện bên ngoài tôi cần (nếu cần).

Tôi cũng cần chỉnh sửa một số hình ảnh (luồng byte) trước khi tạo phim (để thêm một số văn bản). Làm thế nào tôi có thể làm điều đó?

Giải pháp cần phải là "chỉ Java"! Không có chương trình bên ngoài, không có lệnh bên ngoài (nhưng tôi có thể sử dụng các jars bên ngoài).

Cảm ơn!

+3

+1, cho một câu hỏi tuyệt vời. Ước gì tôi có thể trả lời câu hỏi này nhưng cốc của tôi hoàn toàn trống rỗng. Hy vọng ai đó sẽ. Kính trọng –

Trả lời

8

Giải pháp có vẻ là sử dụng Mencoder (hoặc ít nhất, đó dường như là lựa chọn bán phổ biến).

Đây là liên kết cụ thể giải quyết các khả năng images-to-movies trong Mencoder.

Đối với render văn bản vào khung trước khi mã hóa chúng như một phần của video, bạn có thể sử dụng thư viện xử lý ảnh Java2D để chỉ cần vẽ văn bản trên đầu trang của những hình ảnh trước đó Ví dụ:

đó là một cách để làm điều đó, và this FAQ nên giúp bạn bắt đầu trong t mũ hướng với Java2D, phông chữ rendering, vv, và cung cấp con trỏ đến các nguồn lực hơn nữa.

Thư viện ImageIO cũng cho phép bạn đọc/ghi một số định dạng hình ảnh, cho phép bạn chuyển mã hình ảnh từ, chẳng hạn như .jpg -> BufferedImage -> .png, hoặc bất kỳ cách nào bạn cần thực hiện, nếu bạn muốn lưu trữ tệp hình ảnh tạm thời trong quá trình chuyển đổi và/hoặc chuyển đổi tất cả hình ảnh thành một định dạng duy nhất khi nhập chúng cho dự án chuyển đổi, v.v.

Tùy thuộc vào số định dạng đầu ra bạn muốn hỗ trợ, bạn có thể sẽ làm một cái gì đó như

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

... trong đó "destinationFormat" giống như "m4v", "mpeg2", "h .264 "," gif ", v.v.

+0

Cảm ơn bạn đã trả lời! Giải pháp của bạn có vẻ tuyệt vời! Nhưng Mencoder có vẻ là một chương trình bên ngoài. Tôi đã đề cập đến tôi cần điều này trong Java chỉ? :) Tôi không .... – user361676

+0

Ồ, tôi không nhận ra điều đó. Nếu bạn không muốn sử dụng các thư viện/chương trình bên ngoài thông qua các cuộc gọi hệ thống, thì tôi không có bất kỳ giải pháp thay thế nào, tôi sợ. – jefflunt

+0

Ít nhất câu hỏi của tôi về cách viết văn bản qua hình ảnh đã được trả lời. Cảm ơn vì điều đó! – user361676

2

Bạn có thể thử tạo gif bằng gif encoder này.

+0

Cảm ơn, nhưng tôi cần một avi hoặc mpeg, nén hoặc không nén. – user361676

4

Bạn đã nghe nói về JMF (Java Media Framework), từ mẫu, bạn có thể tìm thấy ví dụ này: Generating a Movie File from a List of (JPEG) Images

+0

Đây sẽ là một giải pháp lý tưởng, nhưng tôi không thể tìm thấy bất kỳ hướng dẫn nào mô tả cách viết tệp video bằng JMF. Chủ đề đó không có câu trả lời mà tôi có thể đọc ... – user361676

+0

Xin lỗi vì liên kết trước đó, tôi không thấy nó không được giải quyết. Mẫu này là từ tài liệu JMF, nên tốt hơn. – webpat

1

tôi đã viết một reader MJPEG và nhà văn để chơi video bên trong Java applet. MJPEG không phải là định dạng video tiên tiến nhất nhưng nó rất dễ thao tác.Mã này là một phần của thư viện thị giác máy tính của tôi BoofCV, nhưng bạn chỉ có thể tách lớp này ra cho mục đích của riêng bạn.

  1. Download this file: CreateMJpeg.java
  2. Nhìn vào hàm main. Trường hợp nó đọc trong hình ảnh jpeg đặt byte của bạn [] dữ liệu, nhưng bạn sẽ cần phải chuyển đổi nó để jpeg đầu tiên.
    • Bạn có thể chuyển đổi nó thành một jpeg sử dụng thư viện java tiêu chuẩn
  3. Run đổi mã và thưởng thức phim của bạn

Xin lỗi không phải của mình trong một định dạng thân thiện với người dùng hơn, nhưng ít nhất bạn không cần phải gây rối với JNI như một số giải pháp khác.

+0

Tôi đã thử, nhưng trình phát của tôi không thể mở tệp đầu ra ngay cả khi tôi đổi tên nó thành "avi". – user361676

+0

người chơi nào? Trên hệ thống Ubuntu của tôi nó chơi tốt trong mplayer. –

+0

Tôi đã thử MX Video Player và Mobo, cả hai đều không thể phát. – user361676

Các vấn đề liên quan