Как мне создать фильм из набора изображений, используя qtj и java? - PullRequest
6 голосов
/ 13 марта 2009

У меня есть набор изображений, которые я хочу добавить одно за другим и создать фильм. Я буду использовать QuickTime для Java для этого (я на Mac).

Я искал в Интернете, я нашел много примеров, которые показывают, как воспроизводить фильмы, используя qtj, но я не могу найти фрагменты кода или учебники, показывающие, как я могу создать фильм кадр за кадром, используя qtj?

Ответы [ 2 ]

7 голосов
/ 30 марта 2009

Я сделал это через QTJ с классом MovieMaker из обработки библиотек (GPL). Обработка - чистая Java, хотя это может скрыть это для новичков.

Небольшой учебник: Загрузите Обработка, откройте ее, перейдите в Sketch -> Show Sketch Folder, создайте папку с именем «data» и поместите все ваши изображения в эту папку с именами «filename01.gif» - «filename09.gif». Вставьте следующий код в редактор и нажмите play:

/**
 * 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();    
  }
}

Это создаст файл "drawing.mov" из ваших изображений в папке с эскизами. Если вы зайдете в файл -> экспортировать приложение, а затем откроете папку эскиза и перейдите в папку application.macosx / source или application.windows/source, должен быть файл .java, содержащий фактический код, который должен выглядеть как это:

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" });
  }
}

Чтобы использовать чистую Java, вам нужно использовать core.jar и video.jar из папки приложения обработки на вашем пути к классам, а затем скомпилировать этот код Java. Вот ссылка на функцию и javadoc для библиотеки обработки. Вот javadocs для класса MovieMaker . Если хотите, вы можете увидеть источник для класса MovieMaker.

НТН

1 голос
/ 17 марта 2009

Здесь приведен пример кода, связанный с экспортом:

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

Показывает, как отдельный нативный фильм QuickTime можно открыть для чтения, а затем передать в компонент MovieExporter для создания из него нового фильма QuickTime.

Код для импорта файла в качестве источника для записи см.

void importMedia()

Код для экспорта исходного кода в фильм QuickTime см.

void run()

Должна быть возможность открыть файл изображения, используя тот же подход, однако, если формат файла входного файла поддерживается QuickTime (например, BMP).

Вы также сможете написать последовательность файлов изображений, используя большую часть этого кода. Единственный момент, который вам нужно исследовать, - это какой метод вам нужно вызвать, чтобы добавить дополнительных кадров к существующему Фильму. Он может работать с использованием того же API, но, скорее всего, вам придется использовать другой вызов.

Если вам нужно найти другой метод, вы сможете найти его в Справочной документации по QT Java, расположенной здесь:

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

Это взломанный и, скорее всего, плохой по производительности, но на самом деле он может работать.

И ... Я никогда не пробовал это (я по профессии парень QuickTime для Windows), поэтому: извините, никаких гарантий =).


Редактировать : Если вы ищете способ записи кадров в QT Movie с использованием существующего входного буфера вместо чтения данных из файла с использованием QT API, должны быть API для это тоже. Просто ознакомьтесь со справочной документацией.


Редактировать 2 : На самом деле, возможно, стоит ознакомиться с документацией API C / C ++ здесь, так как наименование компонентов и вызовов, по-видимому, соответствует примерно тем же соглашениям об именах (то есть это может помочь вызовы Java API, которые вам нужны) и Документы C / C ++ кажутся более тщательными с точки зрения предоставления руководств и практических рекомендаций в качестве отправной точки. Документы C / C ++ можно найти здесь:

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

Самые интересные разделы должны быть

  1. Импорт и экспорт
  2. Сжатие и декомпрессия

Веселись!


...