当前位置: 首页 > 知识库问答 >
问题:

JavaCV FFmpegFrameRecorder将图像保存为视频

鲜于海
2023-03-14

我对JavaCV FFMPEGFrameRecOrder的使用有点困惑。我有几个字节[]或短[]数组(取决于我的图像是8位还是16位),如果我有几个图像的相关数据。现在,我的想法是使用JavaCPP将每个图像发送到ffmpeg,这样它就可以在我希望的framerate上从这个集合中创建一个静音视频。到目前为止,我有:

package ffmpeg;

import java.awt.EventQueue;
import java.io.File;
import java.nio.Buffer;
import java.nio.ByteBuffer;

import javax.swing.JFrame;

public class rwa {

    private JFrame frame;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    rwa window = new rwa();
                    window.frame.setVisible(true);

                    Frame myframe = new Frame();
                    myframe .imageHeight = 100;
                    myframe .imageWidth = 200;
                    myframe .imageChannels = 1;
                    myframe .imageDepth = 8;

                    byte[] myimage = new byte[20000];

                    //all black
                    for (int j = 0; j<myimage.length; j++){
                        myimage[j]=-128;
                    }

                    File dest = new File("C:\\out.mp4");
                    FFmpegFrameRecorder record = new FFmpegFrameRecorder(dest, 0);
                    //FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(dest);
                    record.setFrameRate(0.04);
                    record.setVideoCodec(13);
                    record.setFormat("mp4");
                    record.setPixelFormat(0);
                    record.setImageHeight(100);
                    record.setImageWidth(200);
                    record.setVideoBitrate(1000000);

                    record.start();
                    for (int i=0; i<100; i++){

                        if (myimage.length*(1+i)<20000) {
                         //this is just for debugging it. I'm creating a different image each frame to see if it works. In practice, I will read in each step the propper image
                        for (int j = myimage.length*i; j<myimage.length*(i+1); j++){
                            myimage[j]=127;
                        }
                      }

                        Buffer[] buf = {ByteBuffer.wrap(myimage)};

                        myframe.image = buf;
                        record.recordImage(200, 100, 8, 1, 0, 0, ByteBuffer.wrap(myimage));
                        //record.record(myframe);
                    }
                    record.stop();
                    record.close();

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public rwa() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

}

但我经常犯这样的错误

谢了!

共有1个答案

盛超
2023-03-14

在使用事件/线程时,应该在JavaCV中使用parallel.run()方法。

 类似资料:
  • 我试图将字节保存为图像,但似乎不起作用。 以下是我尝试过的: 但我得到一个错误,说它不能写模式RGBA为JPEG,所以我猜这个方法只适用于PNG?如果是这样的话,有没有其他方法来处理jpeg图像?

  • 我有一个画布元素,其中有一个绘图,我想创建一个按钮,当点击它时,它将把图像保存为一个png文件。因此它应该打开“保存、打开、关闭”对话框... 我使用这个代码 但当我在IE9中测试它时,一个新窗口打开了,上面写着“网页无法显示”,其url是: 有人知道怎么解决这个吗?

  • 保存图像 能将图像保存至Memory Stick™或主机内存。 1. 让指针对准想要保存的图像,从选单列中选择[档案] > [保存图像]。 2. 选择[保存]。 提示 若想变更文件名或保存位置,请选择各项输入栏,并执行决定。

  • 请原谅我的新问题,这个问题主要是因为我顽固地缺乏对拉雷维尔多对多关系的理解。 在我的网站上,用户可以上传图片 伴随着用户自己创建的标签。这些标记存储为一个数组,经过验证,然后检查标记是否存在。如果标签存在,我希望在“tagmap”上有一个条目,将新图像与该标签相关联。如果它不存在,我希望同样的事情发生,但也有一个新的标签被创建。 我有3个表,一个图像表、一个标签表和一个名为“tagmap”的透视表

  • 我使用以下代码使用gstream er进行直播,但我不知道如何在接收器端保存视频/图像。有人请帮帮我。提前谢谢。 发送方代码:“raspivid-t 999999-h 720-w 1080-fps 25-b 2000000-o-| gst-launch-0.10-v fdsrc fd=0!H264解析!RTPH264支付!udpsink主机=192.168.2.1端口=5000” 接收器代码:“u

  • 问题内容: 情况:我有一张图片,用户可以在上面添加文本,在其中更改颜色,大小,位置,旋转度,字体大小等,我需要将所有这些文本保存在一张图像中。没关系,我通过使用图形缓存保存它们。 问题:由于用户设备的屏幕尺寸,结果图像可能很小。我需要此图像的分辨率为1500-2000像素。如果仅调整此图像的大小,则文本看起来模糊并且不如在屏幕上显示的那样好。 问题:还有其他方法可以将文本视图另存为图像,而不仅仅是