如何使用qtj和java从一组图像创建电影?

Ham*_*aya 6 java video quicktime

我有一组图像,我想一个接一个地添加并创建一个电影.我将使用Quicktime for java(我在Mac上).

我在网上搜索了我发现了很多例子,展示了如何使用qtj播放电影,但我找不到任何代码片段或教程,展示我如何使用qtj逐帧创建电影?

P. *_*ore 7

我通过QTJ用处理库(GPL)中的MovieMaker类完成了这个.处理是纯java,虽然它可以为初学者隐藏它.

小教程: 下载处理,打开它,转到草图 - >显示草图文件夹,创建一个名为"数据"的文件夹,并将所有图像放在该文件夹中,通过"filename09.gif"命名为"filename01.gif".将以下代码粘贴到编辑器中,然后点击播放:

/**
 * 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();    
  }
}
Run Code Online (Sandbox Code Playgroud)

这将从sketch文件夹中的图像创建一个文件"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" });
  }
}
Run Code Online (Sandbox Code Playgroud)

要使用纯java,您需要使用类路径上的处理应用程序文件夹中的core.jar和video.jar,然后编译此java代码.这是一个函数引用和处理库的javadoc. 以下是MovieMaker类的javadoc.如果需要,您可以看到MovieMaker类的源代码.

HTH


Bjo*_*ern 1

这里有一段与导出相关的示例代码:

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

它展示了如何打开单个本机 QuickTime 影片进行读取,然后将其传递到 MovieExporter 组件以从中创建新的 QuickTime 影片。

有关导入文件作为写入源的代码,请参见

void importMedia()
Run Code Online (Sandbox Code Playgroud)

有关将源导出到 QuickTime 影片的代码,请参阅

void run()
Run Code Online (Sandbox Code Playgroud)

不过,只要 QuickTime 支持输入文件的文件格式(例如 fe BMP),就应该可以使用相同的方法打开图像文件。

您也应该能够使用大部分代码编写一系列图像文件。您需要研究的唯一一点是您必须调用哪种方法来将额外的帧附加到现有的电影中。它可能使用相同的 API 工作,但很可能您需要使用另一个调用。

如果您必须寻找另一种方法,您应该能够在位于此处的 QT Java 参考文档中找到它:

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

这是一种黑客行为,而且很可能性能较差,但它实际上可能有效。

而且...我从未尝试过这个(我是 Windows 版 QuickTime 的专业人士)所以:抱歉,没有保证 = )。


编辑:如果您正在寻找一种使用现有输入缓冲区将帧写入 QT Movie 的方法,而不是使用 QT API 从文件中读取数据,那么也应该有用于此目的的 API。只需查看参考文档即可。


编辑 2:实际上,在这里查看 C/C++ API 文档可能是值得的,因为组件和调用的命名似乎遵循大致相同的命名约定(即,这可能有助于挖掘您需要的 Java API 的调用)C /C++ 文档在提供指南和操作方法作为起点方面似乎更全面。C/C++ 文档可以在这里找到:

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

最有趣的部分应该是

  1. 进出口
  2. 压缩与解压

玩得开心!