2009-03-13 15 views
6

Ho una serie di immagini che voglio aggiungere una dopo l'altra e creare un film. Userò Quicktime per java per questo (sono su un mac).Come posso creare un film da un insieme di immagini usando qtj e java?

Ho cercato sul web ho trovato molti esempi che mostrano come riprodurre film usando qtj, ma non riesco a trovare alcun frammento di codice o tutorial che mostrano come posso creare un filmato fotogramma per fotogramma usando qtj?

risposta

1

C'è un pezzo legati esportazione di codice di esempio qui:

http://developer.apple.com/samplecode/ImportExport/listing1.html

Essa mostra come un unico nativo filmato QuickTime può essere aperto per la lettura e poi essere trasmessi a un componente MovieExporter per creare una nuova QuickTime Movie da esso.

Per il codice per importare un file a fonte per la scrittura, vedi

void importMedia() 

Per il codice per esportare la fonte a un filmato QuickTime, vedi

void run() 

Dovrebbe essere possibile aprire un file immagine usando lo stesso approccio, purché il formato file del file di input sia supportato da QuickTime (come fe BMP).

Dovresti essere in grado di scrivere una sequenza di file immagine utilizzando anche la maggior parte di questo codice. L'unico punto che dovrai indagare è quale metodo dovrai chiamare a aggiungi frame aggiuntivi a un film esistente. Potrebbe funzionare utilizzando la stessa API, ma molto probabilmente dovrai utilizzare un'altra chiamata.

Se si deve scavare per un altro metodo si dovrebbe essere in grado di trovare nella documentazione QT Java Riferimento trova qui:

http://developer.apple.com/Java/Reference/1.4/Java14API_QTJ/

Si tratta di un hack e molto probabilmente povero in termini di prestazioni, ma potrebbe funziona davvero

E ... Non ho mai provato questo (io sono un ragazzo QuickTime per Windows per mestiere) quindi: mi dispiace, nessuna garanzia =).


Edit: Se siete alla ricerca di un modo per scrivere fotogrammi ad un QT filmato utilizzando un buffer di ingresso esistente invece di leggere i dati dal file utilizzando il QT API, ci dovrebbe essere API per questo come bene. Basta controllare la documentazione di riferimento.


Edit 2: In realtà potrebbe essere utile per controllare il C/C++ API Documentation qui, come nomi di componenti e chiamate sembra seguire approssimativamente le stesse convenzioni di denominazione (cioè questo potrebbe aiutare a scavare per le chiamate dell'API Java necessarie) e i documenti C/C++ sembrano essere più completi in termini di fornitura di Guide e How To come punto di partenza.Il C/C++ Docs può essere trovato qui:

http://developer.apple.com/referencelibrary/QuickTime/index.html

Le sezioni più interessanti dovrebbero essere

  1. Import & Export
  2. compressione & decompressione

Buon divertimento!


7

Ho fatto questo attraverso QTJ con la classe MovieMaker da processing librerie (GPL). L'elaborazione è pura java, sebbene possa nasconderla per i principianti.

piccolo tutorial: Scarica Processing, aprirlo, andare Sketch -> Mostra cartella Sketch, crea una cartella chiamata "dati", e mettere tutte le immagini all'interno di quella cartella, denominata "filename01.gif" attraverso " filename09.gif". Incollare il seguente codice nell'editor, e ha colpito il gioco:

/** 
* Makes a QuickTime movie out of an array of images. 
*/ 

import processing.video.*; 

MovieMaker mm; 
PImage[] imageFrames; 
int index; 

void setup() { 
    size(320, 240); 
    int numFrames = 9; 
    imageFrames = new PImage[numFrames]; 
    for(int i = 0; i < imageFrames.length; i++) 
    { 
    imageFrames[i] = loadImage("filename" + nf(i+1,2) + ".gif"); 
    } 
    // Save uncompressed, at 15 frames per second 
    mm = new MovieMaker(this, width, height, "drawing.mov"); 
    // Or, set specific compression and frame rate options 
    //mm = new MovieMaker(this, width, height, "drawing.mov", 30, 
    //     MovieMaker.ANIMATION, MovieMaker.HIGH); 
} 

void draw() { 
    if(index < imageFrames.length) 
    { 
    // show the image 
    image(imageFrames[index], 0, 0); 
    // Add window's pixels to movie 
    mm.addFrame(); 
    index++; 
    } 
    else 
    { 
    mm.finish(); 
    // Quit running the sketch once the file is written 
    exit();  
    } 
} 

questo creerà un file "drawing.mov" dalle immagini nella cartella schizzo. Se vai al file -> esporta l'applicazione, quindi apri la cartella dello schizzo e vai alla cartella application.macosx/source o application.windows/source, dovrebbe esserci un file .java con il codice effettivo, che dovrebbe apparire in questo modo:

import processing.core.*; 
import processing.xml.*; 

import processing.video.*; 

import java.applet.*; 
import java.awt.*; 
import java.awt.image.*; 
import java.awt.event.*; 
import java.io.*; 
import java.net.*; 
import java.text.*; 
import java.util.*; 
import java.util.zip.*; 
import java.util.regex.*; 

public class movie2 extends PApplet { 

/** 
* Makes a QuickTime movie out of an array of images. 
*/ 



MovieMaker mm; 
PImage[] imageFrames; 
int index; 

public void setup() { 
    size(320, 240); 
    int numFrames = 9; 
    imageFrames = new PImage[numFrames]; 
    for(int i = 0; i < imageFrames.length; i++) 
    { 
    imageFrames[i] = loadImage("filename" + nf(i+1,2) + ".gif"); 
    } 
    // Save uncompressed, at 15 frames per second 
    mm = new MovieMaker(this, width, height, "drawing.mov"); 
    // Or, set specific compression and frame rate options 
    //mm = new MovieMaker(this, width, height, "drawing.mov", 30, 
    //     MovieMaker.ANIMATION, MovieMaker.HIGH); 
} 

public void draw() { 
    if(index < imageFrames.length) 
    { 
    // show the image 
    image(imageFrames[index], 0, 0); 
    // Add window's pixels to movie 
    mm.addFrame(); 
    index++; 
    } 
    else 
    { 
    mm.finish(); 
    // Quit running the sketch once the file is written 
    //exit();  
    println("done"); 
    } 
} 

    static public void main(String args[]) { 
    PApplet.main(new String[] { "--bgcolor=#e0dfe3", "movie2" }); 
    } 
} 

usare Java puro, è necessario utilizzare core.jar e video.jar dalla cartella applicazione di elaborazione sul classpath, e quindi compilare il codice Java. Ecco uno function reference e uno javadoc per la libreria di elaborazione. Here are the javadocs for the MovieMaker class. Se lo desideri, puoi vedere source nella classe MovieMaker.

HTH

Problemi correlati