Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java将缓冲区图像编码为视频文件(mp4)_Java_Mp4_Bufferedimage - Fatal编程技术网

Java将缓冲区图像编码为视频文件(mp4)

Java将缓冲区图像编码为视频文件(mp4),java,mp4,bufferedimage,Java,Mp4,Bufferedimage,我已经看了前面的主题,但是找不到CompressedTrack类。 我已经能够从视频中抓取帧了。 是否有任何方法可以使用BuffereImage(屏幕截图)创建mp4视频文件 谢谢你的帮助 package org.tkassembled.xuggle; package org.tkassembled.xuggle; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.image.BufferedImage; i

我已经看了前面的主题,但是找不到CompressedTrack类。 我已经能够从视频中抓取帧了。 是否有任何方法可以使用BuffereImage(屏幕截图)创建mp4视频文件

谢谢你的帮助

package org.tkassembled.xuggle;
package org.tkassembled.xuggle;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

import javax.imageio.ImageIO;

import com.xuggle.mediatool.IMediaWriter;
import com.xuggle.mediatool.ToolFactory;
import com.xuggle.xuggler.ICodec;

public class ManualVideoCompile {

    private static Dimension screenBounds;
    public static int indexVideo = 1;
    private static final double FRAME_RATE = 50;

    private static final int SECONDS_TO_RUN_FOR = 20;
    private static final String OUTPUT_FILE = "C:/video/today.mp4";

    public static void main(String[] arguments) {
        final IMediaWriter writer = ToolFactory.makeWriter(OUTPUT_FILE);
        screenBounds = Toolkit.getDefaultToolkit().getScreenSize();
        writer.addVideoStream(0, 0, ICodec.ID.CODEC_ID_MPEG4,
                screenBounds.width / 2, screenBounds.height / 2);
        long startTime = System.nanoTime();

        for (int index = 0; index < 15; index++) {

            BufferedImage bgrScreen = getVideoImage();
            System.out.println("time stamp = "+ (System.nanoTime() - startTime));
            bgrScreen = convertToType(bgrScreen, BufferedImage.TYPE_3BYTE_BGR);
            // encode the image to stream #0
            //writer.encodeVideo(0, bgrScreen, (System.nanoTime() - startTime)/2,TimeUnit.NANOSECONDS);
            // encode the image to stream #0
            writer.encodeVideo(0, bgrScreen, System.nanoTime() - startTime,
                    TimeUnit.NANOSECONDS);
            // sleep for frame rate milliseconds
            try {
                Thread.sleep((long) (100));
            } catch (InterruptedException e) {
                // ignore
            }
        }
        writer.close();
    }

    private static BufferedImage getVideoImage() {

        File imgLoc = new File("C:/images/" + indexVideo + ".png");
        BufferedImage img = null;
        try {
            img = ImageIO.read(imgLoc);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(imgLoc.getName());
        indexVideo++;
        return img;
    }

    public static BufferedImage convertToType(BufferedImage sourceImage,
            int targetType) {

        BufferedImage image;

        // if the source image is already the target type, return the source
        // image
        if (sourceImage.getType() == targetType) {
            image = sourceImage;
        }
        // otherwise create a new image of the target type and draw the new
        // image
        else {
            image = new BufferedImage(sourceImage.getWidth(),
                    sourceImage.getHeight(), targetType);
            image.getGraphics().drawImage(sourceImage, 0, 0, null);
        }

        return image;

    }

}
导入java.awt.Dimension; 导入java.awt.Toolkit; 导入java.awt.image.buffereImage; 导入java.io.File; 导入java.io.IOException; 导入java.util.concurrent.TimeUnit; 导入javax.imageio.imageio; 导入com.xuggle.mediatool.IMediaWriter; 导入com.xuggle.mediatool.ToolFactory; 导入com.xuggle.xuggler.ICodec; 公共类手册视频编辑{ 私有静态维度边界; 公共静态int indexVideo=1; 专用静态最终双帧_速率=50; 专用静态最终整数秒到运行时间=20; 私有静态最终字符串输出\u FILE=“C:/video/today.mp4”; 公共静态void main(字符串[]参数){ 最终IMediaWriter-writer=ToolFactory.makeWriter(输出文件); screenBounds=Toolkit.getDefaultToolkit().getScreenSize(); writer.addVideoStream(0,0,ICodec.ID.CODEC\u ID\u MPEG4, screenBounds.width/2、screenBounds.height/2); long startTime=System.nanoTime(); 对于(int-index=0;index<15;index++){ BuffereImage bgrScreen=getVideoImage(); System.out.println(“时间戳=“+(System.nanoTime()-startTime)); bgrScreen=convertToType(bgrScreen,BufferedImage.TYPE_3BYTE_BGR); //将图像编码为流#0 //writer.encodeVideo(0,bgrScreen,(System.nanoTime()-startTime)/2,时间单位为纳秒); //将图像编码为流#0 writer.encodeVideo(0,bgrScreen,System.nanoTime()-startTime, 时间单位(纳秒); //帧速率毫秒睡眠 试一试{ 睡眠((长)(100)); }捕捉(中断异常e){ //忽略 } } writer.close(); } 私有静态缓冲区映像getVideoImage(){ 文件imgLoc=新文件(“C:/images/”+indexVideo+“.png”); BuffereImage img=null; 试一试{ img=图像读取(imgLoc); }捕获(IOE异常){ e、 printStackTrace(); } System.out.println(imgLoc.getName()); indexVideo++; 返回img; } 公共静态BuffereImage转换类型(BuffereImage sourceImage, int目标类型){ 缓冲图像; //如果源映像已经是目标类型,请返回源映像 //形象 if(sourceImage.getType()==targetType){ 图像=源图像; } //否则,创建目标类型的新图像并绘制新图像 //形象 否则{ image=new BufferedImage(sourceImage.getWidth(), sourceImage.getHeight(),targetType); image.getGraphics().drawImage(sourceImage,0,0,null); } 返回图像; } }
“我已经看过以前的主题”链接到它们。“但是这个类压缩了Track…”那是什么?链接到JavaDocs。它只是从图像创建mp4视频。希望它能帮助我添加录制的声音?