java - 使用 xuggler 从一组图像创建视频

标签 java eclipse video xuggle xuggler

我一直在到处寻找解决方案!在本网站和其他网站上。 我发现了一些有趣的事情,但它们并没有解决我的问题。我会解释一下。

我有一个视频,我用 xuggler 对它的每一帧进行分级。当我获得所有帧时,我使用颜色算法编辑所有帧。另外,我将音频存储在 mp3 文件中。

现在我需要从所有帧创建一个视频,该视频当然应该具有与帧速率和持续时间相同的特征。之后我必须合并音频。

我已经完成了第一部分,但我不知道如何创建具有相同特征的视频。我正在遵循这段代码:

http://www.javacodegeeks.com/2011/02/xuggler-tutorial-frames-capture-video.html

Can't encode video with Xuggler

但它拍摄快照并使用一个奇怪的循环:

for (int index = 0; index < SECONDS_TO_RUN_FOR * FRAME_RATE; index++)

我不知道如何设置正确的特征。这应该很容易,因为我知道有关视频的一切!大小、帧速率和帧数。

我的代码:

public static void main(String[] args) throws IOException {

    final IMediaWriter writer = ToolFactory.makeWriter(outputFilename);
    writer.addVideoStream(0, 0, ICodec.ID.CODEC_ID_MPEG4, 
               720, 304);
    long nextFrameTime = 0;
    final long frameRate =25/1000;
    long startTime = System.nanoTime();
    while (indexVideo<1597) {
        BufferedImage videoImage = null;
        try {
            videoImage = getVideoImage();
        } catch (AWTException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        writer.encodeVideo(0, videoImage,nextFrameTime, 
                TimeUnit.MILLISECONDS);
        nextFrameTime += frameRate;

}
    writer.close();
}

private static BufferedImage getVideoImage() throws IOException, AWTException {

     File imgLoc = new File("D:/Gianfranco/Sample/"+indexVideo+".png");
     BufferedImage img;
    img = ImageIO.read(imgLoc);
    System.out.println(imgLoc.getName());
    indexVideo++;
    return img;

}

有人可以帮我吗?

最佳答案

快速浏览一下您的代码,我发现您没有设置帧速率。我不知道你使用的是哪个版本的 xuggler,但对我来说,我在添加视频流时设置了帧速率:

writer.addVideoStream(0, 0, ICodec.ID.CODEC_ID_MPEG4, IRational.make(<frames>/<per second>), 720, 304);

现在另一种(可能更合适)的方法是通过打开原始视频来创建 IMediaWriter。

    IMediaReader reader = ToolFactory.makeReader("inputFile.mp4");
    IMediaWriter writer = ToolFactory.makeWriter("outputFile.mp4", reader);

或者也许你可以通过抓取第一个容器,然后抓取格式来实现。我只对流数据而不是存档数据执行此操作。

关于java - 使用 xuggler 从一组图像创建视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9175543/

相关文章:

java - 隐藏 "cannot be resolved"错误

php - 任何有效的 php 调试器,PDT?

ios - 图像选择器 Controller : Save video to play again on a subsequent run of the app

android - 在 WebView 中按下视频时打开 native 视频播放器(全屏)

java - BIRT Report using POJOs unning under tomcat

java - 利用 NetBeans GUI 构建器设计的面板?

java - 使用温和的传输

java - 我想检查我的用户输入是否包含作为我的 firestore 数据库中的文档的子字符串,这在 Java 中可能吗? (Android 工作室)

java - 如何将git项目制作为Android项目?

javascript - 在 YouTube 视频上单击鼠标静音/取消静音